文档章节

Struts2初始化流程

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

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

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1618
博文 420
码字总数 1483887
作品 0
海淀
技术主管
私信 提问
加载中

评论(1)

编程女神
【Java框架】Java EE框架常见的面试题

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

林元煌
2017/07/31
0
0
struts2源码分析之配置文件加载顺序

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

算法与编程之美
2013/04/09
0
6
struts1-2,springMVC原理基本对比(单例,多例)-servlet与filter区别

最近做项目用到了struts2,之前一直是用struts1和springMVC。感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比。 Struts1官方已经停止更新,现...

tantexian
2016/06/21
322
0
浅析Struts2.5.2源码

以往对于Struts2都是从网上查阅其工作原理及用法,没有做过深入了解,近期由于工作需要,看了一下Struts2-core的源码,趁热打铁将其中的流程梳理一下,和大家分享。此次使用的版本为Struts2...

晓叹星沉
2016/12/12
19
0
struts2 spring hibernate执行流程

Struts2 Hibernate Spring 运行流程与部分机制 Tomcat容器被加载,找到该webApplication相对应的web.xml 开始解析web.xml中的信息 读取到一个spring的监听器,告诉spring容器开始初始化配置文...

李永china
2016/05/04
141
0

没有更多内容

加载失败,请刷新页面

加载更多

小论Java泛型机制

何为泛型(Generics) 面向对象编程语言的多态特性包括:任一多态(ad hoc polymorphism,又名重载)、子类型多态(subtype polymorphism,又名覆盖)以及参数多态(parameter polymorphism,...

SamYjy
17分钟前
1
0
通过JS+DIV+CSS排版布局实现选项卡效果

CSS介绍及布局特定 层叠样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。   CSS目前最新版本为CSS3,是能够真正做到...

青衣霓裳
18分钟前
2
0
看图了解RocksDB

它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。 下图为写入的流程: 可以看到主要的三个组成...

许此一生
24分钟前
4
0
重磅发布!阿里云推PostgreSQL 10 高可用版

2015年,阿里云宣布正式推出RDS for PostgreSQL服务,届时,阿里云成为国内首家同时支持MySQL、SQL Server 和PostgreSQL关系型数据库的云计算服务商。 用户在云上就能享受PostgreSQL引擎带来的...

迷你芊宝宝
24分钟前
3
0
Mysql show Status参数详解

状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务器而失败的连接数 Binlog_cache_dis...

若杰
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部