何らかの理由で、以下のキャッチブロックで、出力エラーメッセージをjspページにリダイレクトしていません。代わりにデフォルトのtomcats例外レポートがHTTP Status 500で表示されます。コンソールウィンドウにエラーメッセージが正しく表示されます。しかし、以下に述べるように、JSPページにエラーメッセージを表示していません。私は何が欠けていますか?SQL例外が.jspページにリダイレクトされない
register.jsp:
<p><font color="#ff0000"><c:out value="${status}"/></font></p>
<form action="<%=context%>/RegisterServlet" method='post'>
...
...
...
RegisterServlet:
try (Statement st = con.createStatement()) {
System.out.println(sql);
st.executeUpdate(sql);
} catch(SQLException sqle) {
System.out.println("Unable to register user: "+sqle.getMessage());
//Check if we are getting duplicate key exception on userName
if(sqle.getMessage().indexOf("Duplicate entry")!=-1) {
System.out.println("User already exists");
strUserMsg = "User name "+request.getParameter("userid")+" already " +
"exists. Please try another user name.";
} else { //If other SQLException than dup key exception
strUserMsg = "Unable to register user "+request.getParameter("userid")+
". Please try again later.";
}
setRequestAttributes(request);
request.setAttribute("status", strUserMsg);
rd.forward(request, response);
response.sendRedirect("register.jsp");
} catch(Exception e) {//If it goes into Exception other than SQLException
System.out.println("Unable to register user: "+e.getMessage());
strUserMsg = "Unable to register user "+request.getParameter("userid")
+". Please try again later.";
setRequestAttributes(request);
request.setAttribute("status", strUserMsg);
rd.forward(request, response);
response.sendRedirect("register.jsp");
}
スタックトレース以下:
exception
org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: ""
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:555)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.focus.servlets.RegisterServlet.doPost(RegisterServlet.java:113)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
Unable to register user: Duplicate entry 'test_user' for key 'PRIMARY'
User already exists
May 09, 2017 1:45:40 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NumberFormatException: For input string: ""
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
java.lang.Integer.parseInt(Integer.java:592)
java.lang.Integer.parseInt(Integer.java:615)
org.apache.jsp.common.register_jsp._jspService(register_jsp.java:227)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.focus.servlets.RegisterServlet.doPost(RegisterServlet.java:113)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
デフォルトの例外とは何ですか?スタックトレースを質問に追加します。 –
OK、スタックトレースを追加しました。 – raptor496