`
snoopy7713
  • 浏览: 1148803 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

深入理解Spring MVC 3(三)

阅读更多

十二、如何把全局异常记录到日志中?

在 前的配置中,其中有一个属性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写单元测试的,再在不同了,方便了,所以一定要写。

 

 JUnitActionBase类是所有JUnit的测试类的父类

 

Java代码  收藏代码
  1. package test;    
  2. import javax.servlet.http.HttpServletRequest;    
  3. import javax.servlet.http.HttpServletResponse;    
  4. import org.junit.BeforeClass;    
  5. import org.springframework.mock.web.MockServletContext;    
  6. import org.springframework.web.context.WebApplicationContext;    
  7. import org.springframework.web.context.support.XmlWebApplicationContext;    
  8. import org.springframework.web.servlet.HandlerAdapter;    
  9. import org.springframework.web.servlet.HandlerExecutionChain;    
  10. import org.springframework.web.servlet.HandlerMapping;    
  11. import org.springframework.web.servlet.ModelAndView;    
  12. import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;    
  13. import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;    
  14. /**   
  15. * 说明: JUnit测试action时使用的基类  
  16. *   
  17. * @author  赵磊  
  18. * @version 创建时间:2011-2-2 下午10:27:03    
  19. */     
  20. public class JUnitActionBase {    
  21.     private static HandlerMapping handlerMapping;    
  22.     private static HandlerAdapter handlerAdapter;    
  23.     /**  
  24.      * 读取spring3 MVC配置文件  
  25.      */    
  26.     @BeforeClass    
  27.  public static void setUp() {    
  28.         if (handlerMapping == null) {    
  29.             String[] configs = { "file:src/springConfig/springMVC.xml" };    
  30.             XmlWebApplicationContext context = new XmlWebApplicationContext();    
  31.             context.setConfigLocations(configs);    
  32.             MockServletContext msc = new MockServletContext();    
  33.             context.setServletContext(msc);         context.refresh();    
  34.             msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);    
  35.             handlerMapping = (HandlerMapping) context    
  36.                     .getBean(DefaultAnnotationHandlerMapping.class);    
  37.             handlerAdapter = (HandlerAdapter) context.getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);       
  38.         }    
  39.     }    
  40.     
  41.     /**  
  42.      * 执行request对象请求的action  
  43.      *   
  44.      * @param request  
  45.      * @param response  
  46.      * @return  
  47.      * @throws Exception  
  48.      */    
  49.     public ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response)    
  50.  throws Exception {    
  51.         HandlerExecutionChain chain = handlerMapping.getHandler(request);    
  52.         final ModelAndView model = handlerAdapter.handle(request, response,    
  53.                 chain.getHandler());    
  54.         return model;    
  55.     }    
  56. }    

 

这是个JUnit测试类,我们可以new Request对象,来参与测试,太方便了。给request指定访问的URL,就可以请求目标Action了。

  1. package test.com.app.user;  
  2. import org.junit.Assert;  
  3. import org.junit.Test;  
  4. import org.springframework.mock.web.MockHttpServletRequest;  
  5. import org.springframework.mock.web.MockHttpServletResponse;  
  6. import org.springframework.web.servlet.ModelAndView;  
  7.   
  8. import test.JUnitActionBase;  
  9.   
  10. /**  
  11. * 说明: 测试OrderAction的例子 
  12.  
  13. * @author  赵磊  
  14. * @version 创建时间:2011-2-2 下午10:26:55   
  15. */   
  16.   
  17. public class TestOrderAction extends JUnitActionBase {  
  18.     @Test  
  19.     public void testAdd() throws Exception {  
  20.     MockHttpServletRequest request = new MockHttpServletRequest();  
  21.         MockHttpServletResponse response = new MockHttpServletResponse();  
  22.         request.setRequestURI("/order/add");  
  23.         request.addParameter("id""1002");  
  24.         request.addParameter("date""2010-12-30");  
  25.         request.setMethod("POST");  
  26.         // 执行URI对应的action  
  27.         final ModelAndView mav = this.excuteAction(request, response);  
  28.         // Assert logic  
  29.         Assert.assertEquals("order/add", mav.getViewName());  
  30.         String msg=(String)request.getAttribute("msg");  
  31.         System.out.println(msg);  
  32.     }  
  33. }  

 

需要说明一下 :由于当前最想版本的 Spring(Test) 3.0.5还不支持@ContextConfiguration的注解式context file注入,所以还需要写个setUp处理下,否则类似于Tiles的加载过程会有错误,因为没有ServletContext。3.1的版本应该有更 好的解决方案,参见: https://jira.springsource.org/browse/SPR-5243 

参考 :http://www.iteye.com/topic/828513

 

十四、转发与重定向

可以通过redirect/forward:url方式转到另一个Action进行连续的处理。

可以通过redirect:url 防止表单重复提交 

写法如下:

return "forward:/order/add";

return "redirect:/index.jsp";

 

 

 

 

 十五、处理ajax请求

 

1、引入下面两个jar包,我用的是1.7.2,好像1.4.2版本以上都可以,下载地址: http://wiki.fasterxml.com/JacksonDownload

jackson-core-asl-1.7.2.jar 

jackson-mapper-asl-1.7.2.jar

 

2、spring的配置文件中要有这一行,才能使用到spring内置支持的json转换。如果你手工把POJO转成json就可以不须要使用spring内置支持的json转换。

<mvc:annotation-driven />

 

3、使用@ResponseBody注解

Java代码  收藏代码
  1. /**  
  2.  * ajax测试  
  3. * http://127.0.0.1/mvc/order/ajax  
  4.  */    
  5.     
  6. @RequestMapping("/ajax")    
  7. @ResponseBody    
  8. public Object ajax(HttpServletRequest request){    
  9.     List<String> list=new ArrayList<String>();    
  10.     list.add("电视");    
  11. nbsp;       list.add("洗衣机");    
  12.     list.add("冰箱");    
  13.     list.add("电脑");    
  14.     list.add("汽车");    
  15.     list.add("空调");    
  16.     list.add("自行车");    
  17.     list.add("饮水机");    
  18.     list.add("热水器");    
  19.     return list;    
  20. }    

 

分享到:
评论

相关推荐

    springmvc深入解析.pdf

    Spring MVC深入解析 Spring MVC是一个基于模型-视图-控制器(MVC)模式的Web应用程序框架,是Spring Framework的一部分。它提供了一个灵活的方式来构建Web应用程序,使得开发者可以轻松地创建复杂的Web应用程序。 ...

    Spring MVC源码深度剖析开源架构源码2021.pdf

    首先,要理解Spring MVC是如何启动和配置的。在web.xml文件中配置了DispatcherServlet,这是Spring MVC的前端控制器,负责接收所有请求并将其分发给相应的处理程序。从提供的部分内容中,我们看到了如下配置: ```...

    Spring MVC jar包

    在`hibernate3.6.8.chm`文件中,可能包含了Hibernate 3.6.8的官方文档,对于深入理解Hibernate的工作原理和API使用非常有帮助。而`spring-framework-2.5.6-with-docs.zip`可能包含了Spring 2.5.6的源码和文档,帮助...

    看透SpringMVC源代码分析与实践(扫描版)

    通过本书,你将:  系统学习网站的各种架构以及每种架构所针对的... 深入理解Spring MVC的编程技巧和设计理念,提高综合思考、整体架构的能力。  学习作者自研的源代码分析方法——器用分析法,高效学习程序源代码。

    Mastering Spring MVC 3中文版

    通过阅读和运行这个项目,你可以更直观地理解Spring MVC的工作流程,包括请求处理、视图渲染等关键环节。 工具方面,IDEA、Eclipse等集成开发环境提供了丰富的Spring MVC支持,如代码提示、自动配置、调试等,极大...

    Spring MVC 教程快速入门 深入分析

    十三、如何给Spring3 MVC中的Action做JUnit单元测试:说明了如何对Spring MVC中的控制器进行单元测试,包括配置测试环境和编写测试代码。 十四、Spring MVC转发与重定向:详细讲解了在Spring MVC中如何使用转发和...

    spring mvc 3_demo

    Spring MVC是Spring框架的一个核心...这个"Spring MVC 3_demo"项目是学习和理解Spring MVC 3中注解驱动开发的绝佳起点。通过实践这些概念,你可以更深入地了解Spring MVC如何处理Web请求,并有效地构建Web应用程序。

    最全最经典spring-mvc教程

    Spring MVC 是一款强大的Java Web开发...对于想要深入理解和使用Spring MVC的开发者来说,这是一份非常宝贵的资源。通过学习这个教程,你可以提高你的Web开发技能,更好地利用Spring MVC来构建高质量的Java Web应用。

    Spring MVC使用Demo

    这个"Spring MVC使用Demo"提供了实践操作,帮助开发者深入理解Spring MVC的开发环境配置、注解的使用以及工作原理。 首先,Spring MVC的设计模式基于Model-View-Controller(MVC),它将应用程序的业务逻辑、数据和...

    Spring MVC 4.2.3

    Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够...在实际工作中,深入理解和熟练掌握Spring MVC,将对提升开发效率和应用质量起到关键作用。

    Mastering Spring MVC 4(2015.09)源码

    在这个"Mastering Spring MVC 4(2015.09)源码"中,我们可以深入理解这个框架的核心概念和实际应用。 首先,Spring MVC 4基于Servlet 3.0规范,这意味着它可以利用异步处理能力,提高了Web应用的性能。通过Async...

    Spring3 MVC 深入研究

    《Spring3 MVC 深入研究》 Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本篇文章将深入探讨Spring3 MVC的核心概念、工作原理以及如何在实际项目中...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    这个教程“Spring MVC - A Tutorial”旨在帮助开发者深入理解和掌握Spring MVC的核心概念和技术。 首先,Spring MVC的核心设计理念是模型-视图-控制器(Model-View-Controller)架构模式。在该模式中,模型负责业务...

    spring3MVC 框架demo

    总结来说,"spring3MVC框架demo"是一个包含基础配置和实际功能的实例,它可以帮助开发者深入理解Spring3MVC的工作原理和使用方式。通过学习和实践这个案例,你可以更好地掌握Spring MVC在实际项目中的应用,提升你的...

    spring MVC简单示例

    这个"spring MVC简单示例"是为了帮助初学者理解Spring MVC的基本工作原理和配置,通过实践这个例子,你可以了解到如何创建一个简单的Controller、配置视图解析器并建立一个基本的请求处理流程。随着对Spring MVC的...

    Spring MVC 简单Demo

    Spring MVC 是一款基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的支持。这个"Spring MVC 简单Demo"旨在...随着对Spring MVC更深入的理解,开发者可以利用其强大的功能来构建复杂的Web应用程序。

    《精通Spring MVC 4》源码

    《精通Spring MVC 4》源码是一份宝贵的资源,它为开发者提供了深入理解Spring MVC这一流行Web框架的机会。Spring MVC是Spring框架的一部分,专门用于构建高效、可维护的Web应用程序。通过阅读和研究这些源码,我们...

Global site tag (gtag.js) - Google Analytics