`
tomorrow009
  • 浏览: 45919 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

活用SpringMVC+Freemarker实现http内容协商

阅读更多

SpringMVC目前应用较广,Freemarker又是优秀的通用模板引擎,两者的结合十分方便。 但既然是通用模板引擎,那么仅仅用来渲染Html页面未免暴殄天物。

 

如果我们从http request的header取得Accept值,并根据此值来选择不同的模板,渲染之,就能够达到http协议中的内容协商的目的了。

 

我们只需要一个类似下面的方法(这只是一个粗略实现,未考虑细节),即可以实现此模式。

public ModelAndView getTemplateByAcceptType(HttpServletRequest request,
			HttpServletResponse response, String template){
		String header_accept = request.getHeader("Accept").split(",")[0];
		ModelAndView mv ;
		if(header_accept.equalsIgnoreCase("application/json")){
			mv = new ModelAndView(template + ".json");
			response.setHeader("content-type", "application/json");
		}else if(header_accept.equalsIgnoreCase("application/xml")){
			mv = new ModelAndView(template + ".xml");
			response.setHeader("content-type", "application/xml");
		}
		else{
			mv = new ModelAndView(template + ".html");
			response.setHeader("content-type", "text/html");
		}
		return mv;
	}
 

那么,对应的,我们需要在同一个目录下提供多个模板文件, foo.json.ftl和foo.xml.ftl和foo.html.ftl。 

 

当然SpringMVC本身提供了一个@ResponseBody注释,通过使用 不同的wrapper也能够达到同样的目的,那这样做的好处是什么呢? 

1. 你可以使用同一个controller来处理不同的用户请求。

2. 可以不受Java方法返回值类型的限制,这意味着你可以更好的处理错误信息和异常等行为。

3. 你可以有选择的暴露想要返回给客户端的属性, 以及更灵活的处理对象间的嵌套,避免父子对象间的循环引用造成的序列化问题。

4. 你可以进一步使用内容协商,来处理多语言,字符编码等问题。

 

当然也有不爽的,那就是你要写多个模板文件,这或许会让你觉得有点烦,这时候也许生成器是个好选择。

0
0
分享到:
评论

相关推荐

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    FreeMarker是一个用Java编写的模板引擎,用于生成动态内容。在Web应用中,FreeMarker与SpringMVC结合,可以生成HTML页面。开发者可以创建FTL(FreeMarker Template Language)文件,将业务逻辑与视图分离,提高代码...

    Maven+SpringMVC+Freemarker Demo

    这个"Maven+SpringMVC+Freemarker Demo"是一个基础的Web应用示例,它展示了如何将这三个强大的工具集成到一起,实现一个简洁高效的开发环境。 **1. Maven** Maven是Apache软件基金会开发的一个项目管理和综合工具,...

    maven+springmvc+spring+hibernate+freemarker

    maven管理项目+springmvc+spring+hibernate+freemarker 集成框架。其中注解格式清晰,hibernate进行了代码封装,对开发效率有了提高,对异常进行了封装。freemarker也有优化,参考common包下。对日期工具类有各种...

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码.zip

    Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+MyBatis实现的学生信息管理系统源码,SSM+Vue的学生管理系统。 Java基于Spring+SpringMVC+...

    SpringBoot+SpringMVC+Freemarker实现单个上传和多个文件上传

    SpringBoot版本的SpringMVC+Freemarker上传案例,地址是localhost:8888/photo/index进入上传页面,默认是三个文件,自己可以屏蔽两个文件就是单个文件的状态了,首先在电脑的D盘新建一个upload的文件夹,...

    SpringMVC+Freemarker+Hibernate整合范例

    4. **整合流程**:在SpringMVC+Freemarker+Hibernate整合中,通常会首先配置Spring的ApplicationContext,包括DataSource、SessionFactory、HibernateTemplate或JPA的相关配置。接着,定义Controller,处理HTTP请求...

    基于SpringMVC+Hibernate实现的在线购物商城.zip

    基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+...

    springmvc+freemarker+shiro

    在这个"springmvc+freemarker+shiro"的小Demo中,开发者可能已经展示了如何将这三个组件集成到一个项目中。SpringMVC处理HTTP请求,调用业务逻辑,然后将数据传递给FreeMarker模板进行渲染。同时,Shiro负责用户的...

    springmvc+freemarker+easyUi 框架

    在 "springmvc+freemarker+easyUi" 的集成应用中,Spring MVC 处理用户的请求,调用业务逻辑,将处理结果封装为模型数据。这些数据随后被传递给 Freemarker 模板,Freemarker 根据模板规则将数据渲染成HTML。最后,...

    maven+springMvc+freemarker

    FreeMarker是一个基于模板的Java模板引擎,主要用于生成动态Web内容。在Spring MVC中,FreeMarker作为视图层技术,负责将后端的数据模型渲染成HTML页面。FreeMarker模板语言简洁,易于学习,与Java代码分离,有助于...

    【ssm框架】 spring+springMVC+mySQL+myBatis+freemarker+Maven小示例1

    SSM框架是Java web开发中常用的整合框架,由Spring、SpringMVC和MyBatis三个组件构成。这个项目示例提供了使用SSM框架构建Web应用的基础结构,让我们逐一解析其中涉及的技术点。 **Spring框架**:Spring是核心的...

    springMVC+freemarker整合实例

    SpringMVC和FreeMarker是两种在Java Web开发中广泛使用的技术。SpringMVC是一个轻量级的、基于组件的Web应用框架,它负责处理HTTP请求并分发到对应的控制器进行处理。而FreeMarker则是一个模板引擎,用于动态生成...

    springMVC+freemarker框架

    ### 结合使用SpringMVC和FreeMarker 在SpringMVC中,通常会配置FreeMarkerViewResolver作为视图解析器。当Controller返回的ModelAndView中的视图名为一个模板文件名时,FreeMarkerViewResolver会找到对应的...

    springMvc+freemarker

    在这个"springMvc+freemarker"的项目中,我们可以看到作者用Spring MVC与FreeMarker模板引擎集成创建了一个示例应用。 首先,Spring MVC框架的主要组件包括DispatcherServlet、Controller、Model、View和...

    完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip

    完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统(RESTful API+redis).zip 完善的Spring+SpringMVC+Mybatis+easyUI后台管理系统...

    Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven实现的通用权限管理系统

    Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统。 Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统 Spring+SpringMVC+...

    大型商城网站springmvc+freemarker+velocity+ibatis

    标题 "大型商城网站springmvc+freemarker+velocity+ibatis" 暗示了这是一个基于SpringMVC、Freemarker、Velocity和iBatis框架构建的电子商务平台。这个项目可能是一个B2C(Business-to-Consumer)类型的商城,允许...

    springmvc+mybatis 和一个简单的freemarker代码生成工具

    在IT行业中,SpringMVC、MyBatis以及FreeMarker是三个非常重要的技术组件,它们各自在Web开发领域中扮演着不同的角色。SpringMVC作为Spring框架的一部分,是用于构建MVC(Model-View-Controller)架构的轻量级Web...

    SpringMVC+Hibernate+Freemarker 干净的框架

    在实际项目中,开发者通常会配合使用其他Spring生态的组件,如Spring Security进行权限管理,Spring AOP实现切面编程,以及Spring Boot简化应用的初始化和配置。这样的组合不仅构建了强大的Web应用框架,也为开发者...

    spring+springmvc+mybatis+shiro+freemarker+dubbo

    标题 "spring+springmvc+mybatis+shiro+freemarker+dubbo" 涵盖的是一个基于Java的完整Web应用程序开发框架。这个框架结合了Spring、SpringMVC、MyBatis、Shiro、FreeMarker以及Dubbo的核心技术,用于构建高效、可...

Global site tag (gtag.js) - Google Analytics