springMVC框架——统一异常处理

三、统一异常处理在这里插入图片描述详细请点击哔哩哔哩链接:https://www.bilibili.com/video/BV1at4y1m7Z1
GobalExceptHandler.java:

/**
 * Project Name:dt55_springMVC2
 * File Name:GobalExceptHandler.java
 * Package Name:cn.java.controller.exception
 * Date:下午4:07:49
 * Copyright (c) 2018, bluemobi All Rights Reserved.
 *
*/

package cn.java.controller.exception;

import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;


@ControllerAdvice
public class GobalExceptHandler {

    @ExceptionHandler(Exception.class)
    public String exceptionHandler(Exception e) {
        try {
            // File file = new File("c:\\dt55_springMVC2.log");
            FileOutputStream fos = new FileOutputStream("c:\\dt55_springMVC2.log", true);
            PrintStream ps = new PrintStream(fos);
            // 添加时间:yyyy-MM-dd HH:mm:ss
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = sdf.format(date) + "--------";
            // ps.write(time.getBytes("UTF-8"));
            ps.println();
            ps.print(time);

            // 将错误信息写入到文件中去
            e.printStackTrace(ps);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return "redirect:/pages/error/exception.jsp";
    }

}

AdminController.java:

package cn.java.controller.admin;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
@RequestMapping("/admin")
public class AdminController {

    @RequestMapping("/adminException")
    public void adminException() {
        int i = 10 / 0;
    }

}

FrontController.java:


package cn.java.controller.front;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartRequest;

import cn.java.entity.QQ;

@Controller
@RequestMapping("/front")
public class FrontController {

   
    @RequestMapping("/login")
    public String login(String username, String password) {
        // 登录成功
        if ("admin".equals(username) && "123".equals(password)) {
            return "redirect:/pages/front/main.jsp";
        }
        return "front/fail.jsp";
    }

    /**
     * 
     * Description: 异常<br/>
    
     */
    @RequestMapping("/nullPointerExceptionTest1")
    public void nullPointerExceptionTest1() {
        // 空指针
        String str = null;
        str.length();
    }

    @RequestMapping("/indexOutOfBoundsTest2")
    public void indexOutOfBoundsTest2() {
        // 数组下标越界
        int[] attr = { 1, 2 };
        System.out.println(attr[10]);
    }

    @RequestMapping("/arithmeticExceptionTest3")
    public void arithmeticExceptionTest3() {
        // 数组下标越界
        int i = 10 / 0;
    }

    // --------------------统一异常处理方法-------------------------
    // @ExceptionHandler(ArithmeticException.class)
    // public void arithMeticHandler() {
    // System.out.println("算法异常");
    // }

    @RequestMapping("/toTest")
    public String toTest() {
        // return "/WEB-INF/system/test.jsp";
        return "redirect:/WEB-INF/system/test.jsp";
    }

    // -------------------------文件上传---------------------------------------
    @RequestMapping("/uploadFile1")
    public void uploadFile1(String username, MultipartFile bigHeadImg) throws Exception {
        System.out.println("username=" + username);
        // ------------------------------------------
        // 获取上传文件的源文件名:abc.gif
        String fileName = bigHeadImg.getOriginalFilename();
        // 获取file控件的name属性值
        String fieldName = bigHeadImg.getName();
        System.out.println("fileName=" + fileName + " | fieldName=" + fieldName);
        // 将文件保存到:D:\\software\\eclipse_oxygen_x64_4.7\\apache-tomcat-9.0.0.M22\\webapps\\upload
        String filePath = "D:\\software\\upload\\"
                + UUID.randomUUID() + fileName;
        bigHeadImg.transferTo(new File(filePath));
    }

    @RequestMapping("/uploadFile2")
    public void uploadFile2(String username, MultipartRequest mutipart) throws Exception {
        // MultipartRequest对象:保存多个MultipartFile对象
        Map<String, MultipartFile> filesMap = mutipart.getFileMap();
        for (Entry<String, MultipartFile> entry : filesMap.entrySet()) {
            MultipartFile file = entry.getValue();
            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            // 构建文件存放的路径
            String filePath = "D:\\software\\upload\\"
                    + UUID.randomUUID() + originalFilename;
            // 存放文件
            file.transferTo(new File(filePath));
        }
    }

    // ---------------------------服务端校验---------------------------------
    @RequestMapping("/qqRegister")
    public void qqRegister(QQ qqInfo) {
        Map<String, Object> errorMap = new HashMap<String, Object>();
        String nickRegex = "\\w{4,10}";
        String pwdRegex = "\\w{3,16}";
        String phoneRegex = "1[3578]\\d{9}";
        String emailRegex = "\\w{3,12}@(\\d{3,5}|[a-zA-Z]{2,5})(\\.[a-zA-Z]{2,5}){1,3}";
        boolean flag1 = qqInfo.getNick().matches(nickRegex);
        boolean flag2 = qqInfo.getPassword().matches(pwdRegex);
        boolean flag3 = qqInfo.getPhone().matches(phoneRegex);
        boolean flag4 = qqInfo.getEmail().matches(emailRegex);
        if (flag1 && flag2 && flag3 && flag4) {// 全部通过
            System.out.println("调用dao层方法");
        } else {
            if (!flag1) {// 昵称不通过
                errorMap.put("nick", "昵称长度为4-10个字符");
            }
            if (!flag2) {// 密码不通过
                errorMap.put("password", "密码长度为3-16个字符");
            }
            if (!flag3) {// 手机不通过
                errorMap.put("phone", "手机长度为11位数字");
            }
            if (!flag4) {// 邮箱不通过
                errorMap.put("email", "请输入正确的邮箱格式");
            }
        }
        System.out.println(errorMap);
    }

    @RequestMapping("/qqRegisterByMVC")
    public void qqRegisterByMVC(@Valid QQ qqInfo, BindingResult errorResult) {
        boolean flag = errorResult.hasErrors();
        if (flag) {// 不通过
            List<FieldError> errorList = errorResult.getFieldErrors();
            for (FieldError fieldError : errorList) {
                String fieldName = fieldError.getField();// JavaBean中某一个属性名
                String errorMessage = fieldError.getDefaultMessage();// 属性名上对应的错误信息
                System.out.println(fieldName + "=" + errorMessage);
            }
        } else {// 通过
            System.out.println("调用dao层方法");
        }
    }

}

springMVC.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
			http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
			http://www.springframework.org/schema/mvc 
			http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-4.2.xsd ">
			
			<!-- 配置包扫描 -->
			<context:component-scan base-package="cn.java.controller.*" />
			
			<!-- MVC的注解驱动 -->
			<mvc:annotation-driven />
			
			<!-- 配置视图解析器 -->
			<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
				<!-- 配置前缀  -->
				<property name="prefix" value="/pages/"></property>
				<!-- 配置后缀 -->
				<property name="suffix" value=""></property>
			</bean>
			
			<!-- 配置文件上传  -->
			<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
				<!-- 配置编码格式 -->
				<property name="defaultEncoding" value="utf-8"></property>
				<!-- 指定文件上传大小 -->
				<property name="maxUploadSize" value="1048576"></property>
			</bean>
			
			<!--配置数据校验  -->
			<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
			<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
				<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
			</bean>
			
</beans>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>dt55_springMVC3</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 配置全局初始化参数 -->
  <context-param>
  	<param-name>suffix</param-name>
  	<param-value>.do</param-value>
  </context-param>
  
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <error-page>
    <error-code>404</error-code>
    <location>/pages/error/404.jsp</location>
  </error-page>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值