2015-04-30 119 views
3

我想在JSP中设置一个自定义错误页面。我得到一个错误,我不明白为什么。我研究了大量的帖子,我似乎无法找到答案。当我访问一个应该丢给我404的页面时,它会将我发送到本地Tomcat错误页面,而不是我自己的,并引发此错误。为JSP设置404错误页面

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 agree – MaVRoSCy

+0

嗯生病做出一些更改,谢谢! –

+0

已解决,谢谢! –