java错误处理servlet停止工作,我不知道原因:(
我正在做一个小的MVC项目,涉及几个servlet和一些jsp页面。在项目早期,我添加了这个ErrorHandler servlet:
package org.ics.ejb.lab;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ErrorHandler")
public class ErrorHandler extends HttpServlet {
private static final long serialVersionUID = 1L;
public ErrorHandler() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processError(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processError(request, response);
}
private void processError(HttpServletRequest request, HttpServletResponse response) throws IOException {
Throwable throwable = (Throwable) request
.getAttribute("javax.servlet.error.exception");
Integer statusCode = (Integer) request
.getAttribute("javax.servlet.error.status_code");
String servletName = (String) request
.getAttribute("javax.servlet.error.servlet_name");
if (servletName == null) {
servletName = "Unknown";
}
String requestUri = (String) request
.getAttribute("javax.servlet.error.request_uri");
if (requestUri == null) {
requestUri = "Unknown";
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.write("<html><head><title>Exception/Error Details</title></head><body>");
if(statusCode != 500){
out.write("<h3>Error Details</h3>");
out.write("<strong>Status Code</strong>:"+statusCode+"<br>");
out.write("<strong>Requested URI</strong>:"+requestUri);
}else{
out.write("<h3>Exception Details</h3>");
out.write("<ul><li>Servlet Name:"+servletName+"</li>");
out.write("<li>Exception Name:"+throwable.getClass().getName()+"</li>");
out.write("<li>Requested URI:"+requestUri+"</li>");
out.write("<li>Exception Message:"+throwable.getMessage()+"</li>");
out.write("</ul>");
}
out.write("<p>Show Mats Svensson this error message. Then go back and try again.</p>");
//out.write("<a href="index.html">Go back</a>");
out.write("<br><br>");
out.write("</body></html>");
}
}
然后我把它添加到我的网站上。动态web项目的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>EmpClientProject</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/ErrorHandler</location>
</error-page>
<servlet>
<servlet-name>JUnitEETestServlet</servlet-name>
<servlet-class>org.junitee.servlet.JUnitEEServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JUnitEETestServlet</servlet-name>
<url-pattern>/TestServlet/*</url-pattern>
</servlet-mapping>
</web-app>
它很早就开始工作了,但是当我添加更多的内容、html页面、图像等时,ErrorHandler servlet突然停止工作,我不知道为什么。我想不出任何理由
下面是生成nullreferenceexception的代码,假设数据库中不存在员工。servlet用于捕获此信息,但不再:
package org.ics.ejb.lab;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import example.ejb.ics.Department;
import example.ejb.ics.Employee;
import examples.facade.ics.FacadeLocal;
@WebServlet("/EmpServlet")
public class EmpServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
FacadeLocal facade;
public EmpServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.print("Error: Does not exist in database, try again");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = null;
String operation = request.getParameter("operation");
if(operation.equals("showemployee")) {
String socialsn = request.getParameter("socialsn");
Long pnr = Long.parseLong(socialsn);
Employee e = facade.findBySocialSN(pnr);
request.setAttribute("employee", e);
url="/ShowEmployee.jsp";
} else if(operation.equals("searchemployee")){
url="/SearchEmployee.jsp";
} else if(operation.equals("updatedept")){
String depnr = request.getParameter("newdeptid");
int intdepnr = Integer.parseInt(depnr);
Department d = facade.findByDeptId(intdepnr);
String socialsn = request.getParameter("employeeSN");
Long pnr = Long.parseLong(socialsn);
Employee e = facade.findBySocialSN(pnr);
e.setDepartment(d);
Employee updatedEmployee = facade.updateEmployee(e);
request.setAttribute("employee", updatedEmployee);
request.setAttribute("department", d);
url="/ShowEmployee.jsp";
}
else{
url="/SearchEmployee.jsp";
}
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
}
共 (0) 个答案