3

それが私のフィルターです:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
        throws java.io.IOException, javax.servlet.ServletException
{
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    String currentURL = request.getRequestURI();
    MaintenanceService maintenanceMode = new MaintenanceService();

    if (maintenanceMode.getMaintenanceMode())
    {
        String urlNew = currentURL.concat("maintenance.jsp");
        response.sendRedirect(urlNew);

    }
    filterChain.doFilter(servletRequest, servletResponse);
}

「下」の maintenanceMode.getMaintenanceMode() には、変数ゲッターがあります。

boolean maintenanceMode = Boolean.getBoolean("maintenance");

転送(サーバー側のリダイレクト) を使用すると、クライアント側のリダイレクトを試みているときに正常に動作します。

response.sendRedirect(urlNew);

無限に出現するmaintenance.jspの連結を取得しました:

http://localhost:8080/maintenance.jspmaintenance.jspmaintenance.jspmaintenance.jspmaintenance.jsp

サーバー側のリダイレクトのように、1 つのオカレンスにリダイレクトしない理由:

http://localhost:8080/maintenance.jsp

Web.xml フィルター マッピング:

<filter-mapping>
    <filter-name>maintenanceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
4

2 に答える 2

0
<filter-mapping>
<filter-name>maintenanceFilter</filter-name>
<url-pattern>/*</url-pattern>

フィルター マッピングでは、すべてのリクエスト (リダイレクトされているため新しいリクエストです) がこれに適格です。filterこれが、すべてのリクエストで無限回フィルターが呼び出される理由です。

1 つの方法は、特定のフィルタに対してこのフィルタを呼び出すことです。url-pattern

于 2012-07-11T07:28:13.603 に答える