项目实例
注:需要导入jar包,请参考前面几篇文章进行下载
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <filter> <!-- Filter的名字,此处为FilterA--> <filter-name>FilterA</filter-name> <!-- Filter的类,也就是所在位置,这里显示为Filter包下的FilterA--> <filter-class>Filter.FilterA</filter-class> </filter> <filter> <filter-name>FilterB</filter-name> <filter-class>Filter.FilterB</filter-class> </filter> <!-- mapping映射设置开始--> <filter-mapping> <!-- 映射对象(name)FilterA--> <filter-name>FilterA</filter-name> <!-- 对谁拦截:/ServletA--> <url-pattern>/ServletA</url-pattern> <!-- mapping映射设置结束--> </filter-mapping> <!--Filter过滤器访问先后顺序取决于代码的书写顺序--> <filter-mapping> <filter-name>FilterB</filter-name> <url-pattern>/ServletA</url-pattern> </filter-mapping> <servlet> <servlet-name>ServletA</servlet-name> <servlet-class>Servlet.ServletA</servlet-class> </servlet> <servlet-mapping> <!-- servlet映射设置开始--> <!-- servlet的名字:ServletA--> <servlet-name>ServletA</servlet-name> <!-- 虚拟路径:/Servlet,也就是通过这个路径才能访问到该Servlet--> <url-pattern>/ServletA</url-pattern> </servlet-mapping> </web-app>
ServletA
package Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class ServletA extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.setContentType("text/html;charset=UTF-8");//当过滤器存在,此行应加在过滤器中,在此处无效 PrintWriter out=response.getWriter(); out.print("Hello!<br>"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } } /* Filter的拦截响应及返回响应路径: 客户端 Filter 服务器 发送请求--->拦截并处理数据------->响应 返回响应<------处理数据<---------响应 */
FilterA
package Filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class FilterA implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { //强转为Http协议 HttpServletResponse response=(HttpServletResponse)resp; //设置编码格式,仅在第一层过滤器设置即可 response.setContentType("text/html;charset=UTF-8"); PrintWriter out=resp.getWriter(); out.print("Stop![My FilterA]<br>"); chain.doFilter(req, resp);//放行 out.print("Come Back![FilterA]<br>"); } public void init(FilterConfig config) throws ServletException { } }
FilterB
package Filter; import javax.servlet.*; import java.io.IOException; import java.io.PrintWriter; public class FilterB implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { PrintWriter out=resp.getWriter(); out.print("Stop![My FilterB]<br>"); chain.doFilter(req, resp);//放行 out.print("Come Back![FilterB]<br>"); } public void init(FilterConfig config) throws ServletException { } }