zoukankan      html  css  js  c++  java
  • 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=" 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=" 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>
  • 相关阅读:
    架构之路(六):把框架拉出来
    读取mdb文件
    基类、子类之间的类型转换
    WPF Trigger
    WPF 打开txt文件
    C# 匿名方法
    自定义显隐式类型转换
    枚举获得Description扩展方法
    IFormattable和IFormatProvider
    WPF DataGrid下滑动态加载数据
  • 原文地址:https://www.cnblogs.com/studyskill/p/9552325.html
Copyright © 2011-2022 走看看