Struts2初始化流程
Struts2初始化流程
陶邦仁 发表于6年前
Struts2初始化流程
  • 发表于 6年前
  • 阅读 944
  • 收藏 10
  • 点赞 0
  • 评论 1

【腾讯云】新注册用户域名抢购1元起>>>   

在讲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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 1527
博文 388
码字总数 1483822
评论 (1)
×
陶邦仁
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: