项目用了struts2.2,它的拦截器默认会拦截项目所有的请求,无论是.jsp 还是没有后缀的。这是因为它是这样配置的:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是呢,你的action不能随便加后缀,例如,有一个login的action,你不能写成 login.ac, 虽然会拦截下来,但是并不会认识这个action,这是因为struts2默认只能认识(这里的认识并不是拦截器是否认识,任何请求拦截器都会拦截下来的,管你是.ac还是.bc的后缀).action 和不加后缀的action,它的默认定义在struts2 核心包中default.properties文件的
” struts.action.extension=action,, “
中,对,你没看错,是2个逗号,表示空嘛。所以呢,如果你想实现让拦截器认识其他后缀的action ,你必须在struts.xml中配置这个常量,具体如下:
<constant name="struts.action.extension" value="ac" />
OK啦,拦截器认识.ac的action啦。
--------------------------------------------------
struts2和fckeditor的整合,出问题啦,这是因为fckedit里面有servlet,而servlet的访问路径是 /login 不加后缀的,所以每次有访问servlet的时候,struts2的拦截器就出来捣烂啊,他首先拦截下来,可是它拦截下来它又不能出来这个servlet,那就出错啦,真是郁闷,怎么才能让struts不拦截这个servlet呢?
方法1: 改
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern> // 《发表下个人意见,最好还是别这样写 /*, 它啥都拦截,必然导致效率没那么高啦》
</filter-mapping>
(servlet是项目完成很多后要加上去的,所以,如果我改成下面这种写法后,那些action都要添个后缀,真是很麻烦)
,上面的意思不是说我啥都给你拦截下来吗?那好 ,我就规定下你,你不能所以的都拦截下来,你只能拦截.action后缀结尾的action,那些空的你就别去管它了,那好说做就做,改成如下:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
好啦,问题解决啦,以后你写action的时候别忘记要加后缀.action哈,例如 : login.action 呵呵 ,还有,login!list.action 是这样写,我开始写成了 : login.action!list 一直报错,真TM郁闷。
方法二:
还是有的 ,但是由于项目紧,我没时间去实验了,大家可以去找找 struts2和servlet的兼容 。