StrutsPrepareAndExecuteFilter
来源:互联网 发布:淘宝店铺怎么找货源 编辑:程序博客网 时间:2024/05/11 18:39
struts2
要使用struts2必须在web.xml中配置filter
<filter>
<filter-name>struts2</filter-name>
<filter-
class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter
StrutsPrepareAndExecuteFilter是一个过滤器,它会对filtre-mapping中的所有请求进行处理,
StrutsPrepareAndExecuteFilter在初始化的时候会读取配置文件的信息,在初始化的时候根据FilterConfig的信息来构建InitOperations,PrepareOperations,ExecuteOperations,List<Pattern> excludedPatterns,其中InitOperations是容器初始化操作,例如构建Dispatcher,日志LoggerFactory,静态资源加载器StaticContentLoader,构建Struts2不处理的URL列表也就是List<Pattern> excludedPatterns(这个可以通过struts.action.excludePattern进行设定)等
PrepareOperations是在doFilter的时候进行一些操作,
1.prepare.setEncodingAndLocale(request, response); 为request和response进行encoding和Locale,
2.prepare.createActionContext(request, response);为当前线程创建ActionContext,ActionContext是
ThreadLocal的,ActionContent其实就是一个线程安全的HashMap,它内部使用一个HashMap来储存相关信息,这个
map的构造是使用dispatcher.createContextMap(request, response, null, servletContext)来形成的,这个
map包括的信息有session,request,response,ServletContext,RequestMap,SessionMap等各种信息,可以通
个这个ActionContent取得各种信息,例如ActionContext.getContext().getSession()来获得当前的Session,
如果要获得request或者response必须用ServletActionContext它是ActionContent的子类,提供更多的方法,如
果是forward那也会新建一个新的ActionContent,这个新的ActionContent直接使用旧的ActionContent的数据来构造
3.prepare.assignDispatcherToThread();把dispatcher绑定到当前线程上,这样就可以通过
Dispatcher.getInstance()来获得当前线程的dispatcher,这样dispatcher就可以被所有请求共享
以上操作完成后就根据excludedPatterns来判断这个请求是否应该交给当前这个filter进行处理,如果不需要就调
用chain.doFilter(request, response);交给其他filter进行处理,如果需要,那么PrepareOperations就执行
4.request = prepare.wrapRequest(request);对request进行包装,包装成StrutsRequestWrapper或者
MultiPartRequestWrapper(请求类型是multipart/form-data的情况)
5 ActionMapping mapping = prepare.findActionMapping(request, response, true);根据request的请求找
到对应的ActionMapping,如果返回的是null,那就当做静态资源进行处理boolean handled = execute.executeStaticResourceRequest(request, response);处理失败就交给其他的filter,如果返回的不是null,那么就调用execute.executeAction(request, response, mapping);处理完成之后 prepare.cleanupRequest(request);会把当前线程的ActionContext和Dispatcher设置为null
ActionMapping的构造:
prepare.findActionMapping(request, response, true)根据请求获得ActionMapping ,struts2默认使用
DefaultActionMapper来进行查找
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter源码
- StrutsPrepareAndExecuteFilter 类
- StrutsPrepareAndExecuteFilter剖析
- struts2 FilterDispatcher 和 StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter源码剖析
- StrutsPrepareAndExecuteFilter工作原理
- 关于直接写SQL语句和使用Parameter参数两种方式的迷惑
- 文本分类入门(九)文本分类问题的分类
- Nginx源代码分析--基本数据结构--hash
- Spring不是“春天”
- 5.1 什么是值?
- StrutsPrepareAndExecuteFilter
- 新浪微博最新的、通吃网络应用和Air应用的SDK问世了
- tomcat6.0启动不了
- Spring事务--概念[转自网络]
- Java中输入语句是怎么写的
- 设置中文支持
- 如何在Windows中为TCP/IP协议禁用媒体感知(Media Sense)功能
- ***编译时多态还是运行时多态
- Hibernate best practice