`
云上太阳
  • 浏览: 130539 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于SpringMVC异常处理的实践总结

阅读更多

关于SpringMVC异常处理的实践总结

                                                                                    ——我一直不太信任自己的记忆力,所以我把它们都写下来

 

 在web项目中,用户访问了无效资源、系统内部错误等都需要给用户相应的回馈,比如说下面的404错误,我相信下面错误提示是用户和你都不想看到的。

类似异常有404,405,406,500 等,具体含义可以自行百度。这些异常处理可以让美工做几个漂亮的页面,然后在web.xml添加如下

<error-page>
        <error-code>404</error-code>
        <location>/albert/page/404</location>
    </error-page>
    <error-page>
        <error-code>405</error-code>
        <location>/albert/page/405</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/albert/page/500</location>
    </error-page>
    <error-page>
        <exception-type>org.apache.shiro.authz.AuthorizationException</exception-type>
        <location>/albert/page/401</location>
    </error-page>

 

如果是是controller抛出的异常呐?

 

有两种方法来处理controller异常。

1.继承HandlerExceptionResolver,然后在mvc配置文件中添加这个异常resolver

/**
 * @author albert
 * 异常处理,不赞成使用,推荐使用@ExceptionHandler </br>
 * 需要在mvc配置文件中添加
 * 	<bean id="exceptionResolver" class="com.fh.resolver.MyExceptionResolver"></bean>
 */
@Deprecated
public class MyExceptionResolver implements HandlerExceptionResolver{
	Logger logger = Logger.getLogger(this.getClass());
	public ModelAndView resolveException(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex) {
		ex.printStackTrace();
		ModelAndView mv = new ModelAndView("error");
		mv.addObject("exception", ex.toString().replaceAll("\n", "<br/>"));
		return mv;
	}

}

 2.用注解的方式,一般都是定义一个抽象类,让所有的controller都继承它,controller方法捕获异常后在catch中都抛出同样的自定义异常

package com.albert.web.controller;

import java.io.IOException;
import java.io.PrintWriter;

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

import org.apache.log4j.Logger;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
public class BaseController {  
	Logger logger = Logger.getLogger(this.getClass());
    @ExceptionHandler
    public String exception(HttpServletRequest request,HttpServletResponse res, Exception e) {  
        logger.info("异常处理:"+e.getMessage());
        
        RestController restController = AnnotationUtils.findAnnotation(this.getClass(), RestController.class);

        if(restController==null){//返回页面
        	request.setAttribute("exceptionMessage", e.getMessage());  
        	return "500";
        }else{ //如果controller有@RestController注解,则返回json
        	PrintWriter writer = null;
			try {
				writer = res.getWriter();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
        	String json = "json_error";
        	writer.write(json);
        	writer.flush();
        	return null;
        }
    }  
    
}

 

博主建议用第二种方式来统一处理异常,第一种方式会比较乱

 

 

  • 大小: 72.9 KB
1
0
分享到:
评论

相关推荐

    springmvc+spring线程池处理http并发请求数据同步控制问题

    3. 异常处理:对线程池中的异常进行捕获和处理,防止异常导致整个应用崩溃。 4. 监控和调优:通过Spring Boot Actuator等监控工具,实时查看线程池状态,根据实际运行情况调整配置。 总结,使用Spring MVC和Spring...

    利用springmvc切面捕获全局异常入库源码

    总结来说,"利用SpringMVC切面捕获全局异常入库源码"项目展示了如何使用Spring AOP来替代传统的`HandlerExceptionResolver`实现全局异常处理。通过创建自定义切面和后置通知,可以捕获任何未被特定控制器方法处理的...

    springmvc学习笔记-前端控制器、上传、异常、开发心得小结等.zip

    本学习笔记将涵盖前端控制器、文件上传、异常处理以及开发过程中的心得小结。 1. **前端控制器(DispatcherServlet)** 前端控制器是SpringMVC的核心组件,负责接收所有HTTP请求,然后根据请求的类型和映射规则...

    SpringMVC demo 完整源码实例下载

    总结来说,这个SpringMVC demo涵盖了SpringMVC的基本用法和高级特性,是一个很好的学习和实践平台。通过分析和运行这个示例,你将能更深入地理解和掌握SpringMVC框架的各个方面,包括但不限于模型绑定、数据验证、...

    手写简易版SpringMVC,探索SpringMVC原理

    此外,这也将帮助我们更好地理解SpringMVC中的一些高级特性,如拦截器、AOP(面向切面编程)、数据绑定和异常处理。 手写简易版SpringMVC的过程会涉及到对HTTP协议的理解、Servlet API的使用,以及MVC模式的实践。...

    SpringMVC的知识点总结共7页.pdf.zip

    9. **异常处理**:通过`@ExceptionHandler`注解,可以指定控制器处理特定的异常,也可以全局配置异常处理器。 10. **RESTful风格**:SpringMVC支持创建RESTful API,通过HTTP动词(GET、POST、PUT、DELETE)和URI...

    SpringMVC&&GraphQL

    4. **异常处理**:SpringMVC提供了一套完整的异常处理机制,可以统一处理应用程序中的异常。 5. **数据绑定与验证**:SpringMVC支持自动将请求参数绑定到Java对象,并进行数据验证。 **GraphQL** GraphQL是由...

    SpringMVC项目

    - **异常处理**:统一的异常处理机制,提高代码可维护性。 - **RESTful 支持**:通过注解轻松创建 RESTful API。 **总结** SpringMVC 项目是一个很好的起点,它帮助初学者理解 MVC 设计模式以及 SpringMVC 框架的...

    SpringMVC4零配置

    8. **异常处理** 可以通过`@ExceptionHandler`注解在控制器中处理特定的异常,或者全局处理所有未被捕获的异常。此外,还可以定义`ErrorController`来处理错误页面。 9. **国际化支持** SpringMVC提供了一套完整...

    Spring MVC总结(一)

    5. ExceptionHandler:负责处理应用程序中的异常。 DispatcherServlet配置 DispatcherServlet是Spring MVC的核心组件,负责处理所有的HTTP请求。配置DispatcherServlet需要两步: 1. 配置servlet:提供一个或多个...

    springmvc_mybatis1110

    它简化了Web应用的开发,通过DispatcherServlet进行请求分发,HandlerMapping处理映射,ModelAndView构建模型和视图,ViewResolver解析视图,以及一系列拦截器和异常处理器。 1. 请求处理流程:客户端发起请求到达...

    SpringMVC学习笔记.zip

    六、SpringMVC异常处理 SpringMVC提供了全局和局部异常处理器,可以自定义错误页面或者返回JSON数据,以优雅地处理程序中的异常情况。 七、SpringMVC与Mybatis集成 Mybatis是一个轻量级的持久层框架,与SpringMVC...

    SpringMvc框架

    - **声明式异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,实现全局异常处理。 - **数据绑定**:自动将请求参数绑定到控制器方法的参数上。 - **类型转换和格式化**:支持自定义类型转换器和格式化...

    使用SpringMVC导入导出excel

    在IT行业中,SpringMVC是Java企业级应用开发中广泛使用的Web框架...此外,为了确保兼容性和可维护性,应遵循良好的编程实践,如使用模板引擎生成Excel,避免硬编码,以及使用异常处理机制来捕获和处理可能出现的问题。

    百度Ueditor整合springMVC+hibernate完整demo

    3. 错误处理:添加适当的异常处理机制,防止因网络、数据库等问题导致的程序崩溃。 总结,这个DEMO展示了如何将百度UEditor、SpringMVC和Hibernate整合,为开发者提供了一个快速构建富文本编辑功能的参考模板。通过...

    java springmvc数据库jar包

    - **异常处理**:配置全局异常处理器,统一处理可能出现的异常,提高用户体验。 - **安全性**:集成Spring Security或其他安全框架,保护应用程序免受攻击。 - **性能优化**:合理设置JDBC连接池大小,避免过多的...

    基于springmvc框架,搭建

    在实际项目中,我们还需要考虑异常处理、安全控制(如Spring Security)、缓存管理(如Spring Cache)等方面。这些都可以通过SpringMVC提供的扩展点进行配置和实现。 总结起来,SpringMVC框架提供了强大的MVC架构...

    SpringMVC中文教程

    2. **Spring MVC**:SpringMVC提供了强大的功能,如异常处理、文件上传、表单验证等。 3. **Spring MVC指南**:详细介绍了如何配置和使用SpringMVC的各种特性。 4. **基于模板的视图解析**:使用模板引擎(如...

    SpringMVC教学视频(包括整合spring和mybatis)网盘

    5. **异常处理**:编写全局异常处理类来统一处理程序中的异常情况。 #### 六、SpringMVC 与其他框架整合 1. **整合Spring**: - 在Spring配置文件中配置SpringMVC所需的Bean。 - 使用@Autowired注解自动装配Bean...

Global site tag (gtag.js) - Google Analytics