struts2 ,web.xml中配置为/*.action,运行报错Invalid <url-pattern> /*.action in filter mapp

首先,修改成:

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>  

是可以的。

引起此错误的原因如下:

这个对filter的基础知识的理解:容器只认 全名匹配,路径匹配,扩展名匹配.
/*.action  又是路径匹配,有时扩展名匹配. 容器没办法区分

 

解决方法:写*.action

    <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>*.action</url-pattern>
    </filter-mapping>

 

如果改为这样的话,如果某些页面使用了struts2的标签的话,运行时是会报错,说是<url-pattern>*.action</url-pattern>配置的不对,那么采用以下某网友提供的方法:

由于你使用标签的时候访问的是*.jsp页面,访问的时候用到标签也要使用到struts2的包,所以你的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>*.action</url-pattern>
  </filter-mapping>
  <filter>
<filter-name>struts3</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>struts3</filter-name>
   <url-pattern>*.jsp</url-pattern>
</filter-mapping>
就是把*.jsp的请求也用struts2拦截掉,这样就不会出错了。这个问题不是标签问题,是struts2拦截器到底拦截什么请求的问题,

posted @ 2016-01-02 23:49  Tom1997  阅读(3601)  评论(0编辑  收藏  举报