Servlet的异常处理机制
- <error-page>
- <error-code>404</error-code>
- <location>/FileNotFound.html</location>
- </error-page>
- package servlet;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class HttpErrorHandlerServlet extends HttpServlet
- {
- protected void service(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, java.io.IOException
- {
- resp.setContentType("text/html;charset=GB2312");
- PrintWriter out = resp.getWriter();
- Integer status_code=(Integer)req.getAttribute("javax.servlet.error.status_code");
- out.println("<html><head><title>错误页面</title></head>");
- out.println("<body>");
- //如果你的JDK版本低于1.5,那么你应该按照如下方式调用
- //int status=status_code.intValue();
- //switch(status){...}
- switch(status_code)
- {
- case 401:
- break;
- case 404:
- out.println("<h2>HTTP状态代码:"+status_code+"</h2>");
- out.println("你所访问页面并不存在,或者已经被移动到其它位置。");
- out.println("
如有其它问题,请<a href=mailto:admin@sunxin.org>联系管理员</a>。");
- break;
- default:
- break;
- }
- out.println("</body></html>");
- out.close();
- }
- }
- package org.sunxin.ch06.servlet;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.util.Properties;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class FileExceptionServlet extends HttpServlet
- {
- public void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException,IOException
- {
- FileInputStream fis=new FileInputStream("config.inc");
- Properties pps=new Properties();
- pps.load(fis);
- //读取属性的代码,省略。
- fis.close();
- }
- }
- package servlet;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class ExceptionHandlerServlet2 extends HttpServlet
- {
- protected void service(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, java.io.IOException
- {
- resp.setContentType("text/html;charset=GB2312");
- PrintWriter out = resp.getWriter();
- out.println("<html><head><title>错误页面</title></head>");
- out.println("<body>");
- String uri=(String)req.getAttribute("javax.servlet.error.request_uri");
- Object excep=req.getAttribute("javax.servlet.error.exception");
- out.println(uri+" 运行错误。");
- out.println("<p>错误原因:"+excep);
- out.println("</body></html>");
- out.close();
- }
- }
- <error-page>
- <exception-type>java.io.FileNotFoundException</exception-type>
- <location>/ExcepHandler</location>
- </error-page>
- catch(SQLException se)
- {
- getServletContext().log("ServletContext.log(): 数据库操作失败!"+
- se.toString());
- log("GenericServlet.log(): 数据库操作失败!"+se.toString());
- resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
- "数据库操作出现问题,请联系管理员。");
- }
- try
- {
- int a=5;
- int b=0;
- int c=a/b;
- }
- catch(ArithmeticException ae)
- {
- req.setAttribute("javax.servlet.error.exception",ae);
- req.setAttribute("javax.servlet.error.request_uri",req.getRequestURI());
- RequestDispatcher rd=req.getRequestDispatcher("ExcepHandler2");
- rd.forward(req,resp);
- }
处理异常的Servlet
- package servlet;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class ExceptionHandlerServlet2 extends HttpServlet
- {
- protected void service(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, java.io.IOException
- {
- resp.setContentType("text/html;charset=GB2312");
- PrintWriter out = resp.getWriter();
- out.println("<html><head><title>错误页面</title></head>");
- out.println("<body>");
- String uri=(String)req.getAttribute("javax.servlet.error.request_uri");
- Object excep=req.getAttribute("javax.servlet.error.exception");
- out.println(uri+" 运行错误。");
- out.println("<p>错误原因:"+excep);
- out.println("</body></html>");
- out.close();
- }
- }
说明:
[1] 将异常对象和抛出异常的servlet的位置作为HttpServletRequest对象的属性保存到请求对象中。
[2] 通过请求对象的getRequestDispatcher()方法得到RequestDispatcher对象 调用RequestDispatcher对象的forward()方法将请求转发给 ExcepHandler2
[3] ExcepHandler2可以从请求对象中取出javax.servlet.error.exception和javax.servlet.error.request_uri属性
Servlet的异常处理机制的更多相关文章
- JSP的执行过程及其异常处理机制
1.JSP的执行过程 虽然JSP感觉上很像一般的HTML网页,但事实上它是以Servlet的形式被运行的.因为JSP文件在第一次运行的时候会先解释成Servlet源文件,然后编译成Servle ...
- SpringMVC异常处理机制
SpringMVC异常处理机制 springMVC会将所有在doDispatch方法中的异常捕获,然后处理.无法处理的异常会抛出给容器处理. 在doDispatch()中调用processDispat ...
- Atititjs javascript异常处理机制与java异常的转换.js exception process
Atititjs javascript异常处理机制与java异常的转换.js exception process 1. javascript异常处理机制 Throw str Not throw err ...
- Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
Atitit.js javascript异常处理机制与java异常的转换.js exception processVoae 1. 1. javascript异常处理机制 1 2. 2. Web前后台异 ...
- 分享知识-快乐自己:Spring中的(三种)异常处理机制
案例目录结构: Web.xml 配置: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application ...
- Atititjs javascript异常处理机制java异常转换.js exception process
Atititjs javascript异常处理机制java异常的转换.js exception process 1. javascript异常处理机制 Throw str Not throw erro ...
- Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制
拦截器 文件上传 -中文乱码解决 rest风格 异常处理机制 拦截器 Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerI ...
- Java异常处理机制 try-catch-finally 剖析
Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享. 一. 在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有 ...
- JAVA 异常处理机制
主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...
随机推荐
- Django transaction 误用之后遇到的一个问题与解决方法
今天在调试项目开发好的一个模块的时候,发现了一个很诡异的现象,最后追踪发现是因为在项目中事务处理有误所致.这个问题坑了我好一会,所以记录一下,以免再踩坑.下面开始详述. 我们都知道 Django 框架 ...
- gitlab-ce-11.0.1 安装及汉化
1.添加gitlab源(我这里使用了清华大学的源)cat <<EOF> /etc/yum.repos.d/gitlab-ce.repo[gitlab-ce]name=gitlab-c ...
- 【Codeforces Round #460 (Div. 2) A】 Supermarket
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 就是让你求m*(ai/bb)的最小值 [代码] #include <bits/stdc++.h> #define dou ...
- Tomcat线程池与NIO配置
每个web客户端请求对于服务器端来说就一个单独的线程,客户端的请求数量增多将会导致线程数就上去了,CPU就忙着跟线程切换. 而NIO则是使用单线程(单个CPU)或者只使用少量的多线程(多CPU)来接受 ...
- 洛谷——P1027 Car的旅行路线
https://www.luogu.org/problem/show?pid=1027#sub 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于 ...
- 父类与子类的virtual
父类加了virtual,子类不需要加virtual,多余.加了也不会报错. 父类中不是virtual,子类是virtual,那么父类中的不是虚函数,子类及子子类的派生类中该函数才是虚函数
- Swift Standard Library Reference.pdf
Swift Standard Library Reference.pdf 下载地址 http://download.csdn.net/detail/swifttrain/7446331 自己的Mark ...
- RvmTranslator6.3 is released
RvmTranslator6.3 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...
- 玲珑学院 1050 - array
1050 - array Time Limit:3s Memory Limit:64MByte Submissions:494Solved:155 DESCRIPTION 2 array is an ...
- 用Vue+axios写一个实时搜索
刚刚在学vue,试着写了一个实时搜索文件. 思路:1.input 通过v-model绑定.2.通过watch检测输入结果变化.3根据结果变化从api调用不同的数据. 代码如下: <!DOCTYP ...