StrutsPrepareAndExecuteFilter工作原理
来源:互联网 发布:sql语句having 编辑:程序博客网 时间:2024/05/17 22:32
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.ng.PrepareOperations;
import org.apache.struts2.dispatcher.ng.ExecuteOperations;
import org.apache.struts2.dispatcher.ng.InitOperations;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Handles both the preparation and execution phases of the Struts dispatching process. This filter is better to use
* when you don't have another filter that needs access to action context information, such as Sitemesh.
*/
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
private PrepareOperations prepare;
private ExecuteOperations execute;
//初始化过滤器
public void init(FilterConfig filterConfig) throws ServletException {
InitOperations init = new InitOperations(); //初始化辅助对象,封装了初始化的一些操作
try {
FilterHostConfig config = new FilterHostConfig(filterConfig); //对filterConfig进行封装
init.initLogging(config); //通过config,初始化内部Struts的记录
Dispatcher dispatcher = init.initDispatcher(config); //通过config,创建并初始化dispatcher
init.initStaticContentLoader(config, dispatcher); //通过config和dispatcher,初始化与过滤器相关的静态内容加载器
prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher); //通过config和dispatcher,创建request被处理前的系列操作对象
execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);//通过config和dispatcher,创建处理request的系列操作对象
} finally {
init.cleanup(); //清空ActionContext
}
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
prepare.createActionContext(request, response); //创建ACTIONCONTEXT,并初始化Theadlocal
prepare.assignDispatcherToThread(); //指派dispatcher给Theadlocal
prepare.setEncodingAndLocale(request, response); //设置request的编码和LOCAL
request = prepare.wrapRequest(request); //封装request
ActionMapping mapping = prepare.findActionMapping(request, response); //查找并选择创建ActionMapping
if (mapping == null) { //如果映射不存在
boolean handled = execute.executeStaticResourceRequest(request, response); //试图执行一个静态资源的请求
if (!handled) {
chain.doFilter(request, response);
}
} else { //如果存在映射
execute.executeAction(request, response, mapping); //执行action
}
} finally {
prepare.cleanupRequest(request); //清除request的Threadlocal
}
}
public void destroy() {
prepare.cleanupDispatcher();
}
}
- StrutsPrepareAndExecuteFilter工作原理
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- StrutsPrepareAndExecuteFilter
- 工作原理
- StrutsPrepareAndExecuteFilter源码
- StrutsPrepareAndExecuteFilter 类
- StrutsPrepareAndExecuteFilter剖析
- struts2工作原理 工作流程
- struts2上传图片
- IOS APP设计流程
- 释疑の字段符号 FIELD-SYMBOLS
- 网上商城的三种模式
- 重温高中物理(10071)
- StrutsPrepareAndExecuteFilter工作原理
- 50多个java学习网站
- spring的两种动态代理
- 7440 & GT540
- 常用 监控SQLSERVER性能计数器
- java中 string 和 stringBuffer的区别
- C#中如何去掉字符串结束符"\0"
- 将对应路径下的文件名统计到文本文件中
- 从软件工程师到一个愤青IT猎头的经历