• Spring mvc 简单异常配置jsp页面


    原文出处:http://howtodoinjava.com/spring/spring-mvc/spring-mvc-simplemappingexceptionresolver-example/

    这个例子很简单,主要需求是在进行web开发时,当用户访问时出现异常,直接将异常暴露在前台,一是很不友好,二是异常连的输出会直接暴露后台接口,这是很不安全。所以需要当发生异常时都转到一个默认的jsp页面。在spring mvc中,可以使用simpleMappingExceptionResolver来解决这个问题。

    1. 构建MAVEN项目。其项目结构如下:

    2. 在Controller中抛出异常,则EmployeeCotroller中的代码如下:

    package com.howtodoinjava.demo.controller;
    
    import java.util.Date;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import com.howtodoinjava.demo.exception.AuthException;
    
    
    
    
     
    @Controller
    @RequestMapping("/employee-module")
    public class EmployeeController {
    	 @RequestMapping(value="/getAllEmployees", method = RequestMethod.GET)
    	    public String welcome(Model model) 
    	    {
    	       // throw new AuthException(new Date(), "Something bad happened dude !! Run Away :-(");
    		   throw new NullPointerException();
    	    }
    }
    

      同时,添加自己定义的异常类AuthException,代码如下:

    package com.howtodoinjava.demo.exception;
    
    import java.util.Date;
    
    public class AuthException extends RuntimeException {
    	
    	 private static final long serialVersionUID = 1L;
         
    	    private Date date;
    	    private String message;
    	     
    	    public AuthException(Date date, String message) {
    	        super();
    	        this.date = date;
    	        this.message = message;
    	    }
    	 
    	    public Date getDate() {
    	        return date;
    	    }
    	 
    	    public String getMessage() {
    	        return message;
    	    }
    	 
    	    @Override
    	    public String toString() {
    	        return "AuthException [date=" + date + ", message=" + message + "]";
    	    }
    }
    

      3. 创建jsp文件,当抛出自定义异常时返回view的页面是authException.jsp,当抛出nullPointException时,返回页面是genericView.jsp。

    --- authException.jsp页面的代码为:

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <html>
        <head>
            <title>Authentication Exception</title>
        </head>
         
        <body>
     
            <h2>Exception occured at: </h2><fmt:formatDate value="${exception.date}" pattern="yyyy-MM-dd" />
            <h2>Exception Message   : </h2>${exception.message}
        </body>
    </html>
    

      ---genericView.jsp

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <html>
        <head>
            <title>Generic Exception</title>
        </head>
        <body>
            <h2>Some generic error message</h2>
        </body>
    </html>
    

      4. 修改配置文件,在spring-serlvet.xml中增加SimpleMappingExceptionResolver的Bean,具体代码如下:

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     
        <context:component-scan base-package="com.howtodoinjava.demo" />
     
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
        <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
         
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/views/" />
            <property name="suffix" value=".jsp" />
        </bean>
         
        <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basename" value="messages" />
        </bean>
         
        <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <prop key="com.howtodoinjava.demo.exception.AuthException">
                        error/authExceptionView
                    </prop>
                </props>
            </property>
            <property name="defaultErrorView" value="error/genericView"/>
        </bean>
     
    </beans>
    

      5. web.xml以及pom.xml文件分别为:

    ---web.xml

    <web-app id="WebApp_ID" version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
         
        <display-name>Spring Web MVC Hello World Application</display-name>
         
        <servlet>
            <servlet-name>spring</servlet-name>
                <servlet-class>
                    org.springframework.web.servlet.DispatcherServlet
                </servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>spring</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
     
    </web-app>
    

      ---pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.howtodoinjava.mvc</groupId>
      <artifactId>exceptionHandlerDemo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      
      <dependencies>
       <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
      </dependency>
      <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.1.Final</version>
      </dependency>
      <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
     
            <!-- Spring MVC support -->
     
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
     
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
     
            <!-- Tag libs support for view layer -->
     
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
                <scope>runtime</scope>
            </dependency>
     
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
                <scope>runtime</scope>
            </dependency>
    </dependencies>
    </project>
    

      执行结果:

    输入url: localhost:8080/exceptionHandlerDemo/employee-module/getAllEmployees

    --当抛出AuthException异常时,访问得到页面如下所示:

  • 相关阅读:
    Spring MVC 3 深入总结
    精益之识别和消除研发过程中浪费的思路和模式
    怎样区分直连串口线和交叉串口线?
    UVA 10557 XYZZY
    概率论 —— 分析计算机系统和网络的可靠性和通用性
    概率论 —— 分析计算机系统和网络的可靠性和通用性
    Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔
    鲁迅先生的话
    鲁迅先生的话
    辛词
  • 原文地址:https://www.cnblogs.com/Eunice-mogu/p/5241217.html
Copyright © 2020-2023  润新知