Struts2静态内容给出404

时间:2016-07-15 02:41:16

标签: java jquery struts2

  1. 我有apache并配置如下:
    RewriteEngine On ProxyPass / http://demo1.example.com:8080/myApp ProxyPassReverse / ....(same url as above)
  2. 以下是web.xml:

    <filter>
      <filter-name>struts2</filter-name>
      <filter- class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>  
    <filter>
       <filter-name>UrlFilter</filter-name>
       <filter-class>com.rts.utils.UrlFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>UrlFilter</filter-name>
      <url-pattern>*.action</url-pattern>
    </filter-mapping>     
    <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  3. 我有自定义过滤器,从URL中读取子菜单并在请求中设置:

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
     HttpServletRequest httpReq = (HttpServletRequest) request; 
     if(httpReq.getServerName() != null && httpReq.getServerName().indexOf(".") != -1) {
          request.setAttribute("subdomain",...);
          chain.doFilter(request, response);
      }
      }
    
  4. 我正在使用struts 2.3.8,Tomcat 6&amp; JDK 1.6。我在webapps / myApp下部署了我的应用程序。

  5. 当我登录应用程序时,我可以看到404以下网址,而我的网页未正确加载:

    http://example.com/myApp/struts/js/base/jquery-1.8.3.js
    

    如果我尝试上面的网址(直接在浏览器中)而不提供“myApp”,如下所示我将收到脚本

    http://example.com/struts/js/base/jquery-1.8.3.js
    

    这意味着struts2没有在右上下文路径中生成静态内容?

1 个答案:

答案 0 :(得分:0)

最后我找到了解决这个问题的方法..我只是想在这里发帖,这可能对某人有帮助。

<sj:head />可以解决这个问题,这个标签有助于从jar文件中复制静态内容。

如果我们将应用程序部署为ROOT,我们只需要添加<sj:head/>,这会将内容复制到<context>/struts/...

如果我们将myApp部署到webapps,<sj:head/>将内容复制到/ myApp,但框架搜索“/ struts / ..”,这将是不可行的。

解决方案:<sj:head>标记具有属性“scriptPath”,这告诉框架工作在哪里复制内容。我在jsp中添加了下面的代码修复了这个问题:

<sj:head compressed="false" scriptPath="/struts/"/>