2016-11-04 2 views
0

Я пытался узнать об ошибке обработки сервлета, моя цель состояла в том, чтобы перенаправить на страницу ошибки, когда код ошибки равен 404 или 500. Для этого написали error.java и создали страницу error.jsp, но ее нет страница с ошибкой. Пожалуйста, помогите мне, почему это происходит? FYI я бросаю ошибку намеренностраница с ошибкой не отображалась в сервлет

мой web.xml

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
    <filter> 
     <filter-name>MyFilter</filter-name> 
     <filter-class>com.MyFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>MyFilter</filter-name> 
     <servlet-name>Login</servlet-name> 
    </filter-mapping> 

    <servlet> 
     <servlet-name>ErrorHandler</servlet-name> 
     <servlet-class>com.Error</servlet-class> 
    </servlet> 
    <servlet> 
     <servlet-name>Login</servlet-name> 
     <servlet-class>com.Login</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>ErrorHandler</servlet-name> 
     <url-pattern>/Error</url-pattern> 
    </servlet-mapping> 



    <servlet-mapping> 
     <servlet-name>Login</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 
    <error-page> 
     <error-code>500</error-code> 
     <location>/Error</location> 
    </error-page> 
    <error-page> 
     <error-code>404</error-code> 
     <location>/Error</location> 
    </error-page> 

</web-app> 

Error.java

package com; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

/** 
* Servlet implementation class Error 
*/ 
public class Error extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Error() { 
     super(); 

    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    HttpSession session=request.getSession(); 

    Throwable throwable=(Throwable) request.getAttribute("javax.servlet.error.exception"); 
    Integer code=(Integer) request.getAttribute("javax.servlet.error.statud_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 || "".equalsIgnoreCase(requestUri)){ 
        requestUri="unkniwn"; 
       } 
       session.setAttribute("errorMessage", "error"); 
       session.setAttribute("errorCode", code); 
       PrintWriter pw=response.getWriter(); 
       pw.println("error here"); 
       System.out.println("error:"+code); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doGet(request, response); 
    } 

} 

Login.java

package com; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class Login 
*/ 
public class Login extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Login() { 
     super(); 

    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     response.getWriter().append("Served at: ").append(request.getContextPath()); 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter pw=response.getWriter(); 
     String user=request.getParameter("user"); 
     pw.println("Welcome "+user); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     doGet(request, response); 
    } 

} 

Index.jsp:

<html> 
<body> 
<h2>Hello World!</h2> 
<form method="post" action="first"> 
    Name:<input type="text" name="user" /><br/> 
    Password:<input type="text" name="password" /><br/> 
    <input type="submit" value="submit" /> 
</form> 
</body> 
</html> 

error.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<h1>Hi this error</h1> 
<form method="post"> 
<div style="color: #FF0000;"> ${errorMessage} ${errorCode}</div> 
</form> 
</body> 
</html> 

Edit 1: Я проверил края браузера, печатает то, что я написал в печати писателя в Error.java, но он не перенаправляет меня/ошибка URL и не показывать ошибки. JSP

ответ

0

вы используете PrintWriter, который является неправильным, а вам нужно использовать RequestDispatcher направить запрос на страницу JSP, как показано ниже:

RequestDispatcher requestDispatcher= request.getRequestDispatcher("/Error.jsp"); 
requestDispatcher.forward(request, response); 

Вы можете посмотреть here на сервлет на JSP-связь:

+0

Это работает, но при запуске в режиме отладки он показывает имя сервлета Сервлет по умолчанию и код ошибки имеют значение null. в идеале это должно быть 404 и сервлет входа правильно? – LowCool

0

В web.xml в теге страницы с ошибкой вы пытаетесь разместить местоположение для своего собственного сервлета. Вместо этого вы должны использовать прямую ссылку на свою страницу .jsp error. Вы сможете получить исключение оттуда через JSTL

<error-page> 
    <error-code>500</error-code> 
    <location>/WEB-INF/jsp/serverError.jsp</location> // Location to your jsp 
</error-page> 

И это, как получить сообщение об исключении на странице:
<c:set var="message" value="${requestScope['javax.servlet.error.message']}"/>

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