Spring MVC 学习笔记 6《触发异常后跳转控制》
发布日期:2021-06-30 14:58:30 浏览次数:2 分类:技术文章

本文共 4392 字,大约阅读时间需要 14 分钟。

Spring MVC 学习笔记 6《触发异常后跳转控制》

最初的疑惑

不知道为什么上传文件大小超出后,触发了异常,但是没有正确跳转。

其他异常都试过,能正常跳转制定的提示页面。

throw new JerryException("呵呵哒了", 1000);		int a = 1/0;
jerryException
limit

幡然醒悟

看了别人的帖子

貌似Tomcat有Bug 异常MaxUploadSizeExceededException显然死在路上了,导致一旦上传文件过大,后台也不报错,前台直接无响应。

解决方案

添加拦截器判断文件大小,手动抛出异常MaxUploadSizeExceededException

spring-mvc.xml 配置

/ssm/src/main/resources/spring-mvc.xml 省略无关部分

...    
error\jerryException
error\limit

创建拦截器

/ssm/src/main/java/com/jerry/ssm/interceptor/FileUploadInterceptor.java

package com.jerry.ssm.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;import org.apache.tomcat.util.http.fileupload.servlet.ServletRequestContext;import org.springframework.web.multipart.MaxUploadSizeExceededException;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class FileUploadInterceptor implements HandlerInterceptor {
private long maxSize; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(request!=null && ServletFileUpload.isMultipartContent(request)) {
ServletRequestContext ctx = new ServletRequestContext(request); long requestSize = ctx.contentLength(); if (requestSize > maxSize) {
throw new MaxUploadSizeExceededException(maxSize); } } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
} @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
} public void setMaxSize(long maxSize) {
this.maxSize = maxSize; }}

添加控制层(测试异常)

/ssm/src/main/java/com/jerry/ssm/controller/ExceptionController.java

package com.jerry.ssm.controller;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.jerry.ssm.exception.JerryException;@Controller@Scope("prototype")@RequestMapping("/exception")public class ExceptionController{
/** * http://localhost/exception/list * @throws JerryException */ @RequestMapping("/list") public String list() throws JerryException {
return "error/exceptionList"; } /** * http://localhost/jerryException * @throws JerryException */ @RequestMapping("/jerry") public String jerryException() throws JerryException {
throw new JerryException("呵呵哒了", 1000); } /** * http://localhost/byZero * @throws JerryException */ @RequestMapping("/byZero") public String byZeroException() throws JerryException {
int a = 1/0; return ""; }}

添加视图(测试异常)

/ssm/src/main/webapp/WEB-INF/jsp/error/exceptionList.jsp

<%@ page language="java" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>			

/ssm/src/main/webapp/WEB-INF/jsp/error/error.jsp

<%@ page language="java" pageEncoding="UTF-8"%>	

error

出错了啦:${exp}

/ssm/src/main/webapp/WEB-INF/jsp/error/jerryException.jsp

<%@ page language="java" pageEncoding="UTF-8"%>	 

jerryException

${exp}

/ssm/src/main/webapp/WEB-INF/jsp/error/limit.jsp

<%@ page language="java" pageEncoding="UTF-8"%>	

上传文件最大 2M

${

exp.message}

Demo源码

转载地址:https://jerryjin.blog.csdn.net/article/details/89302568 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:算法学习 - 取大于身最近的2次幂
下一篇:Spring MVC 学习笔记 5《5.1 单文件上传》

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月13日 15时29分15秒