三、统一异常处理详细请点击哔哩哔哩链接: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>