Struts工作流程
来源:互联网 发布:java mysql 时区设置 编辑:程序博客网 时间:2024/05/21 21:33
Struts的工作流程详解:
1、客户端向Servlet容器(如Tomcat)提交一个请求,即HttpServletResponse
2、请求经过一系列过滤器(ActionContextCleanUp过滤器、其他过滤器、FilterDispatcher)
ActionContextCleanUp:已被JVM和WEB容器废弃的空对象
FilterDispatcher:org.apache.struts2.dispatcher.FilterDispatcher是Struts2的主要的Filter,负责四个方面的功能:
(1)执行Actions(2)清除ActionContext
(3)维护静态内容
(4)清除request生命周期内的XWork的interceptors
另注:该过滤器应该过滤所有的请求URL。一般被设置为/*.
具体:
(1)执行Actions
过滤器通过ActionMapper对象,来判断是否应该被映射到Action.如果mapper对象指示他应该被映射,过滤链将会被终止,然后Action被调用。这一点非常重要,如果同时使用SiteMesh filter,则SiteMesh filter应该放到该过滤器前,否则Action的输出将不会被装饰。
(2)清除ActionContext
过滤器为了确保内存溢出,会自动的清除ActionContext。这可能会存在一些问题,在和其它的框架集成时,例如SiteMesh。ActionContextCleanUp提供了怎么处理这些问题的一些信息。
(3)维护静态内容
过滤器也会维护在Struts2中使用的一些公共的静态的内容,例如JavaScript文件,CSS文件等。搜索/struts/*范围内的请求,然后将/struts/后面的值映射到一些struts的公共包中,也可以在你的类路径中搜索。默认情况下会去查找以下包:
org.apache.struts2.static
template
这样你只用请求/struts/xhtml/styles.css,XHTML UI主题默认的样式表将会被返回。同样,AJAX UI组件需要的
JavaScript文件,也可以在org.apache.struts2.static包中被找到。如果你想加入其它被搜索的包,在web.xml中
设置filter时,通过给"actionPackages"初始参数一个逗号隔开的包列表值来设定。
需注意的是:他会暴露一些比较敏感的信息例如,properites文件中的数据库连接信息。
注:过滤器支持以下初始参数:
config - 被调入的逗号隔开的XML文件列表。
actionPackages - 被actions扫描的逗号隔开的packages列表。
configProviders - 逗号分隔的实现了ConfigurationProvider接口(建造Configuration时被使用)的实现类。
* - 任意的struts常量。
通过重载createDispatcher()方法,可以自定义dispather。
属性列表:
(1)actionMapper:通过注入,提供一个ActionMapper实例。
(2)dispatcher:暴露给子类一个Dispatcher实例。
(3)encoding:存储StrutsConstants.STRUTS_I18N_ENCODING的设置。
(4)filterConfig:通过初始参数,提供一个FilterConfig实例。
(5)lastModifiedCal:在缓存静态content,提供一个格化的日期用于设定头信息。
(6)log:提供一个logging实例。
(7)patchPrefixs:存储静态资源的路径前缀信息。
(8)serveStatic:存储StrutsConstants.STRUTS_SERVE_STATIC_CONTENT的设置。
(9)serveStaticBrowserCache:存储StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE的设置。
方法列表:
(1)copy(InputStream input, OutputStream output):从input复制数据到output。
(2)createDispatcher(FilterConfig filterConfig):创建默认的dispatcher对象,如果需要的话,子类可以重载
此方法,自定义一个dispatcher对象。
(3)destory():调用dispatcher.cleanup(),依次释放本地线程,销毁dispatcher对象。
(4)doFilter(ServletRequest request, ServeltResponse response, FilterChain chain):处理一个action或处
理一个请求的静态内容。
(5)findInputStream(String name, String packagePrefix):搜索类路径下的静态资源。
(6)findStaticResoruce(String name, HttpServletRequest request, HttpServletResponse response):搜索静
态的资源,
直接复制到相应response的头信息中。
(7)getContentType(String name):获取指定资源的contentType。
(8)getFilterConfig():获取FilterConfig实例。
(9)getServletContext():给WebLogic的一些版本提供一个工作区。
(9)init(FilterConfig filterCongfig):创建默认的dispatcher对象和设置静态资源的默认包信息来初始化filter。
(10)parse(String packages):返回一个数组通过解析一个指定逗号分隔的packages列表。
(11)prepareDispatcherAndWrapRequest(HttpServletRequest request, HttpServletResponse response):对给定的request
对象进行封装返回一个封装HttpServletRequest对象。例如显示的处理multipart数据。
(12)setMapper(ActionMapper actionMapper)
(13)setEncoding(String val)
(14)setServeStaticContent(String val)
(15)setServeStaticBrowserCache(String val)
ActionMapper:提供HTTP请求和行动调用请求。根据请求的URI查找是否存在对应Action调用
ActionMapping :保存调用Action的映射信息,如namespace、name等
4、如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy(备注:JSP请求无需调用
Action)
5、ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需调用的Action类
ActionProxy :在XWork和真正的Action之间充当代理
6、ActionProxy创建一个ActionInvocation的实例
7、 ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器(如:拦截器1、拦截器2、拦截器3等)
ActionInvocation :表示Action的执行状态,保存拦截器、Action实例
8、Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果
Interceptor :可以在请求处理之前或者之后执行的Struts 2组件,Struts 2绝大多数功能通过拦截器完成
9、拦截器(如拦截器3、拦截器2、拦截器1等)、HttpServletResponse被再次执行
10、过滤器(FilterDispatcher、Other filters、ActionContextCleanUp)被再次执行
为什么需要Struts拦截器?
拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者定义在一个action执行前后执行的代码,也可以在一个action只想前组织其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
拦截器链(Interceptor Chain或Interceptor Stack,Struts2中称为拦截器栈):将拦截器按一定顺序联结成一条链。在访问被拦截的方法或字段时,拦截器栈中拦截器就会按其之前定义的顺序被调用。
Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦。
- Struts工作流程
- Struts开发工作流程
- Struts工作流程
- struts的工作流程
- Struts的工作流程
- Struts的工作流程
- Struts工作流程
- STRUTS工作流程
- Struts 的工作流程
- Struts的工作流程
- Struts的工作流程
- struts的工作流程
- struts的工作流程
- struts工作流程
- struts工作流程
- struts的工作流程!
- Struts开发工作流程
- struts基本工作流程
- Android学习---解决Android Graphical Layout 界面效果不显示
- USB转串口 FT232/PL2303/CH340 驱动以及使用体会
- Hibernate中polymorphism=”explicit”和polymorphism=”implicit”区别
- compare gsm cdma
- DBMS_Utility学习
- Struts工作流程
- JS编码
- wxpython画板例子
- ubuntu安装p7zip
- Open the Android native Camera using OpenCV
- Oracle Deterministic Function
- make module失败的原因cc1: error: unrecognized command line option "-m64"
- Hadoop集群问题汇总
- get values of particular key in nsdictionary