在Servlet中,有两种服务器端异常处理机制:声明式异常处理和程序式异常处理。
一、声明式异常处理
声明式异常处理是在web.xml文件中声明对各种异常的处理方法。
<\error-code>元素指定HTTP的错误代码,其中4xx状态代码表示客户端错误,5xx表示服务器端错误。
<\exeception-type>元素指定Java异常类的完整限定名。
<\location>元素给出用于响应HTTP错误代码或者Java异常的资源的路径。该路径是相对于web应用程序根路径的位置,必须加斜杠(/)开头。
<error-page>
<error-code>404</error-code>
<location>/FileNotFind.jsp</location>
</error-page>
也可以编写一个专门处理HTTP错误的servlet类进行响应:
public class HttpErrorHandleServlet extends HttpServlet {
//不需要针对不同的HTTP方法做不同的处理,直接重写service()方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
//获取状态代码
Integer stateCode=(Integer)req.getAttribute("javax.servlet.error.status_code");
out.println("<html><head><title>错误页面</title></head><body>");
switch (stateCode){
case 401:break;
case 404:
out.print("<h2>你所访问的页面不存在</h2>");
break;
default:break;
}
out.println("</body></html>");
out.close();
}
}
配置web.xml文件
<servlet>
<servlet-name>HttpErrorHandleServlet</servlet-name>
<servlet-class>org.wdz.exeption.servlet.HttpErrorHandleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HttpErrorHandleServlet</servlet-name>
<url-pattern>/HttpErrorHandleServlet</url-pattern>
</servlet-mapping>
<error-page>
<error-code>401</error-code>
<location>/HttpErrorHandleServlet</location>
</error-page>
2、java异常的处理
对程序中产生的java异常进行处理,
<error-page>
<!--异常的完整类名-->
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/FileNotFind.jsp</location>
</error-page>
二、程序式异常处理
程序式异常处理就是在Web应用程序中利用try-catch语句来捕获异常,并对异常进行处理。