0

我正在使用 struts 2,我最近配置了我的web.xmlstruts.xml更改.action了 url 中的删除。很高兴除了一个主要问题外,一切都运行良好。我希望将我的一些请求转发到其他 servlet,但以下代码可确保我的每个操作都重定向到 Struts2 servlet。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我想将我"/do/*"的转发到另一个 servlet 说xyz然后有人可以帮助我该怎么做。我有一个想法,我可能不得不使用正则表达式,但我尝试了很多模式并失败了。我已经尝试了我认为应该匹配的最佳正则表达式:

[^(\/do\/*)]

    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>



<servlet>
    <servlet-name>xyzServlet</servlet-name>
    <servlet-class>com.blah.xyzServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>xyzServlet</servlet-name>
    <url-pattern>/do/guide</url-pattern>

同样,我有许多这样的 servlet,它们都有自己的用途。url 模式对他们来说几乎相同......他们就像 /do/abc 或 /do/pqr 等。

编辑:通过使用 StrutsPrepareAndExecuteFilter 并将接受的解决方案添加到代码中解决了问题。

4

2 回答 2

1

在 struts.xml 中以排除模式配置您的 URL,如下所示。并在 web.xml 中为 /do/* 添加一个 servlet 映射。

<constant name="struts.action.excludePattern" value="/do/.*" />
于 2013-06-20T08:20:48.807 回答
0

MGManikandan 解决方案更好,我保留这个基于过滤器的解决方案以防万一。在 Struts 过滤器之上创建一个新过滤器的想法(当你在 web.xml 上声明它时,必须在 Struts 过滤器之前)

    public class CustomFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;

        if(request!=null){      
            //optimize this if needed
            if(request.getServletPath().toLowerCase().indexOf("/do/")>-1){                  
                if(!res.isCommitted())
                    request.getRequestDispatcher(request.getServletPath()).forward(request, res);
            } else {            
                chain.doFilter(req, res);
            }
        }
    }       
    public void init(FilterConfig config) throws ServletException {}
    public void destroy() {}      
}

和 web.xml 中的

    <filter>
        <filter-name>CustomFilter</filter-name>
        <filter-class>
            com.mypackage.CustomFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CustomFilter</filter-name>
        <url-pattern>*</url-pattern>
    </filter-mapping>    
于 2013-06-20T08:30:27.357 回答