1

""URL マッピング(空の文字列)を持つサーブレットがあります。コンテキストルートにマップされるはずです(Eclipseでtomcat7を使用しています)。

しかし、ブラウザを更新すると、ページに 404 ページが表示されることがあります。そして、簡単な修正は(Eclipse内で)再実行することです。そしてしばらくすると同じ404エラーが返ってきます。私はこれについて非常に不満を感じています。マップされた URL パターンが時々 (ほとんどの場合は問題ありません) 404 につながる可能性があることを追跡する方法はありますか?

編集 1: OK、構成とコードの詳細は次のとおりです。Tomcat サーバーの前に apache httpd があります。リクエストは mod_proxy を使用して転送されます

<IfModule mod_proxy_http.c>
ProxyPass        /myapp           http://127.0.0.1:8080/myapp
ProxyPassReverse /myapp           http://127.0.0.1:8080/myapp
</IfModule>

サーブレットは次のとおりです (processRequest は doPost と doGet の両方で呼び出されます)。

 @WebServlet("")
public class RootServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("Root Servlet");
        try {
            this.handleHomePage(request, response);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void handleHomePage(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException, NamingException {

        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute(Config.SESSION_AUTH_EMAIL) != null) {
            String email = (String) session.getAttribute(Config.SESSION_AUTH_EMAIL);
            request.getRequestDispatcher("/WEB-INF/jsp/main/home.jsp").forward(request, response);
        }
        else {
            request.getRequestDispatcher("/WEB-INF/jsp/main/index.jsp").forward(request, response);
        }
    }


    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.processRequest(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.processRequest(request, response);
    }

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/jsp/error/404.jsp</location>
  </error-page>

  <error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/jsp/error/500.jsp</location>
  </error-page>
  <servlet>
    <servlet-name>info-about</servlet-name>
    <jsp-file>/WEB-INF/jsp/info/about.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>info-about</servlet-name>
    <url-pattern>/about</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>info-help</servlet-name>
    <jsp-file>/WEB-INF/jsp/info/help.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>info-help</servlet-name>
    <url-pattern>/help</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>info-contact</servlet-name>
    <jsp-file>/WEB-INF/jsp/info/contact.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>info-contact</servlet-name>
    <url-pattern>/contact</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>info-terms</servlet-name>
    <jsp-file>/WEB-INF/jsp/info/terms.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>info-terms</servlet-name>
    <url-pattern>/terms</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>info-privacy</servlet-name>
    <jsp-file>/WEB-INF/jsp/info/privacy.jsp</jsp-file>
  </servlet>
  <servlet-mapping>
    <servlet-name>info-privacy</servlet-name>
    <url-pattern>/privacy</url-pattern>
  </servlet-mapping>
</web-app>

日食によって印刷されたログには何も表示されません。404だけ です。何かを編集して変更を保存すると、問題が発生することがわかりました。Eclipse はコンテキストを自動リロードし、ホームページは 404 を返します。

4

1 に答える 1

0

OK、これは tomcat 7.0.40 のバグかもしれません https://issues.apache.org/bugzilla/show_bug.cgi?id=54955

于 2013-05-15T13:23:08.387 に答える