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. Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第五部分(Page 10)

    编写你的第一个 Django app,第五部分(Page 10)转载请注明链接地址 我们继续建设我们的 Web-poll 应用,本节我们会为它创建一些自动测试. 介绍自动测试 什么是自动测试 测试是简 ...

  2. c++虚函数&重写

    虚函数是C++中实现多态的一种方法,父类A的一个函数声明为虚函数,在子类B中覆盖定义之后,当在调用的时候使用A*a=new B(),此时调用对应的那个虚函数的名字,则会执行B中的函数.当父类中没有定义 ...

  3. CSS3实战之多列

    CSS2中如果要设计多列布局,常用的方法有浮动和定位,但是浮动容易错位,定位无法满足模块的自适应能力,以及模块之间的文档流联动的需要.为了解决多列布局的难题,CSS3新增了多列自动布局功能. 利用多列 ...

  4. 早该知道的7个JavaScript技巧

    我写JavaScript代码已经很久了,都记不起是什么年代开始的了.对于JavaScript这种语言近几年所取得的成就,我感到非常的兴奋:我很幸运也是这些成就的获益者.我写了不少的文章,章节,还有一本 ...

  5. 【AtCoder】ARC067 F - Yakiniku Restaurants 单调栈+矩阵差分

    [题目]F - Yakiniku Restaurants [题意]给定n和m,有n个饭店和m张票,给出Ai表示从饭店i到i+1的距离,给出矩阵B(i,j)表示在第i家饭店使用票j的收益,求任选起点和终 ...

  6. [译] 用HTML5捕获音频和视频

    原文地址:http://www.html5rocks.com/en/tutorials/getusermedia/intro/ 概述 有了HTML5,我们就可以在不借助Flash或者Silverlig ...

  7. 10种CSS3实现的Loading效果

    原文链接:http://www.cnblogs.com/jr1993/p/4622039.html 第一种效果: 代码如下: <div class="loading"> ...

  8. 关于maven环境下使用pom.xml引入包名.lastUpdate包的解决办法

    今天在导入POI-OOXML的时候总是缺失xmlbeans包,而且刷新pom文件总是生成一个lastupdate文件,大小为1KB,终于找到解决办法. 1.首先删除想要的jar包所在文件夹内的所有 . ...

  9. c# CTS 基础数据类型笔记

    C#中的基础数据类型并没有内置于c#语言中,而内置于.net freamework. C#有15个预定义类型,其中13个是值类型,两个是引用类型(string和object) 一.值类型 值类型 数据 ...

  10. [NOI2007]货币兑换 「CDQ分治实现斜率优化」

    首先每次买卖一定是在某天 $k$ 以当时的最大收入买入,再到第 $i$ 天卖出,那么易得方程: $$f_i = \max \{\frac{A_iRate_kf_k}{A_kRate_k + B_k} ...