struts2 过滤器

转载 2013年12月03日 14:30:30
请求路径-action名称搜索顺序
1、获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action

2、首先寻找namespace为/path1/path2/path3的package,如果不存在这个 package则执行步骤3;如果存在这个package,则在这个package中寻找名字为test的action,当在该package下寻找不到 action 时就会直接跑到默认namaspace的package里面去寻找action(默认的命名空间为空字符串“”),如果在默认namaspace的 package里面还寻找不到该action,页面提示找不到action。

3、寻找namespace为/path1/path2的package,如果不存在这个package,则转至步骤4;如果存在这个package,则 在这个package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action,在默认namaspace的package里面还寻找不到 该action,页面提示找不到action。

4、寻找namespace为/path1的package,如果不存在这个package则执行步骤5;如果存在这个package,则在这个 package中寻找名字为test的action,当在该package中寻找不到action 时就会直接跑到默认namaspace的package里面去找名字为test的action ,在默认namaspace的package里面还寻找不到该action,页面提示找不到action。

5、寻找namespace为/的package,如果存在这个package,则在这个package中寻找名字为test的action,当在 package中寻找不到action或者不存在这个package时,都会去默认namaspace的package里面寻找action,如果还是找 不到,页面提示找不到action。

6、如果某package的namespace=“”,则该package被视为默认namespace的package。

filter处理机制
web.xml中:
<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>
从该文件可以看出struts2框架中,StrutsPrepareAndExecuteFilter是核心控制器。它负责拦截由<url- pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。当请求转 入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以 Struts2中的Action是线程安全的。

StrutsPrepareAndExecuteFilter是对struts2较早版本的核心控制器FilterDispatcher(文档建议,从 struts2.1.3起不再使用该类)的替代,结合了StrutsPrepareFilter与StrutsExecuteFilter的功能。

在struts2中,请求--other filters--StrutsPrepareAndExecuteFilter--other filters--响应。可以看出:
1、StrutsPrepareAndExecuteFilter是放在处理“请求”的其他filters之后的;
2、StrutsPrepareAndExecuteFilter处理之后对结果数据和信息不会直接放行。
因为StrutsPrepareAndExecuteFilter直接放行的话,“响应”是在(例如)tomcat容器中直接解析路径所得结果,如果前面的filters定义路径时用到了struts2自己的机制,那么tomcat解析路径时就会出错。

如果其他的Filter要访问Struts的特性,这时候不要使用StrutsPrepareAndExecuteFilter ,而是使用StrutsPrepareFilter与StrutsExecuteFilter,并让其他的Filter应位于两者之间。

解决struts2过滤器冲突的简单方法

struts2使用FilterDispatcher进行url过滤,默认是所有的url都过滤,但是项目中有些url是不想用struts2进行过滤的,网上搜了不少方法1.修改web.xml文件 ...
  • hanshileiai
  • hanshileiai
  • 2015年07月15日 17:00
  • 2173

Struts2 过滤器无法正常过滤.action请求

1.  问题描述      过滤器启用正常,而且使用也正常,调试时它也确实进入到断点中,并可以正常过滤.jsp请求,但过滤器唯独获取不到.action的请求。通过打印request.getReques...
  • dcb_ripple
  • dcb_ripple
  • 2016年05月20日 17:11
  • 3958

struts ---核心过滤器理解---

struts2---核心控制器 1介绍 struts核心过滤器FilterDispatcher介绍 FilterDispatcher功能介绍 FilterDispatcher是st...
  • llziseweiqiu
  • llziseweiqiu
  • 2017年12月10日 17:26
  • 89

servlet过滤器、监听器、struts2拦截器的区别

1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web....
  • xyw591238
  • xyw591238
  • 2016年07月18日 16:59
  • 1298

Struts2中过滤器和拦截器的区别

过滤器和拦截器的区别:   ①拦截器是基于Java的反射机制的,而过滤器是基于函数回调。   ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。   ③拦截器只能对acti...
  • FHXISDOG
  • FHXISDOG
  • 2017年02月02日 14:49
  • 1402

Struts2 配置过滤器

Struts2 配置过滤器,他跟Result是一个地位,也是在action里面可以配置的 这是自定义的过滤器 ...
  • lz1012793721
  • lz1012793721
  • 2016年01月07日 21:28
  • 558

简单理解Struts2中拦截器与过滤器的区别及执行顺序

当接收到一个httprequest ,  a) 当外部的httpservletrequest到来时  b) 初始到了servlet容器 传递给一个标准的过滤器链  c) FilterDispat...
  • yakoo5
  • yakoo5
  • 2013年05月23日 10:41
  • 7450

Struts2中过滤器和拦截器的区别

拦截器和过滤器的区别: 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3、拦截器只能对action请求起作...
  • whs19910204648688
  • whs19910204648688
  • 2015年09月02日 17:04
  • 808

struts 拦截器和过滤器的区别和原理

拦截器的工作原理:当接收到一个httprequest ,a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标准的过滤器链 c) FilterDisp...
  • llziseweiqiu
  • llziseweiqiu
  • 2017年12月10日 16:17
  • 58

Struts2.3 以及 2.5 过滤 xss攻击 的一种解决方案

本方案采用struts2的拦截器过滤,将提交上来的参数转码来解决。 配置struts.xml ...
  • huplion
  • huplion
  • 2015年10月09日 15:46
  • 5036
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts2 过滤器
举报原因:
原因补充:

(最多只允许输入30个字)