ref:https://blog.csdn.net/tao_ssh/article/details/53486449

在项目中,经常会抛出异常,输出比较友好的信息来提示用户,并指导用户行为。
大体思路:首先自定义一个异常类MyException,继承RuntimeException,定义一些变量和对应的setter、getter方法。然后创建servlet,在需要抛出异常的地方throw new MyException()。再创建一个过滤器捕获抛出的异常,转发到提示页面msg.jsp,显示对应的异常信息。(过滤器捕捉异常,然后转发到显示页面)

代码示例如下:

一、异常MyException

package com.myee.exception;

/**
* Created by want on 2016/12/6.
*/
public class MyException extends RuntimeException {
public static final String INFO = "INFO";
public static final String ERROR = "ERROR";
public static final String SUCCESS = "SUCCESS";
protected String type = "INFO";
protected String code = "0";
protected String codeStr = "respCode";
protected String msgStr = "respMsg";
protected String url = ""; public String getCodeStr() {
return this.codeStr;
} public void setCodeStr(String codeStr) {
this.codeStr = codeStr;
} public String getMsgStr() {
return this.msgStr;
} public void setMsgStr(String msgStr) {
this.msgStr = msgStr;
} public String getUrl() {
return this.url;
} public void setUrl(String url) {
this.url = url;
} public String getCode() {
return this.code;
} public void setCode(String code) {
this.code = code;
} public MyException() {
} public MyException(String msg) {
super(msg);
} public MyException(String msg, String url) {
super(msg);
this.url = url;
} public MyException(String msg, String url, String msgStr) {
super(msg);
this.url = url;
this.msgStr = msgStr;
} public String getType() {
return this.type;
}
}

二、过滤器ExeceptionFilter

package com.myee.filter;

import com.myee.exception.MyException;

import javax.servlet.*;
import java.io.IOException; /**
* Created by want on 2016/12/6.
*/
public class ExeceptionFilter implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
try {
filterChain.doFilter(servletRequest, servletResponse);
} catch (MyException e) {
/* e.printStackTrace();此处过滤器捕获异常,注意filter在servlet外层监听*/
servletRequest.setAttribute("url", e.getUrl());
servletRequest.setAttribute("type", e.getType());
servletRequest.setAttribute("code", e.getCode());
servletRequest.setAttribute("codeStr", e.getCodeStr());
servletRequest.setAttribute("msgStr", e.getMsgStr());
servletRequest.getRequestDispatcher("/msg.jsp").forward(servletRequest, servletResponse);//将错误信息转发到msp.jsp
}
} @Override
public void destroy() {
}
}

三、Servlet

package com.myee.servlet;
import com.myee.exception.MyException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; /**
* Created by want on 2016/12/6.
*/
public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req , resp );
} public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(req !=null){
throw new MyException("我的自定义异常!!!","/index.jsp","正常抛出了");//抛出异常
}
req.getRequestDispatcher("/index.jsp").forward(req,resp);
}
}

四、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>ee</servlet-name>
<servlet-class>com.myee.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ee</servlet-name>
<url-pattern>/myee</url-pattern>//访问myee页面才抛出异常
</servlet-mapping> <filter>
<filter-name>exefilter</filter-name>
<filter-class>com.myee.filter.ExeceptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>exefilter</filter-name>
<url-pattern>/*</url-pattern>//其他页面正常访问
</filter-mapping> </web-app>

五、index.jsp和msg.jsp

①index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<div style="width: 300px;height: 500px;margin: 10px auto;padding: 10px">
<h4>hello world!</h4>
<a href="/myee">访问</a>
</div>
</body>
</html>

②msg.jsp

<%@ page contentType="text/html;charset=utf-8" language="java" %>
<head>
<title>提示窗</title> </head>
<body>
<div style="width: 300px;height: 500px;margin: 10px auto;padding: 10px">
 
<div><h4>系统提示</h4></div>
<p>msg:${msg}</p><br>
<p>提示信息:${msgStr}</p>
<a href="${url}">确定</a>
</div> </body>
</html>

ref:如何将自定义异常的信息显示在jsp页面上的更多相关文章

  1. 从数据库提取数据通过jstl显示在jsp页面上

    从数据库提取数据通过jstl显示在jsp页面上 1.ConnectDB.java连接数据库,把数据转换成list public class ConnectDB { private final stat ...

  2. activity通过流程实例id动态获取流程图并展示在jsp页面上

    提供的Service方法如下: Java /** * 获取当前任务流程图 * * @param processInstanceId * @return */ @Override public Inpu ...

  3. javaweb jsp页面上传excel文件

    servlet: private static final long FILE_MAX_SIZE = 4 * 1024 * 1024; if (!ServletFileUpload.isMultipa ...

  4. 个人总结-7- 实现图片在MySQL数据库中的存储,取出以及显示在jsp页面上

    昨天主要是进行对数据库的内容提取出来并进行动态显示,这个只需要设置一个servlet从数据库中获取数据即可,只是图片比较特殊,不能显示. 今天准备继续找方法来实现图片得录入和显示到jsp中,准备从网上 ...

  5. jquery 获取json文件数据,显示到jsp页面上, 或者html页面上

    [{"name":"中国工商银行","code":102},{"name":"中国农业银行",&qu ...

  6. 如何将jsp页面的table报表转换到excel报表导出

    假设这就是你的jsp页面: 我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中.那么这个页面会变成这个样子 在此,强调一下搜索时关键词的重要性,这样一下子可以定位到文章, ...

  7. javascript 如何访问 action或者controller 传给 jsp 页面的值

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  8. MyEclipse设置jsp页默认打开方式

    可以用来设置jsp页默认打开是代码编辑模式而不是半视图半代码的模式. 1.选择菜单Window→Preferences. 2.选择General→Editors→File Associations.在 ...

  9. jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token <

    jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token < <input type="hidden" na ...

随机推荐

  1. CF869 C 组合

    先吐槽下,题面套的物语系列欸.. 由于距离为3,那么必定两种颜色间要填入第3种颜色,否则就是单独点的情况,那么两两之间可以单独考虑而不影响答案,枚举两种颜色之间边数,计算一边的组合和另一边的排列,最后 ...

  2. Git之简介及安装

    简介 Git是一个分布式版本控制系统,GitHub相当于一个远程仓库,注册账号可免费获得Git远程仓库. GitHub使用参考:https://guides.github.com/activities ...

  3. BZOJ3994 约数个数和

    3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MB Description  设d(x)为x的约数个数,给定N.M,求   I ...

  4. 20155214 2016-2017-2 《Java程序设计》第7周学习总结

    20155214 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 UTC时间以Unix元年(1970年)为起点经过的秒数. ISO 8601并非年历系统,大部 ...

  5. 20155201 2016-2017-2 《Java程序设计》第六周学习总结

    20155201 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第十章 输入/输出 字节输入类: Java将输入/输出抽象化为串流,数据有来源及目的地,衔接 ...

  6. UITableView--文档版

    CHENYILONG Blog UITableView Fullscreen   UITableView技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http: ...

  7. 收集了一些python的文章

    来自: 戴铭 2010-08-31 17:52:31 newthreading - safer concurrency for Python 安全并发(1回应) http://www.starming ...

  8. C++的各种初始化方式

    C++小实验测试:下面程序中main函数里a.a和b.b的输出值是多少? #include <iostream> struct foo { foo() = default; int a; ...

  9. [转]QVector与QByteArray——Qt的写时复制(copy on write)技术

    我们在之前的博文QVector的内存分配策略与再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值中简单聊了聊QVector内存分配和赋值方面的一点东西,今天接 ...

  10. Android Build.VERSION.SDK_INT兼容介绍

    尽管Android向下兼容不好,但是一个程序还是可以在多个平台上跑的.向下兼容不好,接口改变,新的平台上不能用旧的API,旧的平台更不可能用新的API,不等于一个平台需要一个APK.可以在高SDK上开 ...