Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to debug servlet 404
    primarykey
    data
    text
    <p>I have a servlet with url mapping <code>""</code>(empty string). It's supposed to be mapped to the context root (I'm using tomcat7 with eclipse).</p> <p>But sometimes when I refresh the browser, the page displays 404 page. And a quick fix is to re-run(inside eclipse). And after a while the same 404 error comes back. I'm very frustrated about this. Is there a way to trace how on earth a mapped url pattern can sometimes (most of the time is OK) lead to 404?</p> <p>EDIT 1: OK, here is the details of configuration and code: I have a apache httpd in front of the tomcat server. The request is forwarded using mod_proxy</p> <pre><code>&lt;IfModule mod_proxy_http.c&gt; ProxyPass /myapp http://127.0.0.1:8080/myapp ProxyPassReverse /myapp http://127.0.0.1:8080/myapp &lt;/IfModule&gt; </code></pre> <p>And here is the servlet: (processRequest is called by both doPost and doGet)</p> <pre><code> @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 &amp;&amp; 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); } } </code></pre> <p>web.xml</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;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"&gt; &lt;error-page&gt; &lt;error-code&gt;404&lt;/error-code&gt; &lt;location&gt;/WEB-INF/jsp/error/404.jsp&lt;/location&gt; &lt;/error-page&gt; &lt;error-page&gt; &lt;error-code&gt;500&lt;/error-code&gt; &lt;location&gt;/WEB-INF/jsp/error/500.jsp&lt;/location&gt; &lt;/error-page&gt; &lt;servlet&gt; &lt;servlet-name&gt;info-about&lt;/servlet-name&gt; &lt;jsp-file&gt;/WEB-INF/jsp/info/about.jsp&lt;/jsp-file&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;info-about&lt;/servlet-name&gt; &lt;url-pattern&gt;/about&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet&gt; &lt;servlet-name&gt;info-help&lt;/servlet-name&gt; &lt;jsp-file&gt;/WEB-INF/jsp/info/help.jsp&lt;/jsp-file&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;info-help&lt;/servlet-name&gt; &lt;url-pattern&gt;/help&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet&gt; &lt;servlet-name&gt;info-contact&lt;/servlet-name&gt; &lt;jsp-file&gt;/WEB-INF/jsp/info/contact.jsp&lt;/jsp-file&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;info-contact&lt;/servlet-name&gt; &lt;url-pattern&gt;/contact&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet&gt; &lt;servlet-name&gt;info-terms&lt;/servlet-name&gt; &lt;jsp-file&gt;/WEB-INF/jsp/info/terms.jsp&lt;/jsp-file&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;info-terms&lt;/servlet-name&gt; &lt;url-pattern&gt;/terms&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet&gt; &lt;servlet-name&gt;info-privacy&lt;/servlet-name&gt; &lt;jsp-file&gt;/WEB-INF/jsp/info/privacy.jsp&lt;/jsp-file&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;info-privacy&lt;/servlet-name&gt; &lt;url-pattern&gt;/privacy&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt; </code></pre> <p>The log printed by eclipse shows nothing. Just the 404. <strong>I found the problem will occur when I edit something and save the changes. Eclipse will auto reload the context and home page returns 404.</strong></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload