0

私は struts 2 を使用していますが、最近 と を構成web.xmlして、URL からstruts.xmlの削除を変更しました。.action幸いなことに、重大な問題を除いて、すべてが正常に機能しています。リクエストの一部を他のサーブレットに転送したいのですが、次のコードにより、すべてのアクションが Struts2 サーブレットにリダイレクトされます。

<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/*"別のサーブレットに転送したいのですが、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>

同様に、独自の目的を持つそのようなサーブレットがたくさんあります。URL パターンはほぼ同じです... /do/abc や /do/pqr などのようなものです。

EDIT : StrutsPrepareAndExecuteFilter を使用し、受け入れられたソリューションをコードに追加することにより、解決された問題。

4

2 に答える 2

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 に答える