在spring MVC的配置文件中:
<!-- 总错误处理-->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<value>/error/error</value>
</property>
<property name="defaultStatusCode">
<value>500</value>
</property>
<property name="warnLogCategory">
<value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>
</property>
</bean>
这里主要的类是SimpleMappingExceptionResolver类,和他的父类AbstractHandlerExceptionResolver类。
具体可以配置哪些属性,我是通过查看源码知道的。
你也可以实现HandlerExceptionResolver接口,写一个自己的异常处理程序。spring的扩展性是很好的。
通过SimpleMappingExceptionResolver我们可以将不同的异常映射到不同的jsp页面(通过exceptionMappings属性的配置)。
同时我们也可以为所有的异常指定一个默认的异常提示页面(通过defaultErrorView属性的配置),如果所抛出的异常在exceptionMappings中没有对应的映射,则Spring将用此默认配置显示异常信息。
注意这里配置的异常显示界面均仅包括主文件名,至于文件路径和后缀已经在viewResolver中指定。如/error/error表示/error/error.jsp
显示错误的jsp页面:
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ page import="java.lang.Exception"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>错误页面</title>
</head>
<body>
<h1>出错了</h1>
<%
Exception e = (Exception)request.getAttribute("exception");
out.print(e.getMessage());
%>
</body>
</html>
其中一句:request.getAttribute("exception"),key是exception,也是在SimpleMappingExceptionResolver类默认指定的,是可能通过配置文件修改这个值的,大家可以去看源码。
如何把全局异常记录到日志中?
在前的配置中,其中有一个属性warnLogCategory,值是“SimpleMappingExceptionResolver类的全限定名”。我是在SimpleMappingExceptionResolver类父类AbstractHandlerExceptionResolver类中找到这个属性的。查看源码后得知:如果warnLogCategory不为空,spring就会使用apache的org.apache.commons.logging.Log日志工具,记录这个异常,级别是warn。值:“org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”,是“SimpleMappingExceptionResolver类的全限定名”。这个值不是随便写的。 因为我在log4j的配置文件中还要加入log4j.logger.org.springframework.web.servlet.handler.SimpleMappingExceptionResolver=WARN,保证这个级别是warn的日志一定会被记录,即使log4j的根日志级别是ERROR。
如何给spring3 MVC中的Action做JUnit单元测试?
使用了spring3 MVC后,给action做单元测试变得很方便,我以前从来不给action写单元测试的,现在可以根据情况写一些了。 不用给每个Action都写单元测试吧,自己把握。
JUnitActionBase类是所有JUnit的测试类的父类
package test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.BeforeClass;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
/**
* 说明: JUnit测试action时使用的基类
*
*
*
*/
public class JUnitActionBase {
private static HandlerMapping handlerMapping;
private static HandlerAdapter handlerAdapter;
/**
* 读取spring3 MVC配置文件
*/
@BeforeClass
public static void setUp() {
if (handlerMapping == null) {
String[] configs = { "file:src/springConfig/springMVCxml" };
XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocations(configs);
MockServletContext msc = new MockServletContext();
context.setServletContext(msc); context.refresh();
msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
handlerMapping = (HandlerMapping) context
.getBean(DefaultAnnotationHandlerMapping.class);
handlerAdapter = (HandlerAdapter) context.getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);
}
}
/**
* 执行request对象请求的action
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response)
throws Exception {
HandlerExecutionChain chain = handlerMapping.getHandler(request);
final ModelAndView model = handlerAdapter.handle(request, response,
chain.getHandler());
return model;
}
}
这是个JUnit测试类,我们可以new Request对象,来参与测试,太方便了。给request指定访问的URL,就可以请求目标Action了。
package test.com.app.user;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import testJUnitActionBase;
/**
* 说明: 测试OrderAction的例子
*
*
*
*/
public class TestOrderAction extends JUnitActionBase {
@Test
public void testAdd() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.setServletPath("/order/add");
request.addParameter("id", "1002");
request.addParameter("date", "2010-12-30");
request.setMethod("POST");
// 执行URI对应的action
final ModelAndView mav = this.excuteAction(request, response);
// Assert logic
Assert.assertEquals("order/add", mav.getViewName());
String msg=(String)request.getAttribute("msg");
System.out.println(msg);
}
}
需要说明一下 :由于当前最想版本的Spring(Test) 3.0.5还不支持@ContextConfiguration的注解式context file注入,所以还需要写个setUp处理下,否则类似于Tiles的加载过程会有错误,因为没有ServletContext。3.1的版本应该有更好的解决方案。
# Spring
# MVC全局异常
# MVC
# 单元测试
# Java SpringMVC拦截器与异常处理机制详解分析
# Java SpringMVC 异常处理SimpleMappingExceptionResolver类
# Java SpringMVC异常处理机制详解
# Java 超详细讲解Spring MVC异常处理机制
# 配置文件
# 是在
# 我们可以
# 自己的
# 我是
# 就会
# 很好
# 会有
# 我在
# 一句
# 你也
# 还不
# 也可
# 错了
# 去看
# 不给
# 可以实现
# 这是个
# 可以根据
相关文章:
网站制作知乎推荐,想做自己的网站用什么工具比较好?
建站主机默认首页配置指南:核心功能与访问路径优化
如何快速搭建安全的FTP站点?
网站制作免费,什么网站能看正片电影?
高端建站如何打造兼具美学与转化的品牌官网?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何在宝塔面板中创建新站点?
如何基于云服务器快速搭建个人网站?
如何在万网开始建站?分步指南解析
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
模具网站制作流程,如何找模具客户?
上海网站制作开发公司,上海买房比较好的网站有哪些?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何通过可视化优化提升建站效果?
已有域名和空间如何搭建网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Python如何创建带属性的XML节点
,在苏州找工作,上哪个网站比较好?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
网站制作公司排行榜,抖音怎样做个人官方网站
魔毅自助建站系统:模板定制与SEO优化一键生成指南
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
网站企业制作流程,用什么语言做企业网站比较好?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
营销式网站制作方案,销售哪个网站招聘效果最好?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
黑客如何通过漏洞一步步攻陷网站服务器?
音乐网站服务器如何优化API响应速度?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何在云主机快速搭建网站站点?
,购物网站怎么盈利呢?
建站之星如何取消后台验证码生成?
如何在新浪SAE免费搭建个人博客?
如何快速搭建高效简练网站?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
,石家庄四十八中学官网?
如何用AWS免费套餐快速搭建高效网站?
如何用wdcp快速搭建高效网站?
如何通过虚拟主机空间快速建站?
建站三合一如何选?哪家性价比更高?
网站制作需要会哪些技术,建立一个网站要花费多少?
C#怎么创建控制台应用 C# Console App项目创建方法
如何制作算命网站,怎么注册算命网站?
广平建站公司哪家专业可靠?如何选择?
如何彻底删除建站之星生成的Banner?
*请认真填写需求信息,我们会在24小时内与您取得联系。