web.xml 文件中一般包括 servlet, spring, filter, listenr的配置。那么他们是按照一个什么顺序加载呢?
加载顺序会影响对spring bean 的调用。
比如filter 需要用到 bean ,但是加载顺序是 先加载filter 后加载spring,则filter中初始化操作中的bean为null;
首先可以肯定 加载顺序与他们在web.xml 文件中的先后顺序无关。
web.xml 中 listener 和 serverlet 的加载顺序为 先 listener 后serverlet
最终得出结果:先 listener >> filter >> servlet >> spring
所以,如果过滤器中要使用到 bean,可以将spring 的加载 改成 Listener的方式
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
搞定!
关于他们的内部执行顺序,也需要注意,如下面文章中遇到的问题
web.xml的filter执行顺序导致的乱码,切记!
2008-05-02 01:38
发现引起bug的原因是web.xml的下面几行:
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
根据servlet2.3规范filter执行是按照web.xml配置的filter-mapping先后顺序进行执行,所以上面的配置会导致遇见*.do的url请求,先进行SecurityFilter的过滤器处理,这时候没有做编码处理,已经是乱码,到下面的filter处理时已经时乱码,再做编码处理已经没有用处。
修正方式,调整filter-mapping顺序,如下:
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
相关推荐
java servlet spring web filter listenr
主要介绍了web.xml中servlet, bean, filter, listenr 加载顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
我希望这个专栏能够帮助这样的一些开发者:他们正在使用MySQL,知道如何写出逻辑 正确的SQL语句来实现业务目标,却不确定这个语句是不是最优的;他们听说了一些使用数据库 的最佳实践,但是更想了解为什么这么做;...
本文主要给大家介绍了关于Oracle 11g...$ mkdir -p audit_file_dest background_dump_dest user_dump_dest core_dump_dest listenr_log_dest 2. 查看不同数据库日志文件所在路径 $ sqlplus / as sysdba SQL> show p
该程序采用了Python的smtplib模块和pyqt5模块,实现了自动登录QQ邮箱的功能,并且支持向其他QQ邮箱或如网易邮箱等其他类型的邮箱发送文本邮件和附带文件的邮件。
2024年全球胚胎移植玻璃化冷冻介质行业总体规模、主要企业国内外市场占有率及排名
多式联运 (1)
sklearn中决策树算法进行泰坦尼克号人员幸存预测 有包的导入、数据处理、特征提取、预测结果等
编译原理实验报告(1和2)(可运行)
数据库第一次满分上机报告
j2se6.chm.zip
ins爬虫on工具,能够批量爬取ins资源
库房检测APP.apk
系统主要分员工管理员两个角色 管理模块具体有商品管理,部门员工管理,进货管理,订单管理,换货管理,供应商管理,供应商管理,客户管理,公告通知管理等模块,而员工模块具体由商品管理,进货管理,订单管理,供应商管理,客户管理,换货订单管理,公告通知管理等模块组成。 仓库管理信息系统所涉及的主要数据包括商品管理、进货管理、订单管理、换货管理和供应商管理,客户管理,公告通知管理下面分别分析这些数据需求。 (1)商品管理 商品管理主要是管理商品分类信息以及管理商品信息。 (2)进货管理 进货管理主要员工可以登记进货信息,以及查看我的进货记录,而管理员可以添加进货信息以及对进货信息的管理。 (3)订单管理 订单管理主要是对订单的一个统计,员工对销售的订单进行登记,管理员可以管理员工们的订单销售。 (4)换货管理 换货管理主要员工可以登记换货信息,以及查看我的换货记录,而管理员可以添加换货信息以及对换货信息的管理。 (5)供应商管理 管理员可以管理对他们厂家的供应商,来达到可以很好及时的跟供应商进行沟通。 (6)客户管理 管理员可以管理客户。对客户进行维护。
没有word只有图片,打印图片打印出来发黑怎么办?如何像打印doc一样清楚。教你一招搞定
matlab 独立分量分析 fastica,icaplot,remmean,whiten,盲源分离,去均值,白化处理.zip
文档Python双指针算法模板和题目同向相向快速排序归并排序提取方式是百度网盘分享地址
向天歌【简约扁平化】大学生实习社会实践报告.ppt
GEK气化炉sw18可编辑设计图纸.7z