文档章节

Struts2初始化流程

陶邦仁
 陶邦仁
发布于 2012/08/29 22:50
字数 684
阅读 1K
收藏 10

精选30+云产品,助力企业轻松上云!>>>

在讲Struts2的初始化之前,应该为大家描述下Web应用中的过滤器Filter,这关系到我们对核心过滤器FilterDispatcher的正确理解。

Filter:一个filter是一个对象,为每个请求资源(一个servlet或静态内容) ,或响应一个资源,或两者,用于执行过滤任务。过滤器执行过滤是在doFilter方法中。每个过滤器方法访问一个FilterConfig对象从中获取初始化参数,filterConfig.getServletContext()可以获得ServletContext对象使用。过滤器的配置在Web应用程序的web.xml中。

init():初始化过滤器,它的输入参数javax.servlet.FilterConfig的一个实例,可以在这里初始化过滤要使用到的FilterConfig。该方法由Web容器自动调用。

doFilter():进行具体的过滤操作,这个方法以javax.servlet.ServletRequest请求信息, javax.servlet.ServletResponse响应信息,javax.servlet.FilterChain过滤链。过滤链,在Web应用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。在这个方法中调用FilterChain的 doFilter(javax.servlet.ServletRequest, javax.servlet.SerletResponse)方法就可以传递到链中的下一个过滤器。

destory():销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为null。

综上所述,在Web应用启动时,会默认初始化Filter,调用Filter的init(FilterConfig filterConfig)方法,当请求到来时,会按顺序执行web.xml中所配置Filter的doFilter(ServletRequest req, ServletResponse res, FilterChain chain)方法。

Struts2的核心过滤器FilterDispatcher实现的就是StrutsStatics, Filter接口,所以它本质就是一个过滤器,如下图所示:

image

所以Struts2的初始化工作在Web应用启动时,就可以通过FilterDispatcher核心过滤器init(FilterConfig filterConfig)方法来完成了。如下图所示:

clip_image004

FilterDispatcher.init(FilterConfig filterConfig)方法中主要工作分为:

a) 创建Dispatcher类对象,将FilterDispatcher配置的初始化参数传到该对象中;

b) 加载并解析配置文件,配置文件分为属性配置文件、Bean配置文件两种。Struts2的配置文件包括系统默认的配置文件: default.properties、struts-default.xml,以及插件配置文件、应用配置文件:struts-plugin.xml、struts.xml、struts.properties、web.xml。那么这六种配置文件的加载顺序,如下:

1. default.properties

2. struts-default.xml

3. struts-plugin.xml

4. struts.xml

5. struts.properties

6. web.xml

加载顺序如下图所示:

clip_image006

c) 加载静态资源配置参数: packages,该参数用来配置自动搜寻目录;

小提示:

FilterDispatcher 实现的StrutsStatics接口,没有定义业务方法,只定义了若干个常量。Struts2对常用的接口进行了重新封装,比如HttpServletRequest、HttpServletResponse、HttpServletContext等。如下图所示:

clip_image008

陶邦仁
粉丝 1716
博文 420
码字总数 1483963
作品 0
海淀
技术主管
私信 提问
加载中
此博客有 1 条评论,请先登录后再查看。
开源框架_Index

各种开源框架结构及简介 Struts2系列文章 Struts2初始化流程 Struts2初始化源码分析 Struts2请求处理流程 Struts2请求处理源码分析 全方位解析:Struts2 配置文件 MVC框架映射与解耦的进化史...

陶邦仁
2014/03/23
518
0
Struts2 执行流程(简化版)

一、简介 为什么说是Struts2的简化版, 因为这是在不了解Struts2的源码前提下提出的, 如果你有基础, 那么你可以根据源码分析执行流程,在这个过程中我们来看看Struts2 执行流程。 ps:这篇文章...

osc_wff1160a
2018/07/23
2
0
Struts2初始化源码分析

Struts2 Web应用启动时,根据web.xml配置的核心过滤器FilterDispatcher,会初始化FilterDispatcher: 2. 正如我们知道的,过滤器初始化时,会自动调用init()方法进行初始化工作,所以在Filte...

陶邦仁
2012/09/27
293
0
struts2源码分析之配置文件加载顺序

本次源码分析的目标: 弄清struts2加载各配置文件的顺序,得到此配置文件加载顺序,则源码分析任务结束。 引言 问题的引出是由于前些天在oschina上看到的一篇帖子,http://www.oschina.net/...

算法与编程之美
2013/04/09
4.9K
6
【Java框架】Java EE框架常见的面试题

一、什么是Spring? 1、Spring的核心是一个轻量级(Lightweight)的容器(Container)。 2、Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。 3、Spring提供...

林元煌
2017/07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在屏幕底部对齐视图? - How to align views at the bottom of the screen?

问题: Here's my layout code; 这是我的布局代码; <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orien......

fyin1314
39分钟前
8
0
微信小程序如何修改小程序名称

如何修改微信小程序的名称。 微信小程序是在 app.json 中定义的。 你可用修改 app.json 中的 navigationBarTitleText": “云开发 QuickStart”, 字段。 xiug修改后保存,你就可以看到小程序的...

honeymoose
56分钟前
27
0
将符合ISO 8601的字符串转换为java.util.Date - Converting ISO 8601-compliant String to java.util.Date

问题: I am trying to convert an ISO 8601 formatted String to a java.util.Date . 我正在尝试将ISO 8601格式的String转换为java.util.Date 。 I found the pattern yyyy-MM-dd'T'HH:mm:s......

富含淀粉
今天
17
0
jQuery选择器中的通配符 - Wildcards in jQuery selectors

问题: I'm trying to use a wildcard to get the id of all the elements whose id begin with "jander". 我正在尝试使用通配符来获取id以“jander”开头的所有元素的id。 I tried $('#jand......

法国红酒甜
今天
19
0
唐山5.1级地震 百度人工智能技术帮上忙:成都减灾所提前30秒让北京、天津市民收到预警

本文作者:y****n 7月12日6时38分在河北唐山市古冶区发生5.1级地震,成都高新减灾研究所与应急管理部门联合建成的大陆地震预警网成功预警该地震,给唐山市提前3秒预警,给天津市提前33秒预警...

百度开发者中心
昨天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部