2015-04-30 4 views
3

Я пытаюсь установить пользовательскую страницу ошибок в JSP. Я получаю сообщение об ошибке, и я не могу понять, почему. Я исследовал множество сообщений, и я не могу найти ответа. Когда я нахожусь на странице, которая должна бросить мне 404, она отправляет меня на исходную страницу ошибки Tomcat, а не мою и бросает эту ошибку.Установка страницы ошибки 404 для JSP

Apr 30, 2015 11:33:35 AM org.apache.catalina.core.ApplicationDispatcher invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
java.lang.NullPointerException 
    at org.apache.jsp.PageNotFound_jsp._jspService(PageNotFound_jsp.java:104) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:489) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339) 
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:467) 
    at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:338) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:203) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Apr 30, 2015 11:33:35 AM org.apache.catalina.core.StandardHostValve custom 
SEVERE: Exception Processing ErrorPage[errorCode=404, location=/PageNotFound.jsp] 
org.apache.jasper.JasperException: An exception occurred processing JSP page /PageNotFound.jsp at line 38 

35:   </div> 
36:   
37:   Message: 
38:   <div><%=exception.getMessage() %></div> 
39:   StackTrace: 
40:   <div><% 
41:   StringWriter stringWriter = new StringWriter(); 


Stacktrace: 
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749) 
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:489) 
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412) 
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339) 
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:467) 
    at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:338) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:203) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException 
    at org.apache.jsp.PageNotFound_jsp._jspService(PageNotFound_jsp.java:104) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    ... 22 more 

Вот 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" 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"> 
    <display-name>MyProject</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <error-page> 
     <error-code>500</error-code> 
     <location>/PageNotFound.jsp</location> 
    </error-page> 

    <error-page> 
     <error-code>404</error-code> 
     <location>/PageNotFound.jsp</location> 
    </error-page> 

    <error-page> 
     <exception-type>java.lang.Exception</exception-type> 
     <location>/PageNotFound.jsp</location> 
    </error-page> 

</web-app> 

И мой PageNotFound.jsp

<%@ page isErrorPage="true" import="java.io.*" language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<link rel="icon" href="img/favicon.ico" type="image/x-icon"> 
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" /> 

<title>Sample Page</title> 

</head> 
<body> 
<!--content--> 
<div class="container"> 
     <div class="row"> 
      <article class="span6 error"> 
       <img src="img/error.png" alt=""> 
      </article> 
      <article class="span6"> 
       <div class="row"> 
        <div class="span6"> 
         <h5>Sorry!</h5> 
         <h6>page not found</h6> 
         <div class="row"> 
          <article class="span4"> 
           <p class="margBot1">The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.</p> 
           <p class="margBot1">Please try using our search box below to look for information on the website</p> 

          </article> 
         </div> 
        </div> 
       </div> 
      </article> 
     </div> 

     Message: 
     <div><%=exception.getMessage() %></div> 
     StackTrace: 
     <div><% 
     StringWriter stringWriter = new StringWriter(); 
     PrintWriter printWriter = new PrintWriter(stringWriter); 
     exception.printStackTrace(printWriter); 
     out.println(stringWriter); 
     printWriter.close(); 
     stringWriter.close(); 
     %></div> 

</div> 


</body> 
</html> 

ответ

1

Ваш PageNotFound.jsp предпринимается попытка быть оказаны. Посмотрите последний стек.

Однако при попытке отобразить эту страницу возникает исключение. «Исключение» переменная в этой строке равна нулю:

<div><%=exception.getMessage() %></div> 

Я думаю, что всякий раз, когда есть исключения в Java слоя, то эта переменная будет не будет нулевым. Поэтому имеет смысл иметь это на странице с ошибкой.

Однако в случае условия 404 исключений в уровне Java нет, поэтому он будет равен нулю. Итак, я не думаю, что этот код и блок кода ниже этого, принадлежит странице, которая используется для 404 условий.

+0

yeap, totaly согласен – MaVRoSCy

+0

hmm плохо внесите некоторые изменения, спасибо! –

+0

Работал, спасибо! –

Смежные вопросы