配置spring MVC
<!-- freemarker start -->
<!--freemarker页面解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix" value=".ftl"></property>
<property name="contentType" value="text/html;charset=UTF-8" />
<!-- 将Spring的FreeMarkerView改成我们扩展的View -->
<property name="viewClass" value="com.bm.biz.controller.MyFreeMarkerView" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="requestContextAttribute" value="request" />
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
<!--配置Freemarker -->
<bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!-- 模版页面存放的位置 -->
<property name="templateLoaderPath" value="/WEB-INF/ftl/"></property>
<property name="templateLoaderPaths">
<list>
<value>/WEB-INF/ftl/</value>
</list>
</property>
<property name="freemarkerSettings">
<props>
<!-- 刷新间隔,秒 -->
<prop key="template_update_delay">20</prop>
<prop key="defaultEncoding">UTF-8</prop>
<prop key="auto_import">common/spring.ftl as spring</prop> <!-- spring 国际化相关 -->
<prop key="locale">zh_CN</prop><!-- 本地国际化 -->
<prop key="whitespace_stripping">true</prop>
<prop key="boolean_format">true,false</prop>
</props>
</property>
</bean>
<!-- freemarker end -->
如果能生成、但是转发不了 在spring里把生成的静态文件 放生
<mvc:resources mapping="/staticPage/**" location="/staticPage/" />
注:spring MVC 配置视图的时候,在 freemarker 配置之后配置
package com.bm.biz.controller;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.support.RequestContextUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerView;
import freemarker.template.SimpleHash;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
* 静态化
* @author zjs
* @date 2017年2月13日 15:43:50
*
*/
public class MyFreeMarkerView extends FreeMarkerView{
@Override
protected void doRender(Map<String, Object> model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Locale locale = RequestContextUtils.getLocale(request);
model.put("localeLan", locale);
// Expose model to JSP tags (as request attributes).
exposeModelAsRequestAttributes(model, request);
// Expose all standard FreeMarker hash models.
SimpleHash fmModel = buildTemplateModel(model, request, response);
if (logger.isDebugEnabled()) {
logger.debug("Rendering FreeMarker template [" + getUrl() + "] in FreeMarkerView '" + getBeanName() + "'");
}
/*
* 默认生成静态文件,除非在编写ModelAndView时指定CREATE_HTML = false,
* 这样对静态文件生成的粒度控制更细一点
* 例如:ModelAndView mav = new ModelAndView("search");
* mav.addObject("CREATE_HTML", false);
*/
if(Boolean.FALSE.equals(model.get("CREATE_HTML"))){
processTemplate(getTemplate(locale), fmModel, response);
}else{
createHTML(getTemplate(locale),locale, fmModel, request, response);
}
}
public void createHTML(Template template,Locale locale, SimpleHash model,HttpServletRequest request,
HttpServletResponse response) throws IOException, TemplateException, ServletException {
String fileName="";
String requestURI = request.getRequestURI();
String[] urlSplit = requestURI.split("/");
for (String url : urlSplit) {
fileName = fileName + url;
}
String staticPagePath = "/staticPage/" + fileName+"_"+locale+".html";
// 静态页面绝对路径
String basePath = request.getSession().getServletContext().getRealPath("/");
String htmlPath = basePath + staticPagePath;
System.out.println("htmlPath="+htmlPath);
File htmlFile = new File(htmlPath);
if(!htmlFile.getParentFile().exists()){
htmlFile.getParentFile().mkdirs();
}
if(!htmlFile.exists()){
htmlFile.createNewFile();
}
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
//处理模版
template.process(model, out);
out.flush();
out.close();
/*将请求转发到生成的htm文件*/
request.getRequestDispatcher(staticPagePath).forward(request, response);
}
/**
* 计算要生成的<strong>静态</strong>文件相对路径.
*/
private String getRequestHTML(HttpServletRequest request) {
//web应用名称,部署在ROOT目录时为空
String contextPath = request.getContextPath();
//web应用/目录/文件.do
String requestURI = request.getRequestURI();
//basePath里面已经有了web应用名称,所以直接把它replace掉,以免重复
requestURI = requestURI.replaceFirst(contextPath, "");
//将请求改为.htm,稍后将请求转发到此htm文件
requestURI += ".htm";
return requestURI;
}
}
package com.bm.biz.controller;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.bm.biz.dao.UsUserMapper;
@Controller
@RequestMapping("/test")
public class TestController {
private static Logger log = Logger.getLogger(TestController.class);
//private static final Logger logger = (Logger) LoggerFactory.getLogger(TestController.class);
@Autowired(required=true)
@Qualifier(value="usUserMapper")
private UsUserMapper usUserMapper;
/* @RequestMapping("test")
@ResponseBody
public Map<Object, Object> testJackson(Integer userId){
Map<Object, Object> map = new HashMap<>();
map.put("df", "敌法师");
UsUser user = usUserMapper.selectByPrimaryKey(userId);
log.error("+++++++++++++++++");
log.info("-------------------------------------");
log.info("sdfs");
log.error("dds");
System.out.println(JSON.toJSONString(user));
return map;
}*/
@RequestMapping("index")
public ModelAndView index(){
ModelAndView modelAndView = new ModelAndView("test");
modelAndView.addObject("content", "网站标题-没生成");
//当设置false时不生成静态页面
modelAndView.addObject("STATIC_HTML", false);
return modelAndView;
}
@RequestMapping("testHtml")
public String test(Model model){
model.addAttribute("content", "test Model");
return "test";
}
}
<#import "./common/spring.ftl" as spring />
<!DOCTYPE html>
<#--
<script type="text/javascript" src="./resources/jquery.min.js"></script>
-->
<body>
<#assign ctx=request.contextPath/>
${ctx}
<br>
${content}</body></html>
项目结构图:
相关推荐
Spring MVC 是一个强大...在Spring MVC中集成FreeMarker,首先需要在项目的配置文件(如`servlet-context.xml`)中配置FreeMarker视图解析器。这通常包括指定模板目录、编码格式和是否缓存模板等设置。例如: ```xml ...
- 在 Spring MVC 的配置文件(如 `servlet-context.xml`)中,我们需要添加 FreeMarker 的配置,包括视图解析器(`FreemarkerViewResolver`)和 FreeMarker 配置工厂(`FreemarkerConfig`)。 - 视图解析器用于...
完成以上步骤后,启动Spring MVC应用,访问配置的URL(如:http://localhost:8080/example/index),你将看到由FreeMarker渲染的动态页面。 **6. 源码分析** 在提供的压缩包`Freemarker_SpringMVC_example`中,...
2. 配置Spring MVC:在Spring的配置文件(如:applicationContext.xml或配置类)中,需要配置FreeMarkerViewResolver,指定FreeMarker模板的位置、编码方式、默认后缀等参数。 3. 创建FreeMarker模板:在项目资源...
Spring MVC 和 Freemarker 是两种广泛应用于Java Web开发的技术。Spring MVC 是一个基于Spring框架的Model-View-Controller架构,用于构建高效、灵活的Web应用程序。而Freemarker 是一款强大的模板引擎,它与后端...
spring mvc +freemarker不错的mvc搭配 原文: http://lavafree.iteye.com/blog/1096699 一、原来的程序有问题,导致maven无法编译运行。修改后解决了maven无法编译打包运行的问题,运行通过。 1.pom.xml 增加了必需的...
【标题】"Spring MVC MyBatis Freemarker 开发CMS代码" 涉及到的是一个基于Java技术栈的内容管理系统(CMS)开发项目。这个项目利用了Spring MVC作为控制层框架,MyBatis作为数据访问层框架,以及Freemarker作为视图...
配置Spring MVC和Freemarker集成的步骤如下: 1. **添加依赖**:在项目中添加Spring MVC和Freemarker的依赖库。确保`pom.xml`或`build.gradle`文件包含相应版本的依赖。 2. **配置Spring MVC**:在`web.xml`中配置...
然后,创建`spring-mvc-config.xml`配置文件,配置视图解析器以支持Freemarker: ```xml <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> ...
**Spring MVC3 集成 FreeMarker 概述** Spring MVC 是一个强大的MVC框架,用于构建基于Java的Web应用程序。它提供了模型、视图和控制器的分离,使得开发过程更加模块化,易于维护。而FreeMarker则是一个模板引擎,...
下面将详细介绍Spring MVC与Freemarker自定义标签的使用。 首先,我们需要了解Freemarker的基础。Freemarker是一个基于模板的语言,它的主要任务是根据数据模型生成输出。在Spring MVC中,Freemarker模板通常用于...
1. **配置POM.xml**:在项目的`pom.xml`文件中添加Spring MVC、Tiles和Freemarker的依赖。确保版本兼容,通常最新的稳定版本是首选。 2. **配置Spring MVC**:在Spring的配置文件(如`app-servlet.xml`)中,配置...
1. **配置Spring MVC**:首先,我们需要在Spring的配置文件中定义DispatcherServlet,设置视图解析器为FreeMarkerViewResolver,并配置FreeMarker的配置路径。 2. **配置MyBatis**:接着,配置MyBatis的...
项目文件"jinandi"可能包含了该项目的所有源码,包括Freemarker模板文件、Spring配置文件、Java源代码以及JTable相关的JavaScript和CSS文件。开发者可以通过阅读这些文件,了解各个组件是如何协同工作的,从而学习和...
这个"最全最经典spring-mvc教程"应该会详细讲解上述所有概念,并可能通过实例演示如何配置、创建和调试Spring MVC项目。对于想要深入理解和使用Spring MVC的开发者来说,这是一份非常宝贵的资源。通过学习这个教程,...
7. **多视图解析器**:Spring MVC支持多种视图解析器,如JSP、FreeMarker、Thymeleaf等,可以根据项目需求灵活选择。 8. **模板引擎集成**:例如,与Thymeleaf的集成使得开发者能编写声明式逻辑的模板,提高了视...
另外,Spring Boot的出现简化了Spring MVC的配置,通过自动配置和起步依赖,使得搭建Spring MVC项目变得更加简单。 除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@...
在Spring MVC中,我们可以配置FreeMarker视图解析器,使Spring能够找到并解析模板文件。FreeMarker模板文件通常以`.ftl`为扩展名,其中可以包含变量和控制结构,这些变量会由Spring MVC在运行时用实际的值替换。 ...
7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,视图解析器可以根据配置自动选择合适的视图技术。 8. **异步处理**:Spring MVC 4.0引入了异步请求处理,通过@...