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 ...
随机推荐
- 多路径软件常用操作(MPIO)
一:查看存储盘的路径 1. 查看MPIO的存储盘的路径 # lspath (适用于所有存储的MPIO路径查询) # mpio_get_config -Av (适用于DS3K/DS4K的MPIO路径查询 ...
- 今日SGU 5.14
//SGU 131 还没完全想清楚 留坑 SGU 259 题意:一个机器处理n个任务,每个任务有时间t和传送时间l 收获:贪心 #include<bits/stdc++.h> #defin ...
- HOJ——T 2430 Counting the algorithms
http://acm.hit.edu.cn/hoj/problem/view?id=2430 Source : mostleg Time limit : 1 sec Memory limit : 64 ...
- iterator的使用和封个问题
这篇文章的内容还是不错的: http://www.cnblogs.com/zhuyf87/archive/2012/12/08/2808290.html for (vector<int>: ...
- Windows 操作系统与 .NET Framework
Windos 2000 在单位的机房里好不easy才找到一台安装 Windows 2000 Server SP4 操作系统的server.这台硕果仅存的server到本月底也要退役了. Windows ...
- ZOJ 2562 HDU 4228 反素数
反素数: 对于不论什么正整数x,起约数的个数记做g(x).比如g(1)=1,g(6)=4. 假设某个正整数x满足:对于随意i(0<i<x),都有g(i)<g(x),则称x为反素数. ...
- [ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!
作为入门者来说.了解JavaScript中timer的工作方式是非常重要的.通常它们的表现行为并非那么地直观,而这是由于它们都处在一个单一线程中.让我们先来看一看三个用来创建以及操作timer的函数. ...
- jquery源码01---(2880 , 3042) Callbacks : 回调对象 : 对函数的统一管理
// optionsCache : { 'once memory' : { once : true , memory : true } } var optionsCache = {}; // once ...
- Oracle定义变量、常量
1 定义变量 declare var_countryname varchar2(50):='中国'; 2 定义常量 con_day constant integer:=365;
- 【Django】Form组件
目录 Form组件介绍 常用字段与插件 Form组件中所有内置字段 从数据库中获取数据 校验示例 检验手机号是否合法 方式一(基本操作) 方式二(自定义验证规则) 方式三(利用钩子) 验证密码一致性 ...