文档章节

配置Spring MVC2

AlphaGo
 AlphaGo
发布于 2016/03/21 00:42
字数 1436
阅读 13
收藏 0

        通过MVC java config或者MVC XML namespace,还可以完成下面的事情:

        除了被用于Data Binding的JavaBeans PropertyEditors,还通过一个ConversionService实例进行类型转换

        通过ConversionService使用@NumberFormat注解来支持数字格式化

        使用@DateTimeFormat注解来支持Date,Calendar,Long和Joda Time等fields的格式化    

        如果类路径中存在JSR-303 Provider,支持通过@Valid注解来验证@Controller

        为@RequestBody方法参数和@RequestMapping或@ExceptionHandler方法的@ResponseBody返回值提供HttpMessageConverter支持。

        通过<mvc:annotation-driven>设置的HttpMessageConverter有如下这些:

  • ByteArrayHttpMessageConverter:用来转换字节数组

  • StringHttpMessageConverter:用来转换字符串

  • ResourceHttpMessageConverter:将所有的media types转换为org.springframework.core.io.Resource

  • RourceHttpMessageConverter:将所有的media types转换为javax.xml.transform.Source

  • FormHttpMessageConverter:将数据转换为MultiValueMap<String, String>

  • Jaxb2RootElementHttpMessageConverter:将java对象转换为XML(如果类路径中有JAXB2)

  • MappingJackson2HttpMessageConverter(MappingJacksonHttpMessageConverter):将java对象转换为XML(如果类路径中有Jackson2或者Jackson)

  • AtomFeedHttpMessageConverter:转换Atom feeds(如果类路径中有Rome)

  • RssChannelHttpMessageConverter:转换Rss feeds(如果类路径中有Rome)


        如果想要定制Java中默认配置,你仅需要实现WebMvConfigurer接口,或者继承WebMvConfigurerAdapter类并重写你需要的方法。

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
    
    @Override
    protected void addFormatters(FormatterRegistry registry) {
        //Add formatters or/and converters
    }
    
    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //Configure the list of HttpMessageConverters to use
    }
}


        <mvc:annotation-driven>的默认配置也可以定制化,这时你需要检查它支持什么属性或者子元素。


        配置拦截器

        你可以配置HandlerInterceptors或者WebRequestInterceptors并将其应用在所有的请求或者仅限于指定URL path patterns的请求。同样的,在Java代码中或是XML配置文件中各有其配置方式:Java中是通过继承WebMvcConfigurerAdapter并重写其addInterceptors(InterceptorRegistry registry)方法实现的,而在XML配置文件中是通过<mvc:interceptors>标签来配置的。


         配置内容协商(Content Negotiation)

        从Spring3.2开始,可以配置如何让Spring MVC测定请求的媒体类型(为了映射请求和内容协商)。可行的选择有:检查请求URI中的文件后缀、“Accept”请求头、请求参数,默认的内容类型。默认情况下会先检查请求URI,再检查、“Accept”请求头。对于请求URI中的文件后缀,MVC java config或者MVC XML namespace会自动注册诸如.json,.xml,.rss,和.atom的后缀(如果类路径中存在相关的依赖),其他的扩展,如果能够被ServletContext.getMimeType(String)或者Java Activation Framework找到的话,就不需要进行显示地注册。

        在MVC java config中,可以通过重写抽象类WebMvConfigurerAdapter中的configureContentNegotiation方法来定制内容协商的选项。在MVC XML namespace中,<mvc:annotation-driven>元素有一个content-negotiation-manager属性,它能通过ContentNegotiationManagerFactoryBean来创建一个ContentNegotiationManager。

        如果不使用MVC java config或者MVC XML namespace,你就需要自己创建一个ContentNegotiationManager实例,并使用它配置RequestMappingHandlerMapping(为了request mapping),或者RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver(为了content negotiation)。注意:ContentNegotiatingViewResolver同样可以被配置,这样在Spring MVC中就可以只使用它的一个实例。


         配置视图控制器(View Controllers)

        这是定义一个ParameterizableViewController的捷径(激活时,能立即转发到一个视图),在视图生成响应之前没有控制器逻辑执行的情况下,可以使用它。同样可以重写抽象类WebMvConfigurerAdapter的addViewControllers方法,或者在XML中使用<mvc:view-controller>元素。


         配置资源服务(Serving of Resources)

        这个选项能够允许紧跟着一个特定URL模式的静态资源请求被ResourceHttpRequestHandler从任一资源位置列表中提供服务。这提供了一种从位置而非应用根目录(包括类路径中的位置)来为静态资源提供服务的便捷方式。cache-period属性可以用来设置未来失效时间,这样,静态资源就能够被客户端更有效的利用。ResourceHttpRequestHandler也会正确的评估Last-Modified头部信息,这样就能适当的返回304状态码而避免不必要的重复加载。在java和XML中配置如下:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter{
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/publicresources/")
                .setCachePeriod(31556926);
    }
}
<mvc:resources mapping="/resources/**" location="/public-resources/" cacheperiod="31556926"/>

        mapping属性必须是能够被SimpleUrlHandlerMapping,使用的Ant模式,而location属性必须指定一个或多个有效的资源目录位置(多个位置用逗号分隔)。对于任何给定的请求,会根据指定的顺序检查指定位置的资源是否存在。

        对于那些在新版本的应用被部署后可能出现变化的资源,建议在mapping pattern中加一个version string,这样就能让用户访问到新部署的资源。这个version string能够通过SpEL参数化并被访问,这样当部署新版本时,它就能在一个独立的地方被管理。


        <mvc:default-servlet-handler/>标签:此标签允许将DispatcherServlet映射到“/”,然而同时还允许静态资源请求被容器的默认Servlet处理。它配置了一个DefaultServletHttpRequestHandler,带有一个指向“/**”的URL映射并相对其他的URL映射有着最低的优先级。这个Handler将转发所有的请求到默认的Servlet,因此它排在所有其他URL HandlerMappings后面很重要。如果你使用<mvc:annotation-driven>或者你设置你自己的HandlerMapping实例,确保将它的顺序优先级设置的比DefaultServletHttpRequestHandler的(为:Integer.MAX_VALUE)低。

        重写“/”Servlet mapping的理由是默认Servlet的RequestDispatcher必须通过名字而非路径取回。DefaultServletHttpRequestHandler将尝试在启动时自动探测默认的Servlet,如果这个Servlet被自定义成了不同的名字,或者使用的是另一个默认Servlet的名字未知的Servlet容器,那么,默认Servlet的名字必须被显式提供。


        

© 著作权归作者所有

AlphaGo
粉丝 0
博文 9
码字总数 7769
作品 0
程序员
私信 提问
简单谈谈 SimpleFramework 系统架构

原文:http://simpleframework.net/ 工作机理 图:基于过滤器(/后处理)的Web应用框架工作原理 Web 应用中,无论服务器端采用(Java EE/.NET),客户端的请求经Web或应用服务器解析后,最终返...

cknet
2010/11/10
417
0
spring mvc3中的addFlashAttribute方法

记得在spring mvc2中,当保存POJO到数据库后,要返回成功页面,如果这个时候要带点信息, 则要这样: //第三个参数(UserModel user)默认为绑定对象 @RequestMapping(value = "/user/save", ...

jackyrong
2013/02/16
140
0
InfoQ采访开源Web框架SimpleFramework开发团队

在技术的道路上,永远不缺乏充满激情、勇于创新的人们。只要我们善于思考、发现、总结与提升,就能创造出造福社区、为他人所用的好东西。而SimpleFramework就是一个很好的例子。 在其网站开放...

chenkx
2010/12/01
1K
1
TOMCAT下面发布项目的4种方式

第一种方法: 将web项目文件件拷贝到webapps 目录中;或者直接通过Eclipse发布到Tomcat上。 第二种方法: 在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加 访问地址:http://...

wellsguo
2014/07/06
793
0
ASP.NET MVC3 系列教程 - View的变化

I:首先看看在MVC2及MVC3当中,View的继承结构以及变化 MVC2: 根据上图的继承关系说明.~~MVC2当中的VIEW还是和WebForm的Page有着紧密相连的关系. 下面我们来看看MVC3当中发生了什么样的变化. M...

晨曦之光
2012/06/05
615
0

没有更多内容

加载失败,请刷新页面

加载更多

python学习10.04:Python list列表使用技巧及注意事项

前面章节介绍了很多关于 list 列表的操作函数,细心的读者可能会发现,有很多操作函数的功能非常相似。例如,增加元素功能的函数有 append() 和 extend(),删除元素功能的有 clear()、 remo...

太空堡垒185
33分钟前
4
0
新手插画学习的方法?教你如何自学?

插画学习的方法?教你如何自学? 从小喜欢画一些漫画头像随笔画,但是其实没有基础。个人偏好小清新手绘风的插画(如下图),每每看到都希望自己能画出这样的作品。 我其实很想说画这种美术功...

huihuajiaocheng
39分钟前
5
0
面试总结

一、2019.10.15日上午交子大道中海国际艾迪泰科面试总结 1、领导比较有亲合力,就是办公环境没有隔挡,不是很喜欢办公环境 2、成都这边人员太少,感觉不到规模 3、离家太远 1、实现clone(); ...

gtandsn
50分钟前
5
0
CentOS 7 部署 tesseract-ocr

官方地址 github yum-config-manager --add-repo https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_7/ 若提示 yum-config-manager: command not found 执行以......

阿白
50分钟前
3
0
JAVA比较器中comparator的使用

一个专用的比较器Comparator Comparator是一个专用的比较器,当一个不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较。Comparator体现了一种策略模式...

daxiongdi
51分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部