如题,我非得改为
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
  </filter-mapping>  
才行,为什么呀?

解决方案 »

  1.   

    试过,如果改为这样的话,如果某些页面使用了struts2的标签的话,运行时是会报错的说是<url-pattern>*.action</url-pattern>配置的不对
      

  2.   

    filter知识没理解,容器只认 全名匹配,路径匹配,扩展名匹配.
    /*.action  又是路径匹配,有时扩展名匹配. 容器没办法区分建立学习了servlet,在学框架.
      

  3.   

    你的为什么不行3楼已经说的很清楚了,我很想知道*.action在什么情况下不行,把你的jsp上写的标签与错误信息贴出来!
      

  4.   

    LZ也可以写成/*.*在URL匹配试一试
      

  5.   

    我的也是 不知道为什么 如果写成/*.action 初始化的时候就会报错,如果写成*.action 在jsp页面的struts 标签会报错。
      

  6.   

    这个是struts2的bug,我已经发现了
      

  7.   

    引用 2 楼 toss2000 的回复:    引用 1 楼 ltandfyy 的回复:
        写*.action    试过,如果改为这样的话,如果某些页面使用了struts2的标签的话,运行时是会报错的说是<url-pattern>*.action</url-pattern>配置的不对
    那你是用的标签有问题,我用这样的配置已经用了10来个项目了都没问题!你再仔细检查一下吧! 
    由于你使用标签的时候访问的是*.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拦截器到底拦截什么请求的问题,类似的lz可以自己慢慢试验