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 ...
随机推荐
- CSS3新的UI方案
文本新增样式 一.opacity:指定了一个元素的透明度 0~1 二.新增颜色模式rgba:很好的解决了背景透明,字体颜色不透明的需求. 三.文字阴影:text-shadow用来为文字添加阴影,而且可 ...
- python关于sorted里面key,reverse以及lamdba,operator这几个鸟人
关于sorted: help里给的解释 >>> help(sorted) Help on built-in function sorted in module __builti ...
- 51nod 更难的矩阵取数问题 + 滚动数组优化
这里要求要走到终点再走回来,可以转化为两个人走. 那么我们可以先粗暴的设f[x1][y1][x2][y2]为第一个人走到(x1, y1), 第二个人走到(x2, y2)的最大价值. 那么这样空间会很大 ...
- 实例讲解Nginx下的rewrite规则 来源:Linux社区
一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* ...
- EditPlus 使用技巧以及快捷键
一边阅读,一边动手吧! 为了达到更好的效果,请你先下载我打包的这个 EditPlus压缩包文件(压缩包文件为绿色的EditPlus2.31英文版,含自动完成文件,高亮语法文件和剪切板代码片断文件,这些 ...
- 9.Nexus私服安装配置
第一步:下载nexus-webapp-1.9.2.4.war包,然后复制到tomcat下的webapps文件夹中 第二步:启动tomcat 第三步:訪问http://localhost:8080/ne ...
- 手动脱FSG壳实战
作者:Fly2015 对于FSG壳.之前没有接触过是第一次接触.这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业3的程序.对于这个壳折腾了一会儿,后来还是被搞定了. 1.查壳 首先对该程序(吾爱破解 ...
- 用ElasticSearch,LogStash,Kibana搭建实时日志收集系统
用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana ...
- button-xml 中android:clickable="false" 属性
今天在做项目的时候,遇到了一个问题,就是需要把一个常按监听事件,加到一个linearlayout中,但是,这个linearlayout中有其他的button.textview等控件,这样就导致当我们常 ...
- Fragment-两种使用方式
这篇我们就用实例来看看我们在代码中如何使用Fragment 一:静态添加Fragment 新建一个项目,添加两个Fragment的布局文件fragment_title,fragment_content ...