Spring mvc可以配置多种视图,比如json、xml、ftl等等(REST内容协商)。
RESTful服务中很重要的一个特性是对于同一资源,可以有多种表述形式。
既然是协商视图,那么Spring MVC REST改如何决定采用何种方式(视图)展示内容呢?
第一种:根据http request header中的Accept
Accept: text/css,*/*;q=0.1 //返回css格式数据
Accept: application/xml //返回xml格式数据
Accept: application/json //返回json格式数据
缺点:
chrome:
Accept:application/xml,application/xhtml+xml,textml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
firefox:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
IE8:
Accept:image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash,
application/x-silverlight, application/x-ms-application, application/x-ms-xbap,
application/vnd.ms-xpsdocument, application/xaml+xml, */*
用户直接通过浏览器访问,由于各个浏览器发送的Accept的不一致,
将导致服务器不知要返回什么格式的数据。
第二种:根据扩展名
http://www.sxrczx.com/rest.xml //将返回xml格式数据
http://www.sxrczx.com/rest.json //将返回json格式数据
http://www.sxrczx.com/rest.htm //将返回html格式数据
缺点:
不能统一通过同一URL实现多种展示视图。
第三种:根据format参数
http://www.sxrczx.com/rest?format=xml //将返回xml格式数据
http://www.sxrczx.com/rest?format=json //将返回json格式数据
http://www.sxrczx.com/rest?format=htm //将返回html格式数据
缺点:
需要额外的传递format参数,URL变得冗余,繁琐,缺少了REST的简洁风范。
配置:web.xml,显示Spring的配置文件位置
... <!-- spring mvc --> <servlet> <servlet-name>SpringMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring/appContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMvc</servlet-name> <url-pattern>*.htm</url-pattern> <url-pattern>*.json</url-pattern> <!-- <url-pattern>*.xml</url-pattern> --> </servlet-mapping> ...
===================================================================================
Spring配置appContext.xml(无扩展名(jsp作为视图)/json/xml)
<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 http://www.sxrczx.com/rest.json http://www.sxrczx.com/rest.xml --> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <!-- 设置为true以忽略对Accept Header的支持--> <property name="ignoreAcceptHeader" value="true"/> <!-- 在没有扩展名时即: "http://www.sxrczx.com/rest" 时的默认展现形式 --> <property name="defaultContentType" value="text/html"/> <!-- 扩展名至mimeType的映射,即 http://www.sxrczx.com/rest.json 映射为 application/json --> <property name="mediaTypes"> <map> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </map> </property> <!-- 用于开启 http://www.sxrczx.com/rest?format=json 的支持 --> <property name="favorParameter" value="false"/> <property name="viewResolvers"> <list> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/pages"/> <property name="suffix" value=".jsp"></property> </bean> </list> </property>
<property name="defaultViews"> <list> <!-- for application/json --> <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> <!-- for application/xml --> <!-- <bean class="org.springframework.web.servlet.view.xml.MarshallingView" > <property name="marshaller"> <bean class="org.springframework.oxm.xstream.XStreamMarshaller"/> </property> </bean>
--> </list> </property> </bean>
============================================================================================
Spring配置appContext.xml(freemarker/json)
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="order" value="1" /> <property name="favorParameter" value="false" /> <property name="ignoreAcceptHeader" value="true" /> <property name="defaultContentType" value="application/json" /> <property name="mediaTypes"> <map> <entry key="json" value="application/json" /> </map> </property> <property name="viewResolvers"> <list> <!-- 配置freemarker作为视图层 --> <bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache" value="true" /> <property name="order" value="0" /> <property name="prefix" value="" /> <property name="suffix" value=".htm" /> <property name="contentType" value="text/html;charset=utf-8" /> <!-- 把contextPath暴露给freemaker,前端可以通过${request.getContextPath()} 来获取上下文路径<property name="requestContextAttribute" value="request"/> --> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/> </bean> </list> </property> <property name="defaultViews"> <list> <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> </list> </property> </bean> <!-- Freemarker --> <bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache" value="true" /> <property name="order" value="0" /> <property name="prefix" value="" /> <property name="suffix" value=".htm" /> <property name="contentType" value="text/html;charset=utf-8" /> <!-- 把contextPath暴露给freemaker,前端可以通过¥{request.getContextPath()} 来获取上下文路径 <property name="requestContextAttribute" value="request"/> --> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /> </bean>
<!-- ftl参数配置 -->
<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="/WEB-INF/config/ftl/freemarker.properties"/>
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="defaultEncoding" value="utf-8"/>
<property name="templateLoaderPath" value="/WEB-INF/template"/>
<property name="freemarkerSettings" ref="freemarkerConfiguration"/>
</bean>
freemarker.properties
datetime_format=yyyy-MM-dd HH:mm:ss date_format=yyyy-MM-dd time_format=HH:mm:ss number_format=0.######; boolean_format=true,false #auto_import="/common/index.ftl" as ui whitespace_stripping=true default_encoding=UTF-8 tag_syntax=square_bracket url_escaping_charset=UTF-8 #开启默认容错,既null时,默认使用""代替 classic_compatible=true
相关推荐
在Spring MVC的配置文件(如`spring-mvc.xml`)中,你需要配置VelocityViewResolver,这是Spring MVC用来解析Velocity模板的类。设置其prefix和suffix属性,分别指定视图前缀和后缀,例如: ```xml ...
Spring 3.1强化了对RESTful风格Web服务的支持,通过MessageConverter机制,可以轻松处理XML、JSON等多种格式的数据交换。新增的RestTemplate类为创建REST客户端提供了便利。 5. **MVC框架升级** Spring MVC 3.1...
Spring Web MVC 3.1引入了自动配置的概念,使得开发者可以通过注解来声明式地配置MVC组件,如`@Controller`、`@RequestMapping`等。这极大地减少了XML配置文件的使用,简化了项目配置。 2. **ModelAndView与...
6. **视图技术集成**:Spring MVC 可以与各种视图技术如 JSP、FreeMarker、Thymeleaf 等无缝集成,使得开发者可以选择最适合项目的视图解决方案。 7. **异常处理**:通过@ControllerAdvice 和 @ExceptionHandler ...
- **支持多种视图技术**:SpringMVC不仅支持JSP,还支持其他视图技术如FreeMarker、Thymeleaf等,提供了更多的选择。 - **与Spring框架的深度集成**:SpringMVC作为Spring框架的一部分,可以无缝地与其他Spring功能...
同时,需要创建SpringMVC的配置文件,如spring-mvc.xml,其中包含视图解析器、拦截器、数据绑定等配置。 1.3 Hello World 编写一个简单的Controller,使用@Controller注解标记,并通过@RequestMapping注解映射请求...
Spring MVC 支持 JSON 数据格式的输入和输出,通过 @ResponseBody 注解可以将方法返回的对象直接转换为 JSON,并发送回客户端。同时,使用 @RequestBody 注解可以从 JSON 请求体中解析数据。 七、文件上传 Spring ...
- **MVC Improvements**:Spring MVC的功能得到增强,如支持RESTful风格的URL、支持JSON和XML格式的数据交换、改进的异常处理等。 - **Expression Language (SpEL)**:Spring Expression Language提供了更强大的...
在依赖管理方面,Spring MVC 4.0引入了对Servlet 3.1的全面支持,这简化了部署配置,因为开发者可以使用注解来定义Servlet、Filter和Listener,无需传统的web.xml配置文件。此外,这个版本还支持异步处理,通过`@...
- 在`DispatcherServlet`初始化过程中,会加载一个或多个配置文件(如XML文件),这些文件定义了整个Web应用的配置。 - 通过`WebApplicationContext`,`DispatcherServlet`可以访问到所有的Bean实例,包括自定义的...
Struts 2.2.3.1 是一个流行的开源MVC框架,用于构建企业级Java Web应用程序。这个压缩包“struts-2.2.3.1-lib.zip”包含了Struts 2框架的库文件,这些文件对于理解和使用Struts 2框架至关重要。下面将详细解释其中...
3. **配置Spring**:创建Spring的配置文件,如`applicationContext.xml`,定义bean,实现依赖注入。同时,还需要配置数据源、事务管理器以及Hibernate的SessionFactory。 4. **配置SpringMVC**:创建`servlet-...
- 配置Thymeleaf、FreeMarker等模板引擎进行视图渲染。 - 使用WebSocket实现实时通信。 #### 3.2 安全管理 - 整合Spring Security实现用户认证和授权。 - 配置JWT(JSON Web Tokens)进行安全认证。 #### 3.3 ...
在Spring MVC中,FreeMarker可以作为视图解析器,帮助开发者将模板与数据模型结合,生成动态内容。 5. **c3p0(c3p0-0.9.1.jar)**:c3p0是一个开源的JDBC连接池,提供数据源和JNDI绑定的数据源。虽然Druid是现代的...
4. Spring MVC的增强,包括ModelAndView的改进,以及视图解析器的扩展性提升。 5. 支持JSR-303/JSR-349 Bean Validation,用于校验模型对象。 **三、Struts 2.15** Struts 2是一个基于MVC设计模式的Web应用框架,...
- **多视图支持**:支持多种视图技术如FreeMarker、JSP和Velocity等。 - **Validator验证**:内置强大的后端验证机制,确保数据完整性。 #### 二、快速上手指南 - **1.1 创建项目** - **推荐开发环境**:...
6. **Freemarker或JSP作为视图技术**: Struts2支持多种视图技术,其中Freemarker和JSP是最常见的。它们负责渲染数据并展示给用户。 在"struts-2.2.3.1-libs"压缩包中,你将找到以下核心库文件: 1. **xwork-core....
它是一个模型-视图-控制器(MVC)架构的实现,提供了强大的数据绑定、验证、国际化等功能,极大地简化了Java Web开发。在“springMVC学习--基本的几个例子”这个主题中,我们将深入探讨SpringMVC的基础配置以及几个...
Spring MVC的主要优势在于它的灵活性和可扩展性,支持多种视图技术(如JSP、Freemarker等),并且易于与其他Spring组件集成。 **2.2 MyBatis** MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级...
- 用于渲染视图页面或返回 JSON 数据等。 #### 五、Interceptor 拦截器 - **4.1 概述** - Interceptor 拦截器用于在 Controller 执行前后进行逻辑处理。 - **4.2 Interceptor 应用** - 可以用来实现登录验证、...