http://www.cnblogs.com/huligong1234/p/3515747.html
在基于SpringMVC的项目中有时需要同时使用多种视图格式,如jsp,velocity及freemarker等,通过不同的请求路径配置规则,映射到不同的视图文件。下面我提供一种思路,通过视图模板文件后缀名的方式来进行处理。例如:
@RequestMapping(value = "/hello")
public String jspTest(HttpServletRequest request, ModelMap map) {
return "demo.jsp";
}
将通过”demo.jsp”的后缀自动使用jsp的视图解析器。
下面描述下详细思路:
一.自定义视图解析器
package com.jeedev.common.web.springmvc.view; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.View; import org.springframework.web.servlet.ViewResolver; /** * 自定义视图解析(通过配置实现多视图整合,如jsp,velocity,freemarker,pdf,excel...) * @author huligong * */ public class JeeDevViewResolver implements ViewResolver { private static Log logger = LogFactory.getLog(JeeDevViewResolver.class); public View resolveViewName(String viewName, Locale locale) throws Exception { for(Map.Entry<Set<String>, ViewResolver> map : viewResolverMap.entrySet()){ Set<String> suffixs = map.getKey(); for(String suffix : suffixs){ if (viewName.endsWith(suffix)){ ViewResolver viewResolver = map.getValue(); if(null != viewResolver){ if (logger.isDebugEnabled()) { logger.debug("found viewResolver '" + viewResolver + "' for viewName '" + viewName+ "'"); } return viewResolver.resolveViewName(viewName, locale); } } } } if(defaultViewResolver != null){ return defaultViewResolver.resolveViewName(viewName, locale); } // to allow for ViewResolver chaining return null; } private Map<Set<String>,ViewResolver> viewResolverMap = new HashMap<Set<String>,ViewResolver>(); private ViewResolver defaultViewResolver = null; public Map<Set<String>, ViewResolver> getViewResolverMap() { return viewResolverMap; } public void setViewResolverMap(Map<Set<String>, ViewResolver> viewResolverMap) { this.viewResolverMap = viewResolverMap; } public ViewResolver getDefaultViewResolver() { return defaultViewResolver; } public void setDefaultViewResolver(ViewResolver defaultViewResolver) { this.defaultViewResolver = defaultViewResolver; } }
在自定义视图解析器(其实是视图中转器)中,通过对视图文件的后缀判断(而不是请求地址的后缀)而返回给不同的视图解析器处理。
二.视图映射配置dispather-servlet.xml
<bean id="viewResolver" class="com.jeedev.common.web.springmvc.view.JeeDevViewResolver"> <property name="defaultViewResolver" ref="beanNameViewResolver"/> <property name="viewResolverMap"> <map> <entry> <key> <set> <value>.jsp</value> </set> </key> <ref bean="jspViewResolver"/> </entry> <entry> <key> <set> <value>.vm</value> <value>.htm</value> </set> </key> <ref bean="velocityViewResolver"/> </entry> <entry> <key><value>.ftl</value></key> <ref bean="freeMarkerViewResolver"/> </entry> </map> </property> </bean> <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"/> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/jsp/"/> <!--<property name="suffix" value=".jsp"/>--> </bean> <!-- Velocity ViewResolver Configuration --> <bean id="velocityViewResolver" class = "org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="order" value="0" /> <property name="contentType" value="text/html;charset=UTF-8" /> <property name="requestContextAttribute" value="req"/> </bean> <!-- Velocity Configuration --> <bean id="velocityConfig" class = "org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="configLocation" value="/WEB-INF/velocity.properties"/> <property name="resourceLoaderPath" value="/" /> </bean> <!-- FreeMarker ViewResolver Configuration --> <bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="order" value="0" /> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/> </bean> <!-- FreeMarker Configuration --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="configLocation" value="/WEB-INF/freemarker.properties"/> <property name="templateLoaderPath" value="/WEB-INF/ftl/"/> <property name="freemarkerVariables"> <map> <entry key="xml_escape" value-ref="fmXmlEscape"/> </map> </property> </bean> <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
这里我配置成所有返回.jsp的视图模板请求都转到JSP视图解析器jspViewResolver中去处理,返回.htm,.vm视图模板请求都转到velocity视图解析器中去处理。
三.控制器代码示例
package com.jeedev.demo.view; import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; /** * 多视图解析器支持示例 * @author huligong * */ @Controller @RequestMapping(value = "/demo") public class JeeDevViewResolverTestController { private static Log logger = LogFactory.getLog(JeeDevViewResolverTestController.class); @RequestMapping(value = "/test1") public String test1(HttpServletRequest request, ModelMap map) { logger.info("使用JSP视图解析器"); map.put("name", "hello world"); return "jspTest.jsp"; } @RequestMapping(value = "/test2") public String test2(HttpServletRequest request, ModelMap map) { logger.info("使用Freemarker视图解析器"); map.put("name", "hello world"); return "hello.ftl"; } @RequestMapping(value = "/test3") public String test3(HttpServletRequest request, ModelMap map) { logger.info("使用Velocity视图解析器"); map.put("name", "hello world"); return "/html/demo.htm"; } }
四.测试请求
我在web.xml里给DispatcherServlet添加了/view/*,所以,只要在请求前加上/view就可以了。
http://localhost:8080/view/demo/test1
http://localhost:8080/view/demo/test2
http://localhost:8080/view/demo/test3
皆验证通过。
相关推荐
开发者可以通过注解来简化控制器的编写,同时Spring MVC支持多种视图技术,如JSP、FreeMarker、Velocity等。 **Mybatis**:Mybatis是一个轻量级的持久层框架,它解决了Java开发中的数据库操作问题。Mybatis通过XML...
除了JSP,SpringMVC还支持其他视图技术,如FreeMarker、Velocity、Thymeleaf等。只需引入相应库,配置视图解析器,就能实现这些模板引擎的视图支持。例如,对于FreeMarker,我们需要配置FreeMarkerViewResolver: `...
它提供了请求处理、模型绑定、异常处理等功能,并支持多种视图技术,如JSP、Freemarker和Velocity。 2. **Freemarker**: Freemarker是一个模板引擎,用于生成动态HTML或其他文本格式的输出。在本项目中,...
相比于Struts,Spring MVC更现代、更灵活,支持多种视图技术,包括JSP、Velocity、FreeMarker等。在本项目中,Spring MVC用于处理HTTP请求,控制业务流程,并通过ModelAndView对象与视图层进行交互。 3. jQuest ...
2. **视图(View)**: 负责呈现数据,SpringMVC支持多种视图技术,如JSP、FreeMarker或Velocity等。 3. **控制器(Controller)**: 处理HTTP请求,调用业务逻辑,并将结果转发到相应的视图。 **Velocity** ...
5. **视图解析器**:如JSP、FreeMarker或Velocity等,可以方便地与各种视图技术集成。 **Hibernate** Hibernate是一个流行的ORM(对象关系映射)框架,它为Java开发者提供了数据库操作的抽象层,消除了SQL的直接...
默认情况下,SpringMVC使用`InternalResourceViewResolver`来解析视图,它将视图名映射到JSP或Freemarker等模板引擎的页面。如果需要使用其他视图技术,如Thymeleaf或Velocity,或者有特定的视图解析规则,可以通过...
SpringMVC是一个强大的Java web应用程序开发框架,它属于Spring框架的一部分,主要负责处理HTTP请求和响应...同时,建议查阅官方文档和在线教程,以获取更多关于SpringMVC、Velocity和FreeMarker的详细信息和最佳实践。
在Web应用中,Velocity作为一个视图技术,可以替代JSP或FreeMarker等。开发者在Velocity模板中编写简单的指令语言(VTL),这些指令可以引用Java对象的方法或属性,从而动态生成HTML或其他格式的输出。Velocity强调...
- SpringMVC支持更多视图技术,如Thymeleaf、Velocity等,而Struts2主要使用JSP。 - SpringMVC有更好的异常处理机制和AOP支持。 通过这些基础知识的学习,你可以理解SpringMVC的核心概念,为后续的高级应用,如...
在SpringMVC中,视图可以是JSP、Thymeleaf、Velocity等。 7. **Interceptor**:拦截器允许在请求处理前后执行额外的操作,如日志记录、权限检查等。 在"panda-springmvc"项目中,你可以看到这些组件如何被配置和...
SpringMVC支持多种视图技术,如JSP、FreeMarker、Thymeleaf等。视图解析器ViewResolver根据逻辑视图名返回实际视图。 6. **上传下载功能**: 使用MultipartFile接口处理文件上传,SpringMVC提供方便的API来实现...
14. **视图技术**:除了JSP,SpringMVC还可以与Thymeleaf、Velocity、Freemarker等视图技术配合使用。 15. **JSON支持**:SpringMVC内置了Jackson库,可以方便地将Java对象转换为JSON格式,用于前后端交互。 16. *...
同时,SpringMVC支持多种视图技术,如JSP、Thymeleaf、Velocity等,可以根据项目需求选择合适的方式。 总结一下,SpringMVC是Spring框架的重要组成部分,它提供了一种组织和处理Web应用程序请求的优雅方式。通过...
SpringMVC 默认支持 JSP、FreeMarker、Thymeleaf 等多种视图技术。 7. **视图技术** SpringMVC 支持多种视图技术,如 JSP、Thymeleaf 和 Velocity。这些视图技术负责将模型数据渲染成最终的 HTML 响应。 8. **...
7. **多视图技术**:SpringMVC可以结合不同的视图技术,如JSP、Velocity、Freemarker,满足各种需求。 8. **模板引擎**:如Thymeleaf、Freemarker等,能提供更高效的模板渲染,与HTML紧密集成,提高开发效率。 9. ...
它提供了一种模型-视图-控制器(MVC)架构模式的实现,帮助开发者将业务逻辑、数据和用户界面分离,使得代码更加模块化,易于维护。下面我们将深入探讨SpringMVC的相关知识点。 1. **核心组件**: - **...
7. **视图技术**:Spring MVC 支持多种视图技术,如 JSP、Thymeleaf、FreeMarker、Velocity 等,允许开发者选择最适合项目的视图解决方案。 8. **注解驱动开发**:Spring MVC 允许使用注解(如 @RequestMapping、@...
它可以支持JSP、FreeMarker、Velocity等多种视图技术,使得项目可以选择最适合的模板语言。 3. 数据绑定:SpringMVC支持自动将请求参数绑定到处理器方法的参数上,这称为数据绑定。例如,表单提交的数据可以自动...
它不仅支持传统的Servlet API,还支持JSP、Velocity、FreeMarker等多种视图技术,以及JSON、XML等数据格式。SpringMVC遵循了MVC架构模式,它将业务逻辑与用户界面分离,使得程序结构更加清晰、维护性更强。 ### ...