Struts2 拦截器配置以及实现(2)

Tomcat中Filter的实现和上面差不多,不过其中的类名和概念的名称比较匹配。如下:

Struts2 拦截器配置以及实现

ApplicationDispatcher通过使用FilterChain来实现Filter链式调用。
其中ApplicationFIlterChain.internalDoFilter为核心的代码:

private void internalDoFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { // 通过pos来记录当前执行的Filter,只有到所有Filter执行完(递归终止条件之一) if (pos < n) { ApplicationFilterConfig filterConfig = filters[pos++]; Filter filter = null; try { filter = filterConfig.getFilter(); if (request.isAsyncSupported() && "false".equalsIgnoreCase( filterConfig.getFilterDef().getAsyncSupported())) { // ... } else { // Filter.doFilter,通过传入当前对象,来实现递归调用,将控制权传递给Filter,由Filter来决定是否需要继续执行下去 filter.doFilter(request, response, this); } return; } try { if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) { if( Globals.IS_SECURITY_ENABLED ) { // ... } else { // 执行Target真正的方法 servlet.service(request, response); } } else { servlet.service(request, response); } } // ... } 参考文档:

Wiki:
https://en.wikipedia.org/wiki/Intercepting_filter_pattern
https://en.wikipedia.org/wiki/Interceptor_pattern
官方文档:

推荐阅读:

Struts中异步传送XML和JSON类型的数据

Struts2的入门实例

Struts2学习笔记-Value Stack(值栈)和OGNL表达式   

struts2文件上传(保存为BLOB格式)

在Struts2中使用ModelDriven action

Struts2拦截器浅解 

Struts2数据验证机制 

struts2简单示例

Struts2绑定对象数组 

Struts2 s:if标签以及 #,%{},%{#}的使用方法 

Struts 的详细介绍请点这里
Struts 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/45950f78ed972c09581e00f88eebd0d7.html