springMVC 异常

springMVC  异常

 

0.依赖(不只是本次案例所需)

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="//maven.apache.org/POM/4.0.0"
         xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gxeom</groupId>
    <artifactId>bookshop</artifactId>
    <version>1.0-SNAPSHOT</version>
<dependencies>

<!--1.servlet-api  jsp-api   2个jar包-->

<!--作用:
    1. Springmvc 当中要用servlet对象 request session
    2. Springmvc web.xml配置 dispatcherServlet  继承httpServlet
    3.Springmvc 的注解  -->
    <!-- //mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- //mvnrepository.com/artifact/javax.servlet/jsp-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>


<!--2.数据库  3个jar包 -->

    <!--    mysql的连接驱动  版本要和自己的数据库版本相匹配  -->
    <!-- //mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.19</version>
    </dependency>
    <!--    连接池的依赖-->
    <!-- //mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.10</version>
    </dependency>
    <!--    我为了使用JdbcTemplate 所以我们要导入spring-jdbc-->
    <!-- //mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>

    <!--3.spring核心   3个jar包(SpEL)不必须导入 -->

    <!--    spring  核心依赖 beans core context SpEL(不是必须导入)-->
    <!-- //mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- //mvnrepository.com/artifact/org.springframework/spring-core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- //mvnrepository.com/artifact/org.springframework/spring-beans -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>

    <!--4. Spring-web+ Spring-mvc+json   3个jar包-->

    <!--    要和web相结合 spring-web-->
    <!-- //mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
    <!--    Spring mvc -->
    <!-- //mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
    <!--    springmvc配套的第三方json依赖-->
    <!-- //mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>


    <!--5.aop+aspectj  3个jar包-->

    <!--    AOP  ASPECTJ-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
    <!--aop切点-->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.6.11</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.11</version>
    </dependency>
    <!--动态代理-->
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.1</version>
    </dependency>



    <!-- 6.jstl标签    2个jar包
    作用: 页面上去掉 scriptlet(脚本) 页面上获值并输出-->


    <!--jstl+standard-->
    <!-- //mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- //mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>


    <!--7.图片上传  2个jar包-->
    <!--字节流+图片-->
    <!-- //mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
    <!-- //mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
</dependencies>

</project>

 

 

1.xml配置(WEB-INF下)


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="//xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="//xmlns.jcp.org/xml/ns/javaee //xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--转发控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!--       配置classpath contextConfigLocation
           默认classpath WEB-INF-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:Spring-MVC.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
<!--    <error-page>-->
<!--          <error-code>404</error-code>-->
<!--          <location>/fristex.do</location>-->
<!--    </error-page>-->

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

<!--    <servlet-mapping>-->
<!--        <servlet-name>default</servlet-name>-->
<!--        <url-pattern>*.js</url-pattern>-->
<!--        <url-pattern>*.css</url-pattern>-->
<!--        <url-pattern>*.map</url-pattern>-->
<!--        <url-pattern>*.jpg</url-pattern>-->
<!--        <url-pattern>*.png</url-pattern>-->
<!--    </servlet-mapping>-->

</web-app>

 2.spring-mvc配置

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="//www.springframework.org/schema/beans"
       xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="//www.springframework.org/schema/mvc"
       xmlns:context="//www.springframework.org/schema/context"
       xsi:schemaLocation="
       //www.springframework.org/schema/beans
       //www.springframework.org/schema/beans/spring-beans.xsd
       //www.springframework.org/schema/mvc
       //www.springframework.org/schema/mvc/spring-mvc.xsd
       //www.springframework.org/schema/context
       //www.springframework.org/schema/context/spring-context.xsd
">
<!--    <mvc:resources mapping="/js/**" location="js/"></mvc:resources>-->

<!--    mvc驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>
    <context:component-scan base-package="com.tjetc.*"></context:component-scan>
    <bean id="sysExceptionResolver" class="com.tjetc.exeception.SysExetionResolve"></bean>

 

3.SysExeption类

package com.tjetc.exeception;

public class SysExeption extends Exception{

    private String message;

    public SysExeption(String message) {
        this.message = message;
    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

 

4.SysExetionResolve

 

package com.tjetc.exeception;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SysExetionResolve implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
        SysExeption e = null;
        if ( ex instanceof SysExeption){
            e= (SysExeption)ex;
        }else {
            e=new SysExeption("系统正在维护。。");
        }
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("errorMsg",e.getMessage());
        modelAndView.setViewName("error.jsp");
        return modelAndView;
    }
}

 

5.FristController

 

package com.tjetc.controller;

import com.tjetc.exeception.SysExeption;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class FristController {
    @RequestMapping("fristex.do")
    public  String fristEX() throws SysExeption {
     try {
         System.out.println(1/0);
     }catch (Exception e){
         e.printStackTrace();
         throw new SysExeption("查询出错了。。。");
     }
     return "success.jsp";
    }
}

 

6.error.jsp

<%--
  Created by IntelliJ IDEA.
  User: sun
  Date: 2020/6/8
  Time: 11:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${errorMsg}
</body>
</html>