当前位置:小鱼儿玄机二站 > 关于计算机 > springmvc快捷入门,SpringMVC重临json数据的三种办法

springmvc快捷入门,SpringMVC重临json数据的三种办法

文章作者:关于计算机 上传时间:2019-09-03

Spring MVC属于SpringFrameWork的三番两次产品,已经融合在Spring Web Flow里面。Spring 框架提供了营造 Web 应用程序的专职能 MVC 模块。使用 Spring 可插入的 MVC架构,进而在动用Spring进行WEB开采时,能够选用选拔Spring的SpringMVC框架或集成别的MVC开辟框架,如Struts1,Struts2等。

 

1、第一种办法是spring2时期的产物,也便是种种json视图controller配置二个Jsoniew。

目录 

如:<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>

一、前言
二、spring mvc 主题类与接口
三、spring mvc 大旨流程图

或者<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

四、spring mvc DispatcherServlet说明

一样要用jackson的jar包。

五、spring mvc 父亲和儿子上下文的认证

2、第两种选用JSON工具将对象体系化成json,常用工具杰克逊,fastjson,gson。

六、springMVC-mvc.xml 配置文件片段批注 
七、spring mvc 如何访谈到静态的文件,如jpg,js,css

选拔HttpServletResponse,然后拿走response.getOutputStream()或response.getWriter()

八、spring mvc 央求什么映射到现实的Action中的方法

直接出口。

九、 spring mvc 中的拦截器:
十、 spring mvc 怎样行使拦截器

示例:

十一、 spring mvc 如何达成全局的要命管理

public class JsonUtil 
{ 
  private static Gson gson=new Gson(); 

  /** 
   * @MethodName : toJson 
   * @Description : 将对象转为JSON串,此方法能够满足大部分需求 
   * @param src 
   *      :将要被转化的对象 
   * @return :转化后的JSON串 
   */ 
  public static String toJson(Object src) { 
    if (src == null) { 
      return gson.toJson(JsonNull.INSTANCE); 
    } 
    return gson.toJson(src); 
  } 
} 

十二、 spring mvc 怎么样把全局拾贰分记录到日志中

3、第三种接纳spring mvc3的讲解@ResponseBody

十三、 怎么着给spring3 MVC中的Action做JUnit单元测量检验

例如:

十四、 spring mvc 转载与重定向 (带参数重定向)

@ResponseBody 
 @RequestMapping("/list") 
 public List<String> list(ModelMap modelMap) { 
  String hql = "select c from Clothing c "; 
  Page<Clothing> page = new Page<Clothing>(); 
  page.setPageSize(6); 
  page = clothingServiceImpl.queryForPageByHql(page, hql); 

  return page.getResult(); 
 }

十五、 spring mvc 处理ajax请求

然后使用spring mvc的默许配置就能够回去json了,不过须求jackson的jar包哦。

十六、 spring mvc 关于写多少个布局文件的表明 

瞩目:当springMVC-servlet.xml中动用<mvc:annotation-driven />时,如若是3.1事先已经默许注入AnnotationMethodHandlerAdapter,3.1以往暗中认可注入RequestMappingHandlerAdapter只需加上上边谈起的jar包就可以!

十七、 spring mvc 怎样得到Spring管理的bean

一旦是手动注入RequestMappingHandlerAdapter 能够如此设置

十八、 spring mvc 多视图调控器

配置如下:

十九、 <mvc:annotation-driven /> 到底做了哪些职业 

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" 
    p:ignoreDefaultModelOnRedirect="true" > 
      <property name="messageConverters"> 
        <list> 
          <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> 
        </list> 
      </property> 
    </bean> 

 

添加包

 

jackson-mapper-asl-*.jar
jackson-core-asl-*.jar

 

能够见到,使用方法进一步简单,技术员更加的傻,不精晓是好事,照旧坏事……

证实:本小编是小说的原创作者,转载请申明出处:本文地址:

上述内容是作者给我们享用的SpringMVC重临json数据的两种方式,希望我们快乐。

 

您或者感兴趣的篇章:

  • Spring MVC 框架搭建配置格局及详解
  • SpringMVC文件上传 多文件上传实例
  • SpringMVC+MyBatis注解式事务管理
  • Spring MVC中上传文书实例
  • SpringMVC之简单的增加和删除改查示例(SSM整合)
  • springMVC三种页面跳转模式小结
  • SpringMVC 拦截器不阻碍静态能源的三种管理格局方法
  • SpringMVC蒙受下促成的Ajax异步央求JSON格式数据
  • Spring MVC申明式开荒使用详解
  • Spring MVC温故而知新连串教程之从零伊始

 

 

一、前言:

为开垦公司选取一款不错的MVC框架是件难事儿,在众多低价的方案中决择要求异常高的经验和水准。你的七个调控会潜移默化团队今后的几年。要怀想地点太多:

1、简单易用,以狠抓开采效能。使小一些的肥力在框架上,超过52%的生命力放在职业上。

2、品质优异,那是多个最能吸引眼球的话题。

3、尽量使用大众的框架(制止采纳小众的、私有的框架),新招聘来的开辟人士有一对那上头技巧储存,减低人士流动再适应的震慑。

 

倘使你还在为那事件发愁,本文最符合您了。选取Spring MVC吧。

 

Spring MVC是日前最完美的MVC框架,自从Spring 2.5本子公布后,由于帮助注脚配置,易用性有了大幅度面包车型大巴增加。Spring 3.0尤其圆满,完毕了对Struts 2的超出。以后愈增加的支付组织选取了Spring MVC。

 

Struts2也是可怜理想的MVC构架,优点相当多比如能够的构造,拦截器的沉思,丰硕的意义。但此间想说的是毛病,Struts2出于采纳了值栈、OGNL表明式、struts2标签库等,会造成应用的质量减少,应防止使用那几个功用。而Struts2的多层拦截器、多实例action品质都很好。能够参考小编写的一篇有关Spring MVC与Struts2与Servlet比较的文章《Struts2、SpringMVC、Servlet(Jsp)质量相比较测量试验》

 

Spring3 MVC的优点:

1、Spring3 MVC使用简便,学习开销低。学习难度低于Struts2,Struts2用不上的剩下作用太多。呵呵,当然那不是调节因素。

2、Spring3 MVC很轻便就足以写出质量杰出的次序,Struts2要随地当心才方可写出质量卓绝的次第(指MVC部分)

3、Spring3 MVC的灵巧是你不能够想像的,Spring框架的增添性雅俗共赏,Spring3 MVC当然也不会掉队,不会因采纳了MVC框架而认为到有别的的限量。

 

Struts2的无数亮点:

1、老牌的头面框架,从Struts1起储存了大批量客户群众体育。本领文档丰富。

2、其余方面略...   (呵呵,是还是不是不公道?)

 

 

二、大旨类与接口:

 

先来询问一下,几个非常重要的接口与类。以后不精通他们是为啥的没什么,先混个脸熟,为后来认知她们打个基础。

 

DispatcherServlet   -- 前置调控器

图片 1

 

HandlerMapping接口 -- 管理恳求的映射

HandlerMapping接口的完成类:

SimpleUrlHandlerMapping  通过安排文件,把二个UTucsonL映射到Controller

DefaultAnnotationHandlerMapping  通过表明,把一个U陆风X8L映射到Controller类上

图片 2

 

HandlerAdapter接口 -- 管理央浼的照射

AnnotationMethodHandlerAdapter类,通过表明,把三个U索罗德L映射到Controller类的法子上

图片 3

 

Controller接口 -- 控制器

出于大家使用了@Controller注脚,增加了@Controller表明注脚的类就足以出任调控器(Action)的职责,

之所以大家并从未采用这么些接口。

图片 4

 

 

 

HandlerInterceptor 接口--拦截器

无图,大家友好达成那么些接口,来产生拦截的器的办事。

 

 

ViewResolver接口的兑现类

UrlBasedViewResolver类 通过配备文件,把一个视图名交给到三个View来拍卖

InternalResourceViewResolver类,比上边的类,参加了JSTL的支撑

图片 5

 

View接口

JstlView类

图片 6

 

LocalResolver接口

图片 7

 

HandlerExceptionResolver接口 --万分管理

SimpleMappingExceptionResolver实现类

图片 8

 

 

ModelAndView类

无图。

 

 

 

 

 

三、核心流程图

 

本图是自身个人画的,有不严慎的地点,大家对付看呢。总比没的看强。

图片 9

转载请申明出处:本文地址:

 

 

四、DispatcherServlet说明

 

使用Spring MVC,配置DispatcherServlet是率先步。

DispatcherServlet是二个Servlet,所以可以安插多少个DispatcherServlet。

DispatcherServlet是置于调整器,配置在web.xml文件中的。拦截相配的伸手,Servlet拦截相配准则要自已定义,把拦截下来的乞求,依附某某准绳分发到对象Controller(大家写的Action)来管理。

 

“某某准则”:是遵照你使用了哪个HandlerMapping接口的实现类的两样而分歧。

 

先来看率先个例证:

Xml代码  图片 10

  1. <web-app>  
  2.     <servlet>  
  3.         <servlet-name>example</servlet-name>  
  4.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.         <load-on-startup>1</load-on-startup>  
  6.     </servlet>  
  7.     <servlet-mapping>  
  8.         <servlet-name>example</servlet-name>  
  9.         <url-pattern>*.form</url-pattern>  
  10.     </servlet-mapping>  
  11. </web-app>  

 <load-on-startup>1</load-on-startup>是开发银行顺序,让那个Servlet随Servletp容器一齐运营。

 <url-pattern>*.form</url-pattern> 会拦截*.form结尾的诉求。

 

 <servlet-name>example</servlet-name>那几个Servlet的名字是example,能够有多少个DispatcherServlet,是透过名字来差异的。每三个DispatcherServlet有谈得来的WebApplicationContext上下文对象。同有的时候间保留的ServletContext卯月Request对象中,关于key,今后表达。

 

在DispatcherServlet的初叶化进程中,框架会在web应用的 WEB-INF文件夹下搜索名称叫[servlet-name]-servlet.xml 的配备文件,生成文书中定义的bean。

 

 

其次个例证:

Xml代码  图片 11

  1. <servlet>  
  2.     <servlet-name>springMVC</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>contextConfigLocation</param-name>  
  6.         <param-value>classpath*:/springMVC.xml</param-value>  
  7.     </init-param>  
  8.     <load-on-startup>1</load-on-startup>  
  9. </servlet>  
  10. <servlet-mapping>  
  11.     <servlet-name>springMVC</servlet-name>  
  12.     <url-pattern>/</url-pattern>  
  13. </servlet-mapping>  

指明了安顿文件的文本名,不行使暗许配置文件名,而选取springMVC.xml配置文件。

其中<param-value>**.xml</param-value> 这里能够利用三种写法
1、不写,使用暗许值:/WEB-INF/<servlet-name>-servlet.xml
2、<param-value>/WEB-INF/classes/springMVC.xml</param-value>
3、<param-value>classpath*:springMVC-mvc.xml</param-value>
4、多少个值用逗号分隔

 

Servlet拦截相称法规能够自已定义,拦截哪个种类UPRADOL合适? 
当映射为@RequestMapping("/user/add")时,为例:

1、拦截*.do、*.htm, 例如:/user/add.do

这是最古板的方法,最简便也最实用。不会促成静态文件(jpg,js,css)被阻碍。

 

2、拦截/,例如:/user/add

能够落成现在很火的REST风格。非常多网络类型的采用很欣赏这种作风的ULacrosseL。

弊病:会产生静态文件(jpg,js,css)被拦住后无法健康突显。想完结REST风格,事情正是劳碌一些。前边有消除办法还算简单。

 

3、拦截/*,那是贰个荒谬的章程,诉求能够走到Action中,但转到jsp时再也被阻碍,不能够访谈到jsp。

 

转发请表明出处:本文地址:

 

五、老爹和儿子上下文(WebApplicationContext)

 

假使您利用了listener监听器来加载配置,一般在Struts+Spring+Hibernate的品类中都以行使listener监听器的。如下

Java代码  图片 12

  1. <listener>   
  2.   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   
  3. </listener>   

 

 

Spring会成立贰个WebApplicationContext上下文,称为父上下文(父容器) ,保存在 ServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值。

能够运用Spring提供的工具类抽出上下文对象:WebApplicationContextUtils.getWebApplicationContext(ServletContext);

 

DispatcherServlet是叁个Servlet,能够而且安顿七个,各个DispatcherServlet有三个和睦的上下文对象(WebApplicationContext),称为子上下文(子容器),子上下文能够访谈父上下文中的内容,但父上下文不能访谈子上下文中的内容。 它也保留在 ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。当多少个Request对象产生时,会把那些子上下文对象(WebApplicationContext)保存在Request对象中,key是DispatcherServlet.class.getName()

  • ".CONTEXT"。

能够采用工具类抽取上下文对象:RequestContextUtils.getWebApplicationContext(request);

 

 

表明 :Spring 并未界定我们,必需运用父亲和儿子上下文。大家可以和谐说了算怎么着使用。

 

方案一,传统型:

父上下文容器中保留数据源、服务层、DAO层、事务的Bean。

子上下文容器中保存Mvc相关的Action的Bean.

专门的学问调整在服务层。

由于父上下文容器不能够访谈子上下文容器中剧情,事务的Bean在父上下文容器中,不也许访谈子上下文容器中内容,就不可能对子上下文容器中Action实行AOP(事务)。

本来,做为“古板型”方案,也从未供给那要做。

 

方案二,激进型:

Java世界的“面向接口编制程序”的沉思是不易的,但在增加和删除改查为主业务的连串里,Dao层接口,Dao层完成类,Service层接口,Service层完毕类,Action父类,Action。再加上众多的O(vopobo)和jsp页面。写多个小功效7、8个类就写出来了。 开荒者说本人不怕想接点私活儿,和PHP,ASP抢抢饭碗,但本身又是Java工程师。最佳的结果是大类型能做好,小品种能做快。所以“激进型”方案就出现了-----未有接口、未有Service层、还足以没有过多的O(vopobo)。那尚未Service层事务调整在哪一层?只可以上涨的Action层。

正文不想说那是或不是不错的研究,笔者想说的是Spring不会限制你如此做。

由于有了父亲和儿子上下文,你将无法完结这一指标。实施方案是只使用子上下文容器,不要父上下文容器 。所以数据源、服务层、DAO层、事务的Bean、Action的Bean都位于子上下文容器中。就足以兑现了,事务(评释事务)就平常工作了。那样才够激进。

小结:不接纳listener监听器来加载spring的安插文件,只使用DispatcherServlet来加载spring的布署,不要父亲和儿子上下文,只利用三个DispatcherServlet,事情就总结了,什么麻烦事儿也从不了。

 

 

 

Java--大项目能搞活--按古板艺术做,安安分分的做,好扩张,好维护。

Java--小项目能做快--按激进方式做,13日时间就可以出一个版本,先上线接受市集(客商)的举报,再改良,再举报,时间正是生命(花费)。

 

转发请评释出处:原著地址:

 

六、springMVC-mvc.xml 配置文件片段解说 (未利用暗中同意配置文件名)

 

Xml代码  图片 13

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns=""  
  4.     xmlns:xsi=""  
  5.     xmlns:tx=""  
  6.     xmlns:context=""    
  7.     xmlns:mvc=""    
  8.     xsi:schemaLocation="   
  9.        
  10.        
  11.       
  12.       
  13.       
  14.       
  15.     ;  
  16.   
  17.   
  18.     <!-- 自动扫描的包名 -->  
  19.     <context:component-scan base-package="com.app,com.core,JUnit4" ></context:component-scan>  
  20.       
  21.     <!-- 暗许的笺注映射的支撑 -->  
  22.     <mvc:annotation-driven />  
  23.       
  24.     <!-- 视图解释类 -->  
  25.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  26.         <property name="prefix" value="/WEB-INF/jsp/"/>  
  27.         <property name="suffix" value=".jsp"/><!--可为空,方便达成自已的依据扩大名来选取视图解释类的逻辑  -->  
  28.         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
  29.     </bean>  
  30.       
  31.     <!-- 拦截器 -->  
  32.     <mvc:interceptors>  
  33.         <bean class="com.core.mvc.MyInteceptor" />  
  34.     </mvc:interceptors>       
  35.       
  36.     <!-- 对静态能源文件的拜见  方案一 (二选一) -->  
  37.     <mvc:default-servlet-handler/>  
  38.       
  39.     <!-- 对静态财富文件的拜候  方案二 (二选一)-->  
  40.     <mvc:resources mapping="**" location="" cache-period="31556926"/>  
  41.     <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>  
  42.     <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/>  
  43.   
  44. </beans>   

 

<context:component-scan/> 扫描钦定的包中的类上的讲解,常用的讲解有:

@Controller 声明Action组件
@Service    声明Service组件    @Service("myMovieLister") 
@Repository 声明Dao组件
@Component   泛指组件, 当不佳归类时. 
@RequestMapping("/menu")  诉求映射
@Resource  用于注入,( j2ee提供的 ) 默许按名称装配,@Resource(name="beanName") 
@Autowired 用于注入,(srping提供的) 暗许按类型装配 
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype")   设定bean的功用域

 

<mvc:annotation-driven /> 是一种简写方式,完全能够手动配置代替这种简写情势,简写格局得以让初学都麻Lyly用私下认可配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 多个bean,是spring MVC为@Controllers分发需要所必需的。
并提供了:数据绑定协助,@NumberFormatannotation帮助,@DateTimeFormat援救,@Valid援救,读写XML的支撑(JAXB),读写JSON的支撑(杰克逊)。
末尾,咱们管理响应ajax诉求时,就使用到了对json的帮衬。
前面,对action写JUnit单元测量试验时,要从spring IOC容器中取DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 多个bean,来产生测验,取的时候要了然是<mvc:annotation-driven />这一句注册的那四个bean。

什么样替换 <mvc:annotation-driven />?他毕竟做了怎么样专门的学问,请看,最后边的 十九节 <mvc:annotation-driven /> 到底做了什么样职业。

 

<mvc:interceptors/> 是一种简写方式。通过看前边的大图,知道,大家能够安顿多少个HandlerMapping。<mvc:interceptors/>会为每三个HandlerMapping,注入叁个拦截器。其实大家也足以手动配置为各种HandlerMapping注入多少个拦截器。

 

<mvc:default-servlet-handler/> 使用暗许的Servlet来响应静态文件。

 

<mvc:resources mapping="**" location="" cache-period="31556926"/> 匹配URL  **  的U本田UR-VL被看成静态能源,由Spring读出到内部存款和储蓄器中再响应http。

转发请表明出处:本文地址:

 
七、怎么着访谈到静态的文书,如jpg,js,css?

 

 

怎么样你的DispatcherServlet拦截"*.do"那样的有后缀的UHighlanderL,就不设有访问不到静态能源的难点。

设若您的DispatcherServlet拦截"/",为了促成REST风格,拦截了具有的伸手,那么与此同不常间对*.js,*.jpg等静态文件的寻访也就被阻挡了。

笔者们要解决这一个主题材料。

 

指标:能够健康访谈静态文件,无法找不到静态文件报404。

 
方案一:激活汤姆cat的defaultServlet来管理静态文件

Xml代码  图片 14

  1. <servlet-mapping>   
  2.     <servlet-name>default</servlet-name>  
  3.     <url-pattern>*.jpg</url-pattern>     
  4. </servlet-mapping>    
  5. <servlet-mapping>       
  6.     <servlet-name>default</servlet-name>    
  7.     <url-pattern>*.js</url-pattern>    
  8. </servlet-mapping>    
  9. <servlet-mapping>        
  10.     <servlet-name>default</servlet-name>       
  11.     <url-pattern>*.css</url-pattern>      
  12. </servlet-mapping>    
  13. 要铺排四个,每一个文件配置叁个   

要写在DispatcherServlet的前头, 让 defaultServlet先阻止诉求,那样诉求就不会进来Spring了,作者想品质是最佳的呢。

 

Tomcat, Jetty, JBoss, and GlassFish 自带的私下认可Servlet的名字 -- "default"
Google App Engine 自带的 默认Servlet的名字 -- "_ah_default"
Resin 自带的 默认Servlet的名字 -- "resin-file"
WebLogic 自带的 默认Servlet的名字  -- "FileServlet"
WebSphere  自带的 默认Servlet的名字 -- "SimpleFileServlet" 

 

 

方案二: 在spring3.0.4今后版本提供了mvc:resources ,  使用情势:

Xml代码  图片 15

  1. <!-- 对静态资源文件的拜谒 -->    
  2. <mvc:resources mapping="**" location="" />  

  
**辉映到ResourceHttpRequestHandler进行拍卖,location钦定静态财富的地点.能够是web application根目录下、jar包里面,那样能够把静态能源收缩到jar包中。cache-period 能够使得静态能源扩充web cache 
 
万一出现下边包车型地铁荒谬,大概是一向不陈设<mvc:annotation-driven />的缘由。 
报错WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'

 

使用<mvc:resources/>元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,
key为mapping的URI pattern值,而value为ResourceHttpRequestHandler,
那般就高明的把对静态能源的探望由HandlerMapping转到ResourceHttpRequestHandler管理并重返,所以就协理classpath目录,jar包内静态财富的访谈.
别的部须求要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler.因为对static uri的defaultHandler正是ResourceHttpRequestHandler,
不然不能管理static resources request.

 

 

方案三 ,使用<mvc:default-servlet-handler/>

Xml代码  图片 16

  1. <mvc:default-servlet-handler/>  

 

会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态财富的拜望由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler管理并重返.
DefaultServletHttpRequestHandler使用便是逐条Servlet容器本人的暗中认可Servlet.

 

 

填补表明:多少个HandlerMapping的推行顺序难点:

DefaultAnnotationHandlerMapping的order属性值是:0

<mvc:resources/ >自动注册的 SimpleUrlHandlerMapping的order属性值是: 2147483646

 

<mvc:default-servlet-handler/>自动注册 的SimpleUrlHandlerMapping 的order属性值是: 2147483647

 

 

spring会先实践order值比很小的。当访谈三个a.jpg图片文件时,先经过 DefaultAnnotationHandlerMapping 来找管理器,一定是找不到的,因为我们平昔不叫a.jpg的Action。然后再按order值升序找,由于最终叁个SimpleUrlHandlerMapping 是相配"/**"的,所以毋庸置疑会合营上,就能够响应图片。

 

 

访谈三个图形,还要走层层相称。不知品质怎样?

谈到底再作证一下,方案二、方案三 在会见静态财富时,假诺有非常的(近似)总拦截器,就能够走拦截器。假令你在阻止中落实权力检查,要注意过滤这一个对静态文件的恳求。

何以你的DispatcherServlet拦截 *.do那样的U安德拉L后缀,就不存上述难题了。仍旧有后缀方便。

 

转发请注脚出处:原来的文章地址:

 

八、央浼什么映射到实际的Action中的方法? 方案一:基于xml配置映射,能够利用SimpleUrlHandlerMapping、BeanNameUrlHandlerMapping进行Url映射和阻碍央求。
布局情势略。
 
方案二:基于申明映射,可以使用DefaultAnnotationHandlerMapping。

Xml代码  图片 17

  1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  </bean>   

 

但日前我们配备了<mvc:annotation-driven />,他会自动注册这几个bean,就不须要大家来得的注册这么些bean了。  

如何替换 <mvc:annotation-driven />?他到底做了如何专门的学业,请看,最前边的 十九节 <mvc:annotation-driven /> 到底做了怎么职业。

 

 
如上都得以注入interceptors,达成权力决定等前置专门的职业。
咱俩选择第2种,基于注明来采纳spring MVC

 

 

 并在action类上运用:
@Controller
@RequestMapping("/user")

转发请注脚出处:原著地址: 
 
 
九、Spring中的拦截器: Spring为大家提供了:
org.springframework.web.servlet.HandlerInterceptor接口,

org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器,
福如东海那一个接口或持续此类,能够特别有利的完结和煦的拦截器。
 
有以下多少个措施:
 
Action在此以前实施:
 public boolean preHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler);
 
扭转视图在此以前实行
 public void postHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler,
   ModelAndView modelAndView);
 
最后试行,可用于释放财富
 public void afterCompletion(HttpServletRequest request,
   HttpServletResponse response, Object handler, Exception ex)
 
 
各自达成预管理、后管理(调用了Service并赶回ModelAndView,但未开展页面渲染)、重临处理(已经渲染了页面) 
在preHandle中,能够展开编码、安控等处理; 
在postHandle中,有空子修改ModelAndView; 
在afterCompletion中,能够根据ex是还是不是为null判定是不是产生了十三分,举办日志记录。 
参数中的Object handler是下一个拦截器。
转发请表明出处:原作地址:

十、怎么样使用拦截器? 自定义三个拦截器,要贯彻HandlerInterceptor接口:

Java代码  图片 18

  1. public class MyInteceptor implements HandlerInterceptor {     
  2.     略。。。  
  3. }    

 

Spring MVC并不曾总的拦截器,不能够对具有的乞请进行前后拦截。
Spring MVC的拦截器,是属于HandlerMapping级其余,能够有七个HandlerMapping ,各种HandlerMapping能够有和好的拦截器。
当三个伸手按Order值从小到大,顺序推行HandlerMapping接口的落到实处类时,哪三个先有再次来到,那就能够了结了,前边的HandlerMapping就不走了,本道工序就到位了。就转到下一道工序了。
拦截器会在什么日期实行呢? 贰个央求提交多少个HandlerMapping时,那些HandlerMapping先找有未有计算机来管理那些央浼,怎么着找到了,就施行拦截器,施行完拦截后,交给目的Computer。
借使未有找到计算机,那么那些拦截器就不会被施行。

 

在spring MVC的配备文件中布局有二种艺术:

方案一,(近似)总拦截器,拦截全部url

Java代码  图片 19

  1.    <mvc:interceptors>  
  2.     <bean class="com.app.mvc.MyInteceptor" />  
  3. </mvc:interceptors>  

怎么叫“近似”,前边说了,Spring未有总的拦截器。

<mvc:interceptors/>会为每多个HandlerMapping,注入贰个拦截器。总有四个HandlerMapping是能够找到Computer的,最多也只找到三个管理器,所以这些拦截器总会被实施的。起到了总拦截器的效率。

如若是REST风格的ULX570L,静态资源也会被阻止。

 

 
方案二, (近似) 总拦截器, 拦截相配的U奥德赛L。

Xml代码  图片 20

  1. <mvc:interceptors >    
  2.   <mvc:interceptor>    
  3.         <mvc:mapping path="/user/*" /> <!-- /user/*  -->    
  4.         <bean class="com.mvc.MyInteceptor"></bean>    
  5.     </mvc:interceptor>    
  6. </mvc:interceptors>    

正是比 方案一多了多个U奔驰G级L相称。

假即使REST风格的U奥迪Q5L,静态财富也会被拦截。

 

 

 

方案三,HandlerMappint上的拦截器。

如若是REST风格的U奇骏L,静态能源就不会被阻挡。因为大家精准的流入了拦截器。

Xml代码  图片 21

  1. <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">       
  2.  <property name="interceptors">       
  3.      <list>       
  4.          <bean class="com.mvc.MyInteceptor"></bean>      
  5.      </list>       
  6.  </property>       
  7. </bean>   

  借使使用了<mvc:annotation-driven />, 它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter 那多少个bean,所以就从不机缘再给它注入interceptors属性,就不能够钦赐拦截器。

道理当然是那样的大家得以因这个人工配置方面包车型大巴三个Bean,不采纳 <mvc:annotation-driven />,就足以 给interceptors属性 注入拦截器了。

 

实在本人也不提出接纳 <mvc:annotation-driven />,而建议手动写详细的配置文件,来代替 <mvc:annotation-driven />,那就调节力就强了。

如何替换 <mvc:annotation-driven />?他到底做了怎样专业,请看,最终边的 十九节 <mvc:annotation-driven /> 到底做了哪些专门的学业。

转发请表明出处:原来的文章地址:

 

 

 

十一、怎么着兑现全局的不行管理?

在spring MVC的布局文件中:

Xml代码  图片 22

  1. <!-- 总错误管理-->  
  2. <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
  3.     <property name="defaultErrorView">    
  4.         <value>/error/error</value>  
  5.     </property>  
  6.     <property name="defaultStatusCode">    
  7.         <value>500</value>  
  8.     </property>     
  9. <property name="warnLogCategory">    
  10.         <value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>  
  11.     </property>     
  12. </bean>   

 

此间首要的类是SimpleMappingExceptionResolver类,和她的父类AbstractHandlerExceptionResolver类。

切实能够陈设如何属性,作者是通过查看源码知道的。

您也足以实现HandlerExceptionResolver接口,写贰个自个儿的不得了管理程序。spring的扩展性是很好的。

 

 

通过SimpleMappingExceptionResolver我们得以将分化的拾叁分映射到差异的jsp页面(通过exceptionMappings属性的安插)。

 

同不时候大家也得以为具有的那多少个钦点贰个暗中同意的要命提醒页面(通过defaultErrorView属性的布置),假诺所抛出的不行在exceptionMappings中一直不对应的照耀,则Spring将用此默许配置展现万分消息。

小心这里配置的特别彰显分界面均仅包涵主文件名,至于文件路径和后缀已经在viewResolver中钦赐。如/error/error表示/error/error.jsp

 

 

体现错误的jsp页面:

Html代码  图片 23

  1. <%@ page language="java" contentType="text/html; charset=GBK"  
  2.     pageEncoding="GBK"%>  
  3. <%@ page import="java.lang.Exception"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ";  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=GBK">  
  8. <title>错误页面</title>  
  9. </head>  
  10. <body>  
  11. <h1>出错了</h1>  
  12. <%  
  13. Exception e = (Exception)request.getAttribute("exception");  
  14. out.print(e.getMessage());  
  15. %>  
  16. </body>  
  17. </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=WAENVISIONN,有限辅助那么些等级是warn的日志一定会被记录,即便log4j的根日志品级是EOdysseyRO悍马H2。

转发请表明出处:最先的文章地址:

 

 

 

 十三、怎么样给spring3 MVC中的Action做JUnit单元测量试验?

 使用了spring3 MVC后,给action做单元测量试验变得非常低价,小编在此此前并未有给action写单元测验的,现在得以依据情状写一些了。

 不用给各种Action都写单元测验吧,本身把握吧。

 

 JUnitActionBase类是富有JUnit的测量试验类的父类

 

Java代码  图片 24

  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 创立时间:二〇一一-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内定访问的U纳瓦拉L,就足以乞请指标Action了。

 

Java代码  图片 25

  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 创立时间:贰零壹叁-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.setServletPath("/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 。

参考 :

 

 

 

 

 十四、转载与重定向

能够因此redirect/forward:url情势转到另叁个Action实行连接的拍卖。

能够由此redirect:url 幸免表单重复提交 。

写法如下:

return "forward:/order/add";

return "redirect:/index.jsp";

转发请评释出处:最早的作品地址:

 

 

带参数重定向--RedirectAttributes

客商保存或改造后,为了以免客商刷新浏览器(F5)导致表单重复提交,一般在保留或修改操作之后会redirect到三个结果页面(不是forward),同一时候指引参数,如操作成功的提醒新闻。因为是Redirect,Request里的attribute不会传送过去。Spring在3.1才提供了这么些本领--RedirectAttributes。 一再按F5,操作成功的提醒音信也不会另行出来(总共只现出一回),效果很巧妙。

 

Java代码  图片 26

  1. public String save(@ModelAttribute("group") Group group, RedirectAttributes redirectAttributes) {  
  2.     accountManager.saveGroup(group);  
  3.     redirectAttributes.addFlashAttribute("message", "操作成功");  
  4.     return "redirect:/account/group/";  
  5. }  

 

 

 

 十五、处理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代码  图片 27

  1. /** 
  2.  * ajax测试 
  3. *  
  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. }  

 

转发请评释出处:原来的书文地址:

 

 

 

十六、关于写多少个布局文件的认证 

本身见状局地人把布置文件写两份:
贰个是原本的applicationContext.xml,那几个文件从spring2.0-2.5时直接在动用。
别一个是新加的spring MVC的配置文件。
实际上那四个文件是能够写成贰个文书的,springMVC相关的布局,数据源,事务相关布署能够都写再二个布署文件中。
本例子中只行使了一个spring配置文件叫“springMVC.xml”。
就毫无再多配置三个applicationContext.xml文件了。
web.xml文件中也决不再铺排org.springframework.web.context.ContextLoaderListener的listener了。
写四个布局文件一般就能够产生扫描四遍,一定要正确调节扫描的包名,做到不另行扫描。

写七个布局文件还现出事务不佳使的风貌,是当把@Transactional写有Action层时出现的。

是因为父亲和儿子上下文的缘由,请参照他事他说加以考察前的 第五节 父亲和儿子上下文,里面有表明。原因是父上下文无法访谈子上下文。

 

 

 

十七、怎样获得Spring管理的bean (请用第3种方法)
1、servlet格局加载时,
【web.xml】

Xml代码  图片 28

  1. <servlet>  
  2. <servlet-name>springMVC</servlet-name>  
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4. <init-param>  
  5. <param-name>contextConfigLocation</param-name>  
  6. <param-value>classpath*:/springMVC.xml</param-value>  
  7. </init-param>  
  8. <load-on-startup>1</load-on-startup>  
  9. </servlet>  

 spring容器放在ServletContext中的key是org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC
留神后边的springMVC,是您的servlet-name配置的值,注意适时修改。

Java代码  图片 29

  1. ServletContext sc=略  
  2. WebApplicationContext attr = (WebApplicationContext)sc.getAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.springMVC");  

 

2、listener格局加载时:
【web.xml】

Xml代码  图片 30

  1. <context-param>  
  2.   <param-name>contextConfigLocation</param-name>  
  3.   <param-value>/WEB-INF/applicationContext</param-value>  
  4. </context-param>  
  5.   
  6. <listener>  
  7.   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  8. </listener>  

 【jsp/servlet】能够这么获得

Java代码  图片 31

  1. ServletContext context = getServletContext();  
  2. WebApplicationContext applicationContext  = WebApplicationContextUtils .getWebApplicationContext(context);   

 

3、通用的主意来了,神器啊,前的  1、2二种情势并不通用,能够放弃了。
在布局文件中步向:

Xml代码  图片 32

  1. <!-- 用于全部ApplicationContext,能够应用SpringContextHolder.getBean('xxxx')的静态方法获得spring bean对象 -->  
  2. <bean class="com.xxxxx.SpringContextHolder" lazy-init="false" />  

 

Java代码  图片 33

  1. import org.springframework.context.ApplicationContext;  
  2. import org.springframework.context.ApplicationContextAware;  
  3. /** 
  4.  * 以静态变量保存Spring ApplicationContext, 可在其余代码任哪里方别的时候中抽出ApplicaitonContext. 
  5.  *  
  6.  */  
  7. public class SpringContextHolder implements ApplicationContextAware {  
  8. private static ApplicationContext applicationContext;  
  9.   
  10. /** 
  11. * 达成ApplicationContextAware接口的context注入函数, 将其存入静态变量. 
  12. */  
  13. public void setApplicationContext(ApplicationContext applicationContext) {  
  14. SpringContextHolder.applicationContext = applicationContext; // NOSONAR  
  15. }  
  16.   
  17. /** 
  18. * 获得存款和储蓄在静态变量中的ApplicationContext. 
  19. */  
  20. public static ApplicationContext getApplicationContext() {  
  21. checkApplicationContext();  
  22. return applicationContext;  
  23. }  
  24.   
  25. /** 
  26. * 从静态变量ApplicationContext中收获Bean, 自动转型为所赋值对象的类型. 
  27. */  
  28. @SuppressWarnings("unchecked")  
  29. public static <T> T getBean(String name) {  
  30. checkApplicationContext();  
  31. return (T) applicationContext.getBean(name);  
  32. }  
  33.   
  34. /** 
  35. * 从静态变量ApplicationContext中获得Bean, 自动转型为所赋值对象的类型. 
  36. */  
  37. @SuppressWarnings("unchecked")  
  38. public static <T> T getBean(Class<T> clazz) {  
  39. checkApplicationContext();  
  40. return (T) applicationContext.getBeansOfType(clazz);  
  41. }  
  42.   
  43. /** 
  44. * 清除applicationContext静态变量. 
  45. */  
  46. public static void cleanApplicationContext() {  
  47. applicationContext = null;  
  48. }  
  49.   
  50. private static void checkApplicationContext() {  
  51. if (applicationContext == null) {  
  52. throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");  
  53. }  
  54. }  
  55. }  

  转发请评释出处:最早的小说地址:

 

 

十八、多视图调整器

 

当有jsp,flt (模板)等三种页素不相识成彰显格局时,spring默许使用的是“视图深入分析器链”。 真是叁个链,所以质量倒霉,spring会在“视图解析器链”中各样的检索,直到找到呼应的 “视图分析器” 。jsp视图解析器要求求写在终极面,因为倘若调用jsp,就向浏览器发出数据了,Spring就平昔不机缘再尝试下贰个了。

之所以自身写一个"多视图解析器",依附扩张名来区分,可二次正确的入选叁个视图分析器,进步质量(会有微微进步吗?没测验过).

 

上边的例证帮忙jsp,flt (模板)二种页素不相识成展现格局,你中以相好加上,援救更加的多。

 

Xml代码  图片 34

  1.    <!-- 多视图管理器 -->  
  2.    <bean class="com.xxx.core.web.MixedViewResolver">  
  3.     <property name="resolvers">  
  4.         <map>  
  5.             <entry key="jsp">  
  6.                 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  7.                     <property name="prefix" value="/WEB-INF/jsp/"/>  
  8.                     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>  
  9.                 </bean>  
  10.             </entry>  
  11.             <entry key="ftl">  
  12.                 <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
  13.                     <property name="cache" value="true"/>  
  14.                     <property name="contentType" value="text/html;charset=UTF-8"></property>  
  15.                     <!-- 宏命令的帮衬  -->    
  16.                     <property name="exposeSpringMacroHelpers" value="true"/>  
  17.                     <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>  
  18.                     <property name="requestContextAttribute" value="rc"></property>  
  19.                 </bean>  
  20.             </entry>  
  21.         </map>  
  22.     </property>  
  23. </bean>  
  24.   
  25. <!-- freemarker config -->  
  26.    <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">   
  27.        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />   
  28.        <property name="freemarkerSettings">   
  29.            <props>   
  30.                <prop key="template_update_delay">5</prop>   
  31.                <prop key="default_encoding">UTF-8</prop>   
  32.                <prop key="locale">zh_CN</prop>   
  33.            </props>   
  34.        </property>   
  35.    </bean>   

  

 

Java代码  图片 35

  1. import java.util.Locale;  
  2. import java.util.Map;  
  3. import org.springframework.web.servlet.View;  
  4. import org.springframework.web.servlet.ViewResolver;  
  5.   
  6. /**  
  7. * 表明: 多视图管理器 
  8. *  
  9. * @author  赵磊  
  10. * @version 成立时间:二零一三-8-19 下午09:41:09   
  11. */   
  12. public class MixedViewResolver implements ViewResolver{  
  13.     private Map<String,ViewResolver> resolvers;  
  14.   
  15.     public void setResolvers(Map<String, ViewResolver> resolvers) {  
  16.         this.resolvers = resolvers;  
  17.     }  
  18.       
  19.     public View resolveViewName(String viewName,Locale locale) throws Exception{  
  20.         int n=viewName.lastIndexOf(".");  
  21.         if(n!=-1){  
  22.             //收取恢弘名  
  23.             String suffix=viewName.substring(n+1);  
  24.             //收取对应的ViewResolver  
  25.             ViewResolver resolver=resolvers.get(suffix);  
  26.             if(resolver==null){  
  27.                 throw new RuntimeException("No ViewResolver for "+suffix);  
  28.             }  
  29.             return  resolver.resolveViewName(viewName, locale);  
  30.         }else{  
  31.             ViewResolver resolver=resolvers.get("jsp");  
  32.             return  resolver.resolveViewName(viewName, locale);  
  33.         }  
  34.     }  
  35. }  

  转发请表明出处:原来的文章地址:

 

 

十九、 <mvc:annotation-driven /> 到底做了怎么着工作

 

 

一句 <mvc:annotation-driven />实际做了以下职业:(不包括丰盛自身定义的拦截器)

咱俩询问那么些之后,对Spring3 MVC的调整力就越来越强劲了,想改哪就改何地。

Xml代码  图片 36

  1.    <!-- 注脚须求映射  -->  
  2.    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">          
  3.     <property name="interceptors">  
  4.         <list>    
  5.             <ref bean="logNDCInteceptor"/>   <!-- 日志拦截器,那是你自定义的拦截器 -->  
  6.             <ref bean="myRequestHelperInteceptor"/>   <!-- RequestHelper拦截器,那是您自定义的拦截器-->   
  7.             <ref bean="myPermissionsInteceptor"/>  <!-- 权限拦截器,那是你自定义的拦截器-->   
  8.             <ref bean="myUserInfoInteceptor"/>  <!-- 顾客音信拦截器,那是您自定义的拦截器-->   
  9.         </list>          
  10.     </property>          
  11. </bean>     
  12. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
  13.     <property name="messageConverters">    
  14.         <list>    
  15.             <ref bean="byteArray_hmc" />    
  16.             <ref bean="string_hmc" />    
  17.             <ref bean="resource_hmc" />    
  18.             <ref bean="source_hmc" />    
  19.             <ref bean="xmlAwareForm_hmc" />    
  20.             <ref bean="jaxb2RootElement_hmc" />    
  21.             <ref bean="jackson_hmc" />    
  22.         </list>    
  23.     </property>    
  24. </bean>    
  25. <bean id="byteArray_hmc" class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><!-- 处理.. -->  
  26. <bean id="string_hmc" class="org.springframework.http.converter.StringHttpMessageConverter" /><!-- 处理.. -->  
  27. <bean id="resource_hmc" class="org.springframework.http.converter.ResourceHttpMessageConverter" /><!-- 处理.. -->  
  28. <bean id="source_hmc" class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /><!-- 处理.. -->  
  29. <bean id="xmlAwareForm_hmc" class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" /><!-- 处理.. -->  
  30. <bean id="jaxb2RootElement_hmc" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /><!-- 处理.. -->  
  31. <bean id="jackson_hmc" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /><!-- 处理json-->  

  转载请注解出处:原来的书文地址:

 

本文由小鱼儿玄机二站发布于关于计算机,转载请注明出处:springmvc快捷入门,SpringMVC重临json数据的三种办法

关键词: