`

Sevrlet处理异常

 
阅读更多
 

项目为给客户提供较好的展示,通常会对异常进行统一处理,除去框架处理外,可以采用servlet处理:

1.在web.xml文件中配置异常处理。

<error-page>
          <error-code>404</error-code>
          <location>/common/404.jsp</location>
</error-page>
 

这种方式要为每种异常都一个异常配置,处理比较单一。

2.采用Filter过滤控制统一管理异常。

<filter>
		<filter-name>ExceptionFilter</filter-name>
		<filter-class>com.hsit.ExceptionFiler</filter-class>
		<init-param>
			<param-name>errorPage</param-name>
			<param-value>/error.jsp</param-value>
         </init-param>
	</filter>
	<filter-mapping>
		<filter-name>ExceptionFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>

	<servlet>
		<servlet-name>ExServlet</servlet-name>
		<servlet-class>com.hsit.ExServlet</servlet-class>
	</servlet>


	<servlet-mapping>
		<servlet-name>ExServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
 
/** 
 * 业务异常类 
 */  
public class BsException extends RuntimeException {  
	private static final long serialVersionUID = 6744141471703095812L;

	//异常代码   
    private String key;  
      
    private Object[] values;//一些其他信息   
      
    public BsException() {  
        super();  
    }  
  
    public BsException(String message, Throwable throwable) {  
        super(message, throwable);  
    }  
  
    public BsException(String message) {  
        super(message);  
    }  
  
    public BsException(Throwable throwable) {  
        super(throwable);  
    }  
      
    public BsException(String message,String key){  
        super(message);  
        this.key = key;  
    }  
      
    public BsException(String message,String key,Object value){  
        super(message);  
        this.key = key;  
        this.values = new Object[]{value};  
    }  
      
    public BsException(String message,String key,Object[] values){  
        super(message);  
        this.key = key;  
        this.values = values;  
    }  
  
    public String getKey() {  
        return key;  
    }  
  
    public Object[] getValues() {  
        return values;  
    }  
}  
 
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/** 
 * 业务异常过滤器 
 */  
public class ExceptionFiler implements Filter {  
  
    private String errorPage;//跳转的错误信息页面   
      
      
    public void destroy() {  
          
    }  
    public void doFilter(ServletRequest req, ServletResponse res,  
            FilterChain chain) throws IOException, ServletException {  
  
         HttpServletResponse response = (HttpServletResponse) res;  
         HttpServletRequest request = (HttpServletRequest) req;  
         //捕获你抛出的业务异常   
         try {  
            chain.doFilter(req, res);  
        } catch (RuntimeException e) {  
            if(e instanceof BsException){//如果是你定义的业务异常   
                request.setAttribute("BsException", e);//存储业务异常信息类   
                request.getRequestDispatcher(errorPage).forward(request, response);//跳转到信息提示页面!!   
            }  
            e.printStackTrace();  
        }  
    }  
       //初始化读取你配置的提示页面路径   
    public void init(FilterConfig config) throws ServletException {  
        //读取错误信息提示页面路径   
        errorPage = config.getInitParameter("errorPage");  
        if(null==errorPage || "".equals(errorPage)){  
            throw new RuntimeException("没有配置错误信息跳转页面,请再web.xml中进行配置\n<init-param>\n<param-name>errorPage</param-name>\n<param-value>/error.jsp</param-value>\n </init-param>\n路径可以是你自己设定的任何有效路径页面!!");  
            //System.out.println("没有配置错误信息跳转页面");   
        }  
    }  
  
}  
 
import java.io.IOException;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class ExServlet extends HttpServlet {  
	private static final long serialVersionUID = 2303258011121708614L;


	public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        this.doPost(request, response);  
          
    }  
      
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
  
        TestService t = new TestService();  
        t.add();//模拟调用业务层方法,在此方法内抛出异常,此异常会在filter中进行捕获。   

    }  
  
}  
 
public class TestService {
	public void add(){
		  System.out.println("add () was called!!");
		  if(true){
		   throw new BsException("in add() throws exception!!");//抛出异常,根据你的业务逻辑
		  }
		 }

}
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<title>运行时异常处理</title>
  </head>
  <body>
  	<form action="/ExceptionHandler/exceptionTest.do">
  		<input type="submit" value="测试"></input>
  	</form>
  </body>
</html>
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<title>捕获异常</title>
  </head>
  <body>
  	
  </body>
</html>
 

 

分享到:
评论

相关推荐

    java,servlet异常处理

    学习过程中经常遇见的异常集锦,大家不要错过啊,希望可以把到大家

    基于java Servlet编码/异常处理(详解)

    下面小编就为大家带来一篇基于java Servlet编码/异常处理(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    自定义处理springboot异常的四种方式

    当后台程序中抛出异常时,springboot默认将错误交由/error地址处理,处理方式可到org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController中查看。 通过现象可以发现springboot的处理方式很...

    spring mvc异常简单处理

    spring mvc让servlet容器直接处理异常.详细看:http://blog.csdn.net/xiejx618/article/details/41695255

    深入Java Servlet网络编程

    2 在Java Servlet中处理异常 2. 4. 3 向浏览器发送标准的HTTP错误 2. 4. 4 服务器端日志记录 2. 5 Servlet在n-层结构中的作用 第3章 会话育理 3. 1 使用传统方法进行会话管理 3. 1. 1 URL Rewriting技术 3....

    Ajax JSON处理Servlet传回的值

    从客户端处理服务器传来的JSON值 自己写的一个小例子,运行无异常.

    Java™ Servlet 规范.

    1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...

    Servlet编程

    认识Servlet 编写Servlet Servlet生命周期 Servlet与JSP内置对象 设置欢迎页面 在Servlet中读取参数 在Servlet内实现跳转 ServletContext高级功能 使用过滤器 异常处理

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...

    基于JDBC+servlet+jsp技术开发的航班管理系统学习项目

    1. Java SE(Standard Edition):作为开发语言,你需要熟悉Java的基本语法、面向对象编程和异常处理等。 2. JDBC:Java程序与数据库之间的连接技术。了解并学习如何使用JDBC API连接数据库、执行SQL语句以及处理...

    jsp+servlet+javabean简单搜索实例

    这是一个简单的搜索实例,输入学生的生日范围,在列表中显示该范围内的所有学生的信息,没有分页处理,其中jdbc部分没有做异常处理,只是想让初学者有个参考,我是从.net转java的,才学了几天,大家有什么意见或建议...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...

    Servlet与JSP核心编程第2版

    第1章 servlet和jsp技术概述 1.1 servlet的功用 1.2 要动态构建网页的原因 1.3 servlet代码初探 1.4 servlet相对于“传统”cgi的优点 1.5 jsp的作用 第1部分 servlet技术 第2章 服务器的安装和配置 ...

    Servlet3.1规范(最终版) PDF

    Servlet3.1规范(最终版) JavaTM Servlet 规范 版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 ...

    servlet高级应用过滤器、防盗链等一系列技术工具打包

    本资源包含 防盗链 、字符编码过滤、日志、异常处理、权限管理、字符过滤、图片水印、Cache缓存等 可直接使用 使用方法请看配置文件

    Java_Jdbc_Hibernate_Struts2_Android_Web异常及其处理办法

    本文档是写的Java相关的异常及其处理办法 包括:Java、Jdbc、Android、JavaScript、Servlet、Jsp、Hibernate、Struts2中一般出现的异常及其解决办法,注明适用于初学者。

    common-spring-boot-stater:基于SpringBoot的Web开发公共模块

    负责处理Servlet产生的异常: 异常类型 响应码 响应文本 DataAccessException 500 数据访问错误 NoHandlerFoundException 404 没有对应的处理器 HttpRequestMethodNotSupportedException 405 不支持的请求方式 ...

Global site tag (gtag.js) - Google Analytics