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来进行查找

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肛裂大便有血怎么办 生完宝宝肛门痛怎么办 肛周脓肿出血了怎么办 胃胀怎么办简单的办法 吃多了胃胀难受怎么办 胃窦炎胆汁反流怎么办 怀孕总胆汁酸高怎么办 胃里胆汁反流怎么办 苦胆水吐出来了怎么办 喝多了吐胆汁怎么办 吐出黄水苦水是怎么办 喝酒喝的一直吐怎么办 孕期总胆汁酸高怎么办 孕早期胆汁酸高怎么办 孕妇总胆汁酸高怎么办 宝宝一天吐了6次怎么办 肛周脓肿破了怎么办 肛周脓肿发烧了怎么办 肛周脓肿便血该怎么办 婴儿得肛周脓肿怎么办 水痘长在龟头上怎么办 轻度萎缩性胃炎伴肠化怎么办 肺癌晚期腿肿了怎么办 胸骨剑突按压痛怎么办 22岁有白头发怎么办 血热导致掉头发怎么办 36岁脱发严重该怎么办 血热引起的脱发怎么办 头发掉的好厉害怎么办 胃热导致的口臭怎么办 肝火和胃火旺盛怎么办 2月宝宝舌苔厚白怎么办 小孩舌头咬破了怎么办 两岁宝宝不说话怎么办 4岁半说话不清楚怎么办 10小孩说话不清怎么办 2岁宝宝说话结巴怎么办 4岁宝宝说话结巴怎么办 3岁幼儿说话结巴怎么办 三岁宝宝说话结巴怎么办 6岁宝宝说话结巴怎么办