你可以把url-pattern的值改为*.action,这样就不会对所的的请求都要转到struts2,了。对于页面中有struts2标签的jsp都用一个action转向这个jsp而不是直接访问这个jsp.
比如:你直接输入login.jsp转到登录页面,现在你要输入login.action由login.action再转向login.jsp,而不是直接访问login.jsp。这样就会避免不需要过滤的资源也要经过过滤器的问题

解决方案 »

  1.   

    由于我想采用Restful风格的url请求,所以我在struts.xml里做了这样的设置:
    <constant name="struts.mapper.class" value="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper">
    </constant>
    <constant name="struts.enable.SlashesInActionNames" value="true"></constant>
    <constant name="struts.action.extension" value=""></constant>
    也就说,我的action请求是不带.action后缀的。比如,我要请求id为123的书,那么我输入的url就是:
            http://localhost/book/123
    而不是
            http://localhost/book.action?id=123
    所以楼上说的方法可能并不适用。另外,我把我的struts.xml里这些constant改为默认值后,也试过楼上的方法,即把url-pattern由/*改为*.action,但是在server解析jsp tag时总会抛错:
    org.apache.jasper.JasperException: The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)我在网上搜了一下,似乎是个很常见的问题,不知道大家有没有遇到过这个问题,是怎么解决的?
      

  2.   

    你设置一个默认的action 或者在最后写个* 然后转向
    默认的action
    <default-action-ref name="index"/>
    <action name="index">
      <result>/index.jsp</result>
    </action>
    这样话 如果找不资源就直接转到jsp了
    或者在默认包中最后写个通用的action
    <action name="*">
      <result>/index.jsp</result>
    </action>
      

  3.   

    但是如果像你这么做的话,所有对静态资源的请求都会被转到index.jsp,这并不是我想要的。
    我想要的结果是对于确实存在的资源,比如css,image,javascript,返回该资源;对于不存在的资源,重定向到一个特定的出错页面,而不是tomcat的404页面。
    谢谢解答,有没有其他更好的方法呢?