一、从freemarker谈起
Freemarker使用模板技术进行视图的渲染。自从看了Struts标签、Freemarker、JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差……
Spring本身支持了对Freemarker的集成。只需要配置一个针对Freemarker的视图解析器即可。
二、Spring MVC视图解析器
视图解析器的工作流程大致是这样的:Controller的某个方法执行完成以后,返回一个视图(比如:listUser),视图解析器要做的工作 就是找到某个对象来完成视图的渲染,或者跳转到其他的逻辑视图。这里的渲染对象通常就是我们的jsp文件或者我们下面用的Freemarker(例如 listUser.jsp或者listUser.ftl)。渲染完成以后,将解析结果发送到客户端浏览器
下面介绍一下本文需要用到的解析器(更多解析器资料,请参考 http://e-freya.iteye.com/blog/384083 ):
InternalResourceViewResolver:这是一个最常用的解析器。通常使用它指定渲染对象为jsp页面
FreeMarkerViewResolver:这就是Spring与Freemarker整合需要用到的解析器
三、配置多视图,支持freemarker
我们通常不希望所有的动态页面请求都使用Freemarker来渲染,那就需要配置多个视图解析器。网上有很多这方面的帖子。我看到很多人的做法是 在web.xml中配置两个DispatcherServlet,一个拦截*.do,一个拦截*.ftl;然后再写两个 dispatcherServlet.xml,配置两个视图解析器;jsp页面、ftl模板就各司其职。
其实没有那么复杂。
1.Web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <!-- ======================================================== -->
- <!-- Spring MVC Config Servlet -->
- <!-- ======================================================== -->
- <!-- JSP DispatcherServlet -->
- <servlet>
- <servlet-name>dispatcher</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <!-- ======================================================== -->
- <!-- Spring MVC Config Mapping -->
- <!-- ======================================================== -->
- <servlet-mapping>
- <servlet-name>dispatcher</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- </web-app>
2.dispatcherServlet.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
- <!--通用视图解析器-->
- <bean id="viewResolverCommon" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/page/"/>
- <property name="suffix" value=".jsp"/><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
- <property name="viewClass">
- <value>org.springframework.web.servlet.view.InternalResourceView</value>
- </property>
- <property name="order" value="1"/>
- </bean>
- <!-- 配置freeMarker视图解析器 -->
- <bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
- <property name="contentType" value="text/html; charset=utf-8"/>
- <property name="cache" value="true" />
- <property name="suffix" value=".ftl" />
- <property name="order" value="0"/>
- </bean>
- <!-- 配置freeMarker的模板路径 -->
- <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
- <property name="templateLoaderPath">
- <value>/WEB-INF/ftl/</value>
- </property>
- <property name="freemarkerVariables">
- <map>
- <entry key="xml_escape" value-ref="fmXmlEscape" />
- </map>
- </property>
- <property name="defaultEncoding">
- <value>utf-8</value>
- </property>
- <property name="freemarkerSettings">
- <props>
- <prop key="template_update_delay">3600</prop>
- </props>
- </property>
- </bean>
- <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
- <!-- 注解支持 -->
- <mvc:annotation-driven/>
- <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
- <context:component-scan base-package="com.hl.usersmanager">
- <!-- 允许定义过滤器将基包下的某些类纳入或排除
- <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> -->
- </context:component-scan>
- </beans>
3.Controller
- package com.hl.usersmanager.controller;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.ModelMap;
- import org.springframework.web.bind.annotation.RequestMapping;
- import com.hl.usersmanager.model.Users;
- import com.hl.usersmanager.service.IUserService;
- @Controller
- public class UserController {
- // 使用注解实现自动装配 不需要再写get set方法以及在context中配置bean
- @Autowired
- private IUserService userService;
- @RequestMapping(value = "findUserByName.do")
- public String findUserByName(String name,ModelMap model) {
- Users users = userService.findUserByName(name);
- model.addAttribute("userPhone",users.getPhone());
- System.out.println("userPhone:" + users.getPhone());
- return "showUser";
- }
- @RequestMapping(value = "findAllUsers.do")
- public String findAllUsers(ModelMap model) {
- List<Users> users = userService.findAllUsers();
- model.addAttribute("users",users);
- return "listUser";
- }
- ……
- }
评论
因为这个order越小,表示优先级越高。所以,你如果想优先用Freemarker解析,那么它的order值就得比internal的小
order 配置了吗?
现在的问题是什么,报什么错误?
没 有报错,但是访问jsp,依然是根据freemarker视图解析的。这是我在jeecms-servlet-front.xml中配置 的<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="order" value="1"/>
</bean>
<bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.SimpleFreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8"/>
<property name="exposeRequestAttributes" value="false"/>
<property name="exposeSessionAttributes" value="false"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="order" value="0"/>
</bean>
你QQ多少 我加你[/quo
1074362064
order 配置了吗?
现在的问题是什么,报什么错误?
没 有报错,但是访问jsp,依然是根据freemarker视图解析的。这是我在jeecms-servlet-front.xml中配置 的<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="order" value="1"/>
</bean>
<bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.SimpleFreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8"/>
<property name="exposeRequestAttributes" value="false"/>
<property name="exposeSessionAttributes" value="false"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="order" value="0"/>
</bean>
你QQ多少 我加你
order 配置了吗?
现在的问题是什么,报什么错误?
没 有报错,但是访问jsp,依然是根据freemarker视图解析的。这是我在jeecms-servlet-front.xml中配置 的<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="order" value="1"/>
</bean>
<bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.SimpleFreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8"/>
<property name="exposeRequestAttributes" value="false"/>
<property name="exposeSessionAttributes" value="false"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="order" value="0"/>
</bean>
order 配置了吗?
现在的问题是什么,报什么错误?
我最近在用freemarker生成html,由于项目采用SpringMVC+Mybatis,只有部分页面需要静态化,不知道你有没有实际的这个方面的经验,求教一下,谢谢了。我的QQ:120294885 敬候佳音.
页面静态化,通常有两种方式。一种是整个页面静态化为html文件;另一种是整个页面还是动态文件,只是页面的部分栏目静态化为一个模块,然后在页面中进行include
freemarker 本身可以用来渲染动态页面。如果你是想用来进行页面静态化,也是可以的。大致原理是这样:在boss系统中的java端一旦有记录添加或者修改,就以某个 ftl文件作为模板,在某个指定的路径下生成一个指定格式(ftl、html均可)的文件。然后 前台系统页面中将这个生成的文件导入即可。
html文件 只能在shtml文件中才能导入
jsp页面 应该可以使用标签进行导入(我没有试过 应该可以)
当然,如果你是整个页面静态化 直接在boss系统中生成一个完整的文件即可 不需要导入。
相关推荐
本篇文章将深入探讨如何在Spring中配置Freemarker视图解析器,以及如何配置多个视图解析器以实现更灵活的应用场景。 首先,让我们了解如何配置单个Freemarker视图解析器。在Spring的配置文件(如`...
接下来,我们将深入探讨Spring MVC中的视图和视图解析器的工作原理及常见用法。 首先,我们来看视图。在Spring MVC中,视图通常是一个JSP、FreeMarker或Thymeleaf等模板引擎页面。这些模板引擎允许开发者将业务逻辑...
Freemarker与Spring MVC结合使用时,可以作为视图层,将业务数据渲染成用户友好的界面。 集成这三者的基本步骤如下: 1. **配置POM.xml**:在项目的`pom.xml`文件中添加Spring MVC、Tiles和Freemarker的依赖。确保...
将FreeMarker与Spring MVC集成,可以实现灵活的视图层渲染,提高应用的可扩展性和可维护性。 **FreeMarker 的基本概念** FreeMarker是一个基于模板的开源Java库,用于生成HTML、XML、电子邮件等静态或动态内容。它...
Spring MVC 是一个强大...在Spring MVC中集成FreeMarker,首先需要在项目的配置文件(如`servlet-context.xml`)中配置FreeMarker视图解析器。这通常包括指定模板目录、编码格式和是否缓存模板等设置。例如: ```xml ...
- 在Spring的配置文件(例如`dispatcher-servlet.xml`)中,添加Freemarker视图解析器的配置,包括视图解析器的bean定义,设置模板路径等: ```xml <bean id="freemarkerConfig" class="org.springframework.web....
1. **配置Spring MVC**:首先,我们需要在Spring的配置文件中定义DispatcherServlet,设置视图解析器为FreeMarkerViewResolver,并配置FreeMarker的配置路径。 2. **配置MyBatis**:接着,配置MyBatis的...
7. **多视图解析器**:Spring MVC支持多种视图解析器,如JSP、FreeMarker、Thymeleaf等,可以根据项目需求灵活选择。 8. **模板引擎集成**:例如,与Thymeleaf的集成使得开发者能编写声明式逻辑的模板,提高了视...
5. 视图解析:在控制器中,通过`return "viewName"`来指定视图名称,Spring MVC会根据配置自动找到对应的FreeMarker模板文件。 例如,有一个名为`StuManage`的控制器,可能包含一个用于显示学生列表的方法: ```...
- 在 Spring MVC 的配置文件(如 `servlet-context.xml`)中,我们需要添加 FreeMarker 的配置,包括视图解析器(`FreemarkerViewResolver`)和 FreeMarker 配置工厂(`FreemarkerConfig`)。 - 视图解析器用于...
此外,Spring MVC还能够与其他Spring模块(如Spring Security、Spring WebSocket等)无缝集成,提供完整的解决方案。 总之,“Spring MVC - A Tutorial”这份指南会详细讲解Spring MVC的各个核心组件和使用技巧,...
首先,Spring MVC的核心组件包括DispatcherServlet、Controller、Model-View-Controller(MVC)架构、视图解析器和数据绑定等。DispatcherServlet作为Spring MVC的前端控制器,负责接收HTTP请求,然后根据配置分发到...
Spring MVC支持多种视图技术,如JSP、FreeMarker或Thymeleaf,开发者可以根据项目需求选择合适的视图解析器。 视图解析器是Spring MVC中用于确定视图名对应的实际资源路径的组件。例如,...
Spring MVC默认提供了一些视图解析器,如InternalResourceViewResolver用于处理JSP视图,而JsonViewResolver可以处理JSON响应。但为了实现自定义多视图,我们可能需要创建自己的视图解析器或者扩展现有的。 例如,...
视图解析器(ViewResolver)根据指定的逻辑视图名查找物理视图,常见的视图技术有JSP、Thymeleaf、FreeMarker等。 Spring MVC还支持数据绑定,自动将请求参数绑定到Java对象,这极大地简化了表单提交的处理。对于...
这个"spring MVC简单示例"是为了帮助初学者理解Spring MVC的基本工作原理和配置,通过实践这个例子,你可以了解到如何创建一个简单的Controller、配置视图解析器并建立一个基本的请求处理流程。随着对Spring MVC的...
本实例探讨的是如何在Spring环境中整合Spring MVC、Spring Data JPA以及使用Freemarker或JSON作为多视图配置。让我们深入理解这些技术及其相互作用。 首先,Spring MVC是Spring框架的一部分,专门用于构建Web应用...
在提供的"spring MVC.docx"文档中,可能详细介绍了如何配置Spring MVC环境,创建Controller,处理请求,以及如何配置视图解析器等内容。对于初学者来说,这是一份很好的实践指南,可以帮助理解Spring MVC的工作原理...
5. **视图解析**: Spring MVC支持多种视图技术,如JSP、FreeMarker、Thymeleaf等。通过`viewResolver`配置,可以指定视图解析器,将视图名解析为实际的视图路径。 6. **RESTful风格的URL设计**: Spring MVC支持创建...