ref:如何将自定义异常的信息显示在jsp页面上
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页面上的更多相关文章
- 从数据库提取数据通过jstl显示在jsp页面上
从数据库提取数据通过jstl显示在jsp页面上 1.ConnectDB.java连接数据库,把数据转换成list public class ConnectDB { private final stat ...
- activity通过流程实例id动态获取流程图并展示在jsp页面上
提供的Service方法如下: Java /** * 获取当前任务流程图 * * @param processInstanceId * @return */ @Override public Inpu ...
- javaweb jsp页面上传excel文件
servlet: private static final long FILE_MAX_SIZE = 4 * 1024 * 1024; if (!ServletFileUpload.isMultipa ...
- 个人总结-7- 实现图片在MySQL数据库中的存储,取出以及显示在jsp页面上
昨天主要是进行对数据库的内容提取出来并进行动态显示,这个只需要设置一个servlet从数据库中获取数据即可,只是图片比较特殊,不能显示. 今天准备继续找方法来实现图片得录入和显示到jsp中,准备从网上 ...
- jquery 获取json文件数据,显示到jsp页面上, 或者html页面上
[{"name":"中国工商银行","code":102},{"name":"中国农业银行",&qu ...
- 如何将jsp页面的table报表转换到excel报表导出
假设这就是你的jsp页面: 我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中.那么这个页面会变成这个样子 在此,强调一下搜索时关键词的重要性,这样一下子可以定位到文章, ...
- javascript 如何访问 action或者controller 传给 jsp 页面的值
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- MyEclipse设置jsp页默认打开方式
可以用来设置jsp页默认打开是代码编辑模式而不是半视图半代码的模式. 1.选择菜单Window→Preferences. 2.选择General→Editors→File Associations.在 ...
- jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token <
jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token < <input type="hidden" na ...
随机推荐
- MacOS Sierra允许运行任何来源的程序
参考自http://bbs.feng.com/read-htm-tid-10584598.html Mac新系统 Sierra中默认已经看不到“任何来源”的选项,就无法安装很多的第三方程序,所以需要做 ...
- python核心编程笔记——Chapter5
好吧,开始第五章习题: 5-2.又是老调重谈,raw_input这个函数真是非常麻烦,返回是str类型,没办法,只能在函数里面使用int内建.(就只是一道简单的两数相乘,哭了) #!/usr/bin/ ...
- Android 动态添加Spinner(.java文件内实现) 实现 改变spinner 内文字属性
动态添加spinner 控件 Spinner s = new Spinner(this); String []items={"自己定义的要显示的数组"}; my_SpinnerAd ...
- 字符加密 cipher
评测传送门 Description: Valentino 函数的定义: 对于一个由数字和小写字母组成的字符串 S,两个整数 K,M,将 S 视为一个 P 进制数,定义: Valentino(S, K, ...
- CSS基础之选择器
一:CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到,一个样式表时,就会按照. 二:CSS语法 每个CSS有两部分组成:选择器和声明 ...
- linux学习记录.4.常用命令
帮助command --help 获取‘command‘命令的帮助 目录与文件 cd /home 进入‘home’目录 cd .. 返回上一级目录 cd 进入个人目录 c ...
- CentOS6.6 编译Redis报错:"Newer version of jemalloc required"
一.前言 不同系统同一个问题,可能解决方法不一样,也可能会遇到不同的问题,所以具体情况具体分析,我的系统是Centos6.6, 查看系统命令 cat /etc/issue 二.安装redis后编译报 ...
- golang的json序列化
json就是简单的数据交换格式,语法类似javascript的对象和列表,是最常见的后端和运行在网页上的js之间的通信格式. encoding: 编码json数据需要使用到Marshal()函数. f ...
- HTTP与HTTPS相关知识
URL的开头一般会有http或https,这是访问资源需要的协议类型.有时还会看到ftp.sftp.smb开头的URL,这些都是协议类型.一般使用得最多的还是http和https. HTTP HTTP ...
- Linux内核抢占实现机制分析【转】
Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介 ...