当前位置: 首页 > news >正文

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
查看效果

http://www.dtcms.com/a/305833.html

相关文章:

  • 「日拱一码」043 机器学习-多目标预测可解释性
  • 解决Nginx的HTTPS跨域内容显示问题
  • 相亲小程序聊天与互动系统模块搭建
  • C语言:指针
  • 【刷题】东方博宜oj 1307 - 数的计数
  • Ubuntu安装和使用Anaconda
  • Linux信号机制:从生活化类比到技术实现的多维度解析
  • rabbitmq--默认模式(点对点)
  • android-PMS-包加载的顺序
  • eBPF 赋能云原生: WizTelemetry 无侵入网络可观测实践
  • Ubuntu22.04.1搭建php运行环境
  • 【C++】类和对象(中)拷贝构造、赋值重载
  • 【目标检测】d-fine模型部署
  • 【25届数字IC秋招总结】面试经验12——海康威视
  • 【Kubernetes 指南】基础入门——Kubernetes 201(一)
  • 常见的其他安全问题
  • GitPython01-依赖排查
  • 大模型对比评测:Qwen2.5 VS Gemini 2.0谁更能打?
  • 制造业企业大文件传输的痛点有哪些?
  • JavaScript和小程序写水印的方法示例
  • github-idea新建文件就要弹窗提醒-如何关闭-2025.7.30
  • RustDesk 使用教程
  • 【C#】DevExpress.XtraEditors.MemoEdit memoEditLog控件讲解
  • Linux的小程序——进度条
  • 相亲小程序匹配与推荐系统模块搭建
  • 元码智能“大眼睛”机器人首发,智启生活新纪元!
  • Netty的Http解码器源码分析
  • Tdesign-React 模板面包屑如何放到 Header头部
  • 深度学习:预训练和warm up的区别
  • React 开发中遇见的低级错误