Ich versuchte Servlet Fehlerbehandlung zu lernen mein Ziel war es, auf Fehlerseite umleiten, wenn der Fehlercode 404 oder 500 ist. Dafür geschrieben error.java und erstellt error.jsp Seite, aber es ist nicht Gowing-Fehlerseite. Bitte helfen Sie mir, warum dies geschieht? FYI ich Fehler werfe absichtlichFehler Seite nicht in Servlet angezeigt
meine 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: Ich habe Rand Browser es gedruckt wird, was ich in Error.java in Druck Schriftsteller geschrieben haben, aber es wird umgeleitet mich nicht/Fehler-URL noch zeigt Fehler.
jsp
das funktioniert, aber wenn ich im Debug-Modus ausführen es Servletnamen zeigt ist Standard-Servlet und Fehlercode ist null. Idealerweise sollte es 404 und Login-Servlet richtig sein? – LowCool