标签: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 的用法。
标签:javaweb mon contex tco its 注意 工程 control 乱码问题
原文地址:https://www.cnblogs.com/ibrigd/p/12940943.html