`

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编码/异常处理详解" 本文将详细介绍基于java Servlet编码和异常处理的相关知识点。 Servlet输出中文输出 在Servlet中输出中文时,可能会出现乱码问题。之所以会出现乱码,是因为浏览器会对表单...

    Servlet请求响应的特殊处理.rar

    - 对于静态资源,如图片、CSS和JavaScript,通常不建议直接由Servlet处理,而是让Web服务器或静态资源服务处理以提高效率。 了解并熟练掌握这些特殊处理,将有助于构建更健壮、高效的Servlet应用。在实际开发中,...

    servlet 处理上传文件所需的两个包

    需要注意的是,处理文件上传时要考虑到文件大小限制、异常处理、安全性(防止恶意文件上传)等问题。 总之,`javax.servlet`和`commons-fileupload`这两个包是Java Web开发中处理文件上传不可或缺的工具,它们提供...

    Java Web开发异常处理方式及AOP技术

    综上所述,Java Web开发中的异常处理涉及多种策略,包括基础的try-catch-finally、Servlet的异常处理机制、Spring的全局异常处理器,以及Web.xml配置。而AOP技术则提供了更为灵活的异常处理手段,允许我们在不侵入...

    一个简单的jsp+servlet实现的增删改查(适合初手学习)

    - JSP和Servlet之间的协作:Servlet处理业务逻辑,JSP处理视图。 - HTTP请求和响应的工作原理:GET和POST请求的区别,以及如何在Servlet中处理它们。 - JDBC API的使用:连接数据库,执行SQL语句,处理结果集。 - ...

    纯Servlet实现用户管理系统(入门实例,深刻认识Servlet)

    7. **异常处理**:在处理用户请求时,Servlet可能会遇到各种异常,如网络问题、数据库错误等。我们需要适当地捕获和处理这些异常,确保系统稳定性,并向用户提供有用的反馈。 8. **会话管理**:对于用户登录状态的...

    上传图片Servlet

    4. **异常处理**:对可能出现的异常进行捕获和处理,如文件保存失败、磁盘空间不足等。 5. **权限控制**:确保只有授权用户才能进行图片上传操作。 6. **安全性**:防止通过上传图片执行恶意代码,例如检查文件头...

    [转]Servlet3特征 异步Servlet

    在这篇文章中,我们将深入探讨Servlet3的一个关键特性——异步Servlet处理,以及它如何改变了传统的请求-响应模型。 首先,让我们了解传统Servlet的工作方式。在Servlet2.x时代,每个HTTP请求都会创建一个新的线程...

    Servlet2.4 api 帮助文档

    在Java Web应用中,Servlet常与JSP(JavaServer Pages)结合使用,Servlet处理业务逻辑,JSP负责展示视图。通过RequestDispatcher,Servlet可以将请求转发到JSP页面,实现动态内容的生成。 九、异常处理 Servlet ...

    用servlet的商品购物系统

    Servlet可以通过try-catch语句捕获并处理可能出现的异常,提供友好的错误页面或提示信息。 9. **部署与运行**:这个项目需要部署在支持Servlet的Web服务器上,如Tomcat、Jetty等。开发者通常会打包成WAR文件,然后...

    基于servlet 的考勤管理系统

    9. **异常处理**:在处理用户请求时,可能出现各种异常,项目中应包含适当的异常处理机制,以保证系统的健壮性。 10. **安全性**:考虑到考勤数据的敏感性,系统可能采用了基本的身份验证和授权机制,比如使用...

    servlet反编译源码

    - 如何处理异常,特别是在service()方法中捕获并处理不同类型的HTTP异常。 总的来说,深入理解Servlet源码有助于提升我们的Java Web开发技能,使我们能够更高效地解决问题,编写出更健壮、更高效的Web应用程序。...

    Servlet开发流程

    自Servlet 3.0起,引入了一些新特性,如注解驱动的Servlet配置、异步处理、Servlet初始化参数等,使得Servlet的开发更加便捷。 通过以上步骤,我们可以成功地开发和部署一个Servlet。随着对Servlet理解的深入,...

    servletAPI2.1中文版

    - 异常处理:描述了Servlet中异常的捕获和处理机制。 - JSP与Servlet的协同工作:说明了如何在Servlet中调用JSP页面,以及JSP如何调用Servlet。 - 部署描述符web.xml:详述了部署描述符的结构和配置元素,它是配置...

    异步servlet

    4. **错误处理**:考虑异常情况下的处理,如捕获并记录异常,或者提供合适的错误页面。 总的来说,异步Servlet是Java Web开发中的一个重要优化工具,它通过分离请求处理和响应生成,提高了系统的并发性和效率,特别...

    Servlet 课件

    7. 异常处理:如何在Servlet中捕获和处理异常,以及使用error-page元素在web.xml中配置错误页面。 8. JSP与Servlet的关系:JSP是动态网页技术,它最终会被转换成Servlet。课件可能解释如何在JSP中使用脚本元素、...

    javax.servlet.jar包下载

    当您在项目中遇到“找不到类”或“类路径异常”与Servlet相关的错误时,可能是因为缺少了这个jar包。 1. **Servlet简介** Servlet是Java中用于扩展服务器功能的接口和类的集合。它们是Java EE的一部分,允许开发者...

    servlet的项目练习.zip

    Servlet应用中,可以使用`@WebExceptionHandler`注解来处理全局异常,或者在特定Servlet中捕获并处理异常。 10. **部署与调试**:最后,我们需要知道如何将项目打包成WAR文件,部署到Tomcat或其他Servlet容器中,并...

    用Servlet写的餐品订阅系统

    这个小型餐品订阅系统很可能利用Servlet处理用户的订阅、查询、取消等操作。 【餐品订阅系统架构】 一个基于Servlet的餐品订阅系统可能包括以下几个主要部分: 1. 用户界面:用户可以通过HTML表单提交订阅请求,...

Global site tag (gtag.js) - Google Analytics