web.xml里的Servlet和Filter示例
来源:互联网 发布:蒙泰端口设置 编辑:程序博客网 时间:2024/05/21 05:05
项目结构:
src--com.xx(package) --FilterDemo --ServletDemoWebRoot--index.jsp--login.jsp--fail.jsp--WEB-INF --web.xml
首先配置web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list><!--配置Servlet--> <servlet> <!--给你的servlet起名字,任意的(不知道为什么我用servlet01一直在报错)--> <servlet-name>hi</servlet-name> <!--指明servlet的路径,包名+类名 注意类名后不能加上java--> <servlet-class>com.xx.Servlet01</servlet-class> </servlet> <servlet-mapping> <!--mapping 自然就是映射了 于是乎 这个同上,一致--> <servlet-name>hi</servlet-name> <!--这是浏览器中输入的访问该servlet的url 任意的--> <url-pattern>/sb</url-pattern> </servlet-mapping> //总的也就是说一个叫hi的servlet,出生在servlet-class这里,浏览器想找他玩,只能在url-pattern这里 <!--配置Filter筛选器--> <filter> <!--用于为过滤器指定一个名字,该元素的内容不能为空--> <filter-name>filterDemo</filter-name> <!--此元素用于指定过滤器的完整的限定类名--> <filter-class>com.xx.FilterDemo</filter-class> </filter> <filter-mapping><!--映射过滤器--> <filter-name>filterDemo</filter-name> <!--“/*”表示拦截所有的请求 --> <!--这里拦截的是:.../项目名/index.jsp, 如果拦截到会转入com.xx.FilterDemo的service()方法执行相应操作 --> <url-pattern>/index.jsp</url-pattern> <!--指定过滤器所拦截的资源被 Servlet 容器调用的方式, 可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。 用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。--> <dispatcher>REQUEST</dispatcher> </filter-mapping></web-app>
子元素可以设置的值及其意义:
1. REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。\
2. INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
3. FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
4. ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
servlet就存在一个web容器里,是一个java对象,但容器里有多个servlet,每个servlet对http请求的处理方式都不同,所以要在web.xml里告诉Tomcat本web Project需要用到的是哪个servlet。
Servlet01.java
package com.xx;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * 开发servlet有三种方法,一种是实现servlet接口,一种是继承GernericServlet 还有一种是继承HttpServlet。 * *///这是我的第一个Servlet 使用实现Servlet接口的方式来开发public class Servlet01 implements Servlet{ // 销毁servlet实例(释放内存) // 1 reload 该servlet(webApp) // 2 关闭Tomcat 或者说 关机之后 都会调用这个函数 public void destroy() { System.out.println("distory servlet..."); } // 用于得到servlet配置文件 与生命周期无关 public ServletConfig getServletConfig() { return null; } public String getServletInfo() { return "servlet info."; } // 该函数用于初始化该servlet, 类似于我们的类的构造函数 // 该函数只是会被调用一次, 当用户第一次访问该servlet的时候被调用 public void init(ServletConfig arg0) throws ServletException { System.out.println("init servlet..."); } // service 函数用于处理业务逻辑 // 程序员应当把业务逻辑代码写在这里 // 该函数在用户每次访问servlet的时候都会被调用 // ServletRequest 对象用于获得客户端信息,ServletResponse 对象用于向客户端返回信息(客户端可以理解为浏览器) // servelt jsp b/s public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { System.out.println("service servlet..."); PrintWriter pw = response.getWriter(); pw.println("I am ServletDAD!"); }}
FilterDemo
package com.xx;import java.io.IOException;import java.lang.ProcessBuilder.Redirect;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class FilterDemo implements Filter { public void destroy() { System.out.println("distory filter..."); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("Filter excute before"); /* * 重定向到fail.jsp,但要配合web配置里的dispatcher一起; * 因为直接访问index.jsp还是会跳转到login.jsp(index里转发),拦截不到 */ request.getRequestDispatcher("fail.jsp").forward(request, response); chain.doFilter(request, response); System.out.println("Filter excute after"); } public void init(FilterConfig arg0) throws ServletException { System.out.println("init filter..."); }}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is my JSP page. <br> </body> <jsp:forward page="login.jsp"></jsp:forward></html>
fail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <font color="red">Sorry</font>,没有${username }这个用户! <br /> <a href="login.jsp">重试一下!</a></body></html>
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>登录界面</title> </head> <body> <form method="post"> <table> <tr> <td colspan="2" class="title"><span>Login Test Page</span></td> </tr> <tr> <td class="left">username:</td> <td><input type="text" name="username" /> </tr> <tr> <td class="left">password:</td> <td><input type="text" name="password" /></td> </tr> <tr class="center"> <td colspan="2"><input type="submit" value="登录" /> </tr> </table> </form> </body></html>
阅读全文
0 0
- web.xml里的Servlet和Filter示例
- java web.xml listener servlet 和filter的加载顺序
- Java WEB 工程 web.xml 文件中 context-param、listener、filter 和 servlet 的加载顺序
- servlet web.xml里的映射
- 初学 Java Web 的Servlet和Filter
- web.xml中filter,servlet和listener区别
- web.xml中filter,servlet和listener区别
- web.xml配置文件中的Servlet和filter区别?
- web.xml中的servlet和filter,url-pattern设置
- web.xml里面定义在servletcontex、Servlet和Filter的参数:
- Web.xml中设置Servlet和Filter时的url-pattern匹配规则
- web.xml中servlet, filter, listenr的加载顺序
- web.xml中servlet, spring, filter, listenr的配置
- web.xml中关于Servlet、Filter、Listener的配置
- web.xml中Servlet Filter的调用顺序
- web.xml中listener、 filter、servlet等的加载顺序
- web.xml的加载顺序 listener -> filter -> servlet
- web.xml中关于Servlet、Filter、Listener的配置
- 经验分享 | 10 个最基本的JS面试问题及答案
- [RK3288][Android6.0] 调试笔记 --- CPU温度降频控制
- 1144:素数回文
- React native 上传图片遇到的问题
- TCP连接的状态详解以及故障排查
- web.xml里的Servlet和Filter示例
- 第一篇
- tarjan求强连通分量
- Java语言基础小结5
- std::lock_guard 和 std::unique_lock的区别
- Python笔记--函数式编程
- eclipse中使用Lombok
- jq文字垂直滚动/滚屏效果
- upD79F8513A(NEC)或upD78F0511A(NEC)之定时器TM50