Java 工程师核心基础
2021-01-14 18:17
标签:javaweb mon contex tco its 注意 工程 control 乱码问题 经常使用监听器、过滤器、拦截器等技术,开发者对 SpringMVC 项目的 web.xml 中关于它们的配置早已习以为常,可能忘了它们的底层细节:它们的启动顺序如何,多个 Filter 的执行顺序是什么,Filter 链上如何调用或者阻断下一个 Filter,什么业务场景下使用哪种技术 …… 就笔者的经验来说,监听器、过滤器、拦截器、Servlet 等概念,还是十年前入行时学的知识。从业之后,都是按需百度用法,项目中所涉及到的这些类都是复用组件,很少需要修改,它们隐藏在 web.xml 中,也就忽略了它们的存在。 近期,由于项目需要添加一个角色权限验的 Filter,它和已有会话校验 Filter 有依赖关系,所以突然意识到一个问题,怎么保证这种依赖顺序:请求必须先通过会话校验 Filter,成功之后,才能进入角色权限校验 Filter? 笔者将以此次工作的内容为契机,通过程序验证 web.xml 中这些配置类协同工作的流程,形成此篇 Chat,以唤醒开发者大脑深处对 Listener、Filter、Interceptor 的记忆。 准备:创建一个 SpringMVC 的 web 工程 首先,我们选用 SpringMVC 技术,整理出与之相关的几种必要组件如下: SpringMVC 初始化 Servlet 类:DispatcherServlet; 自定义应用启动时需要的初始化操作Servlet类:AppInitServlet; 自定义用户登陆操作校验拦截器:SessionCheckerFilter; 解决请求参数乱码问题的编码拦截器:CharacterEncodingFilter,可自定义,也可用 Spring 自带的 Filter,如: org.springframework.web.filter.CharacterEncodingFilter; Log4j 监听器:Log4jConfigListener。 其次,创建一个 JavaWeb 工程,编写 web.xml 配置,其中 web-app 元素内容为: log4jConfigLocation classpath:config/log4j.properties log4jRefreshInterval 100000 org.springframework.web.util.Log4jConfigListener com.woodwang.common.TomcateCameraListener org.springframework.web.context.ContextLoaderListener contextConfigLocation classpath:config/spring.xml dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:config/spring-mvc.xml 1 dispatcherServlet /controller/* encodingFilter com.woodwang.common.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* sessionChecker com.woodwang.common.SessionCheckFilter isEnabled true indexPage index.jsp xssFilter com.woodwang.common.XssCheckFilter isEnabled true 大家可能注意到,该配置文件中的 1 个 Listener、3 个 Filter 和 1 个 Servlet 都指向自定义的类名,这样我们就可以按需添加必要的日志信息以跟踪流程。接下来笔者将实现这几个自定义的组件类,并通过执行的日志信息来带领读者了解 Listener、Filter、Interceptor 的用法。 Java 工程师核心基础 标签:javaweb mon contex tco its 注意 工程 control 乱码问题 原文地址:https://www.cnblogs.com/ibrigd/p/12940943.html