java web 对比使用注解方式和 web.xml 方式配置过滤器
文件目录
├── lib\
│ ├── javax.annotation.jar
│ ├── javax.ejb.jar
│ ├── javax.jms.jar
│ ├── javax.persistence.jar
│ ├── javax.resource.jar
│ ├── javax.servlet.jar
│ ├── javax.servlet.jsp.jar
│ ├── javax.servlet.jsp.jstl.jar
│ └── javax.transaction.jar
├── src\
│ └── com\
│ └── zhang\
│ └── web\
│ ├── filter\
│ └── servlet\
└── web\├── Hello.jsp├── WEB-INF\│ └── web.xml└── index.jsp
配置文件
<?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_4_0.xsd"version="4.0">
<!-- 配置拦截路径 -->
<!-- 拦截器配置文件执行顺序,哪个在上哪个先执行 --><filter><filter-name>FilterDemo1</filter-name><filter-class>com.zhang.web.filter.FilterDemo1</filter-class></filter><filter-mapping><filter-name>FilterDemo1</filter-name><url-pattern>/*</url-pattern>
<!-- 拦截方式 --><!-- 请求 --><dispatcher>REQUEST</dispatcher><!-- 转发 --><dispatcher>FORWARD</dispatcher></filter-mapping>
</web-app>
前端
<!-- Hello.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Hello</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html><!-- index.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>测试</title></head><body>
<h1>index.jsp... ... </h1><%System.out.println("index.jsp... ... 被执行了");%></body>
</html>
访问
http://localhost:8081/Hello.jsp
http://localhost:8081/index.jsp
查看效果
后端代码
/*** 过滤器的包是import javax.servlet.Filter;*/import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//@WebFilter("/*")//所有资源请求的时候,过滤器都要执行
public class FilterDemo1 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("FilterDemo1... ... 被执行了");//放行filterChain.doFilter(servletRequest, servletResponse);//放行后的代码}@Overridepublic void destroy() {}
}import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*** 顺序:* 1.执行过滤器* 2.执行放行后的资源* 3.回来执行过滤器放行代码下边的代码*/
//@WebFilter("/*")
public class FilterDemo2 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("FilterDemo2被执行了。。。 。。。");//放行chain.doFilter(req, resp);System.out.println("FilterDemo2回来了。。。 。。。");}public void init(FilterConfig config) throws ServletException {}}import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;//@WebFilter(value = "/*")
public class FilterDemo3 implements Filter {/*** init:在启动服务器后,会创建filter对象,然后调用init方法,只执行一次,用于加载资源* @param config* @throws ServletException*/public void init(FilterConfig config) throws ServletException {System.out.println("init被执行了");}/*** doFilter:每一次请求被拦截资源时,会执行,执行多次* @param req* @param resp* @param chain* @throws ServletException* @throws IOException*/public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("doFilter被执行了");chain.doFilter(req, resp);}/*** 在服务器关闭后,filter对象被销毁,* 如果服务器是正常关闭,则会执行destroy方法,执行性一次。用于释放资源*/public void destroy() {System.out.println("destroy被执行了");}}import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;//@WebFilter("/index.jsp")//只有执行index.jsp时候才会执行
//@WebFilter("/user/*")//访问user下所有资源,过滤器都会被执行
//@WebFilter("*.jsp")//访问所有后缀名为jsp资源时,被执行
//@WebFilter("/*")//所有都被拦截
public class FilterDemo4 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("FilterDemo4被执行了");chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;//@WebFilter(value = {"/index.jsp","/hello.jsp"})
//@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.REQUEST)//浏览器直接访问才过滤
//@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.FORWARD)//浏览器转发访问才过滤public class FilterDemo5 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("FilterDemo5被执行了");chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
public class FilterDemo6 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("FilterDemo6... ...被执行了");chain.doFilter(req, resp);System.out.println("FilterDemo6... ...回来了");}public void init(FilterConfig config) throws ServletException {}}import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*** 如果有俩拦截器1,2* 顺序:* 过滤器1-->过滤器2-->资源放行-->过滤器2-->过滤器1*/
@WebFilter("/*")
public class FilterDemo17 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("FilterDemo17... ... 被执行了");chain.doFilter(req, resp);System.out.println("FilterDemo17... ...回来了");}public void init(FilterConfig config) throws ServletException {}}import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet( "/user/servletDemo1")
public class ServletDemo1 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/user/servletDemo2")
//@WebServlet("/servletDemo2")//测试转发用这个
public class ServletDemo2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//转发方式request.getRequestDispatcher("./index.jsp").forward(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);}
}
访问
http://localhost:8081/user/servletDemo1
http://localhost:8081/user/servletDemo2
查看效果