项目为给客户提供较好的展示,通常会对异常进行统一处理,除去框架处理外,可以采用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编码和异常处理的相关知识点。 Servlet输出中文输出 在Servlet中输出中文时,可能会出现乱码问题。之所以会出现乱码,是因为浏览器会对表单...
- 对于静态资源,如图片、CSS和JavaScript,通常不建议直接由Servlet处理,而是让Web服务器或静态资源服务处理以提高效率。 了解并熟练掌握这些特殊处理,将有助于构建更健壮、高效的Servlet应用。在实际开发中,...
需要注意的是,处理文件上传时要考虑到文件大小限制、异常处理、安全性(防止恶意文件上传)等问题。 总之,`javax.servlet`和`commons-fileupload`这两个包是Java Web开发中处理文件上传不可或缺的工具,它们提供...
综上所述,Java Web开发中的异常处理涉及多种策略,包括基础的try-catch-finally、Servlet的异常处理机制、Spring的全局异常处理器,以及Web.xml配置。而AOP技术则提供了更为灵活的异常处理手段,允许我们在不侵入...
- JSP和Servlet之间的协作:Servlet处理业务逻辑,JSP处理视图。 - HTTP请求和响应的工作原理:GET和POST请求的区别,以及如何在Servlet中处理它们。 - JDBC API的使用:连接数据库,执行SQL语句,处理结果集。 - ...
在Java Web应用中,Servlet常与JSP(JavaServer Pages)结合使用,Servlet处理业务逻辑,JSP负责展示视图。通过RequestDispatcher,Servlet可以将请求转发到JSP页面,实现动态内容的生成。 九、异常处理 Servlet ...
7. **异常处理**:在处理用户请求时,Servlet可能会遇到各种异常,如网络问题、数据库错误等。我们需要适当地捕获和处理这些异常,确保系统稳定性,并向用户提供有用的反馈。 8. **会话管理**:对于用户登录状态的...
4. **异常处理**:对可能出现的异常进行捕获和处理,如文件保存失败、磁盘空间不足等。 5. **权限控制**:确保只有授权用户才能进行图片上传操作。 6. **安全性**:防止通过上传图片执行恶意代码,例如检查文件头...
在这篇文章中,我们将深入探讨Servlet3的一个关键特性——异步Servlet处理,以及它如何改变了传统的请求-响应模型。 首先,让我们了解传统Servlet的工作方式。在Servlet2.x时代,每个HTTP请求都会创建一个新的线程...
Servlet可以通过try-catch语句捕获并处理可能出现的异常,提供友好的错误页面或提示信息。 9. **部署与运行**:这个项目需要部署在支持Servlet的Web服务器上,如Tomcat、Jetty等。开发者通常会打包成WAR文件,然后...
9. **异常处理**:在处理用户请求时,可能出现各种异常,项目中应包含适当的异常处理机制,以保证系统的健壮性。 10. **安全性**:考虑到考勤数据的敏感性,系统可能采用了基本的身份验证和授权机制,比如使用...
- 如何处理异常,特别是在service()方法中捕获并处理不同类型的HTTP异常。 总的来说,深入理解Servlet源码有助于提升我们的Java Web开发技能,使我们能够更高效地解决问题,编写出更健壮、更高效的Web应用程序。...
自Servlet 3.0起,引入了一些新特性,如注解驱动的Servlet配置、异步处理、Servlet初始化参数等,使得Servlet的开发更加便捷。 通过以上步骤,我们可以成功地开发和部署一个Servlet。随着对Servlet理解的深入,...
- 异常处理:描述了Servlet中异常的捕获和处理机制。 - JSP与Servlet的协同工作:说明了如何在Servlet中调用JSP页面,以及JSP如何调用Servlet。 - 部署描述符web.xml:详述了部署描述符的结构和配置元素,它是配置...
4. **错误处理**:考虑异常情况下的处理,如捕获并记录异常,或者提供合适的错误页面。 总的来说,异步Servlet是Java Web开发中的一个重要优化工具,它通过分离请求处理和响应生成,提高了系统的并发性和效率,特别...
7. 异常处理:如何在Servlet中捕获和处理异常,以及使用error-page元素在web.xml中配置错误页面。 8. JSP与Servlet的关系:JSP是动态网页技术,它最终会被转换成Servlet。课件可能解释如何在JSP中使用脚本元素、...
当您在项目中遇到“找不到类”或“类路径异常”与Servlet相关的错误时,可能是因为缺少了这个jar包。 1. **Servlet简介** Servlet是Java中用于扩展服务器功能的接口和类的集合。它们是Java EE的一部分,允许开发者...
Servlet应用中,可以使用`@WebExceptionHandler`注解来处理全局异常,或者在特定Servlet中捕获并处理异常。 10. **部署与调试**:最后,我们需要知道如何将项目打包成WAR文件,部署到Tomcat或其他Servlet容器中,并...
这个小型餐品订阅系统很可能利用Servlet处理用户的订阅、查询、取消等操作。 【餐品订阅系统架构】 一个基于Servlet的餐品订阅系统可能包括以下几个主要部分: 1. 用户界面:用户可以通过HTML表单提交订阅请求,...