`

Spring MVC配置 freemarker

 
阅读更多
配置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>
项目结构图:

 

  • 大小: 10.2 KB
分享到:
评论

相关推荐

    spring mvc +freemarker不错的mvc搭配

    Spring MVC 是一个强大...在Spring MVC中集成FreeMarker,首先需要在项目的配置文件(如`servlet-context.xml`)中配置FreeMarker视图解析器。这通常包括指定模板目录、编码格式和是否缓存模板等设置。例如: ```xml ...

    Spring MVC整合FreeMarker

    - 在 Spring MVC 的配置文件(如 `servlet-context.xml`)中,我们需要添加 FreeMarker 的配置,包括视图解析器(`FreemarkerViewResolver`)和 FreeMarker 配置工厂(`FreemarkerConfig`)。 - 视图解析器用于...

    Spring MVC and FreeMarker Sample

    完成以上步骤后,启动Spring MVC应用,访问配置的URL(如:http://localhost:8080/example/index),你将看到由FreeMarker渲染的动态页面。 **6. 源码分析** 在提供的压缩包`Freemarker_SpringMVC_example`中,...

    spring MVC + freeMarker

    2. 配置Spring MVC:在Spring的配置文件(如:applicationContext.xml或配置类)中,需要配置FreeMarkerViewResolver,指定FreeMarker模板的位置、编码方式、默认后缀等参数。 3. 创建FreeMarker模板:在项目资源...

    spring mvc freemarker 简单例子

    Spring MVC 和 Freemarker 是两种广泛应用于Java Web开发的技术。Spring MVC 是一个基于Spring框架的Model-View-Controller架构,用于构建高效、灵活的Web应用程序。而Freemarker 是一款强大的模板引擎,它与后端...

    spring mvc +freemarker不错的mvc搭配1.1

    spring mvc +freemarker不错的mvc搭配 原文: http://lavafree.iteye.com/blog/1096699 一、原来的程序有问题,导致maven无法编译运行。修改后解决了maven无法编译打包运行的问题,运行通过。 1.pom.xml 增加了必需的...

    spring mvc mybatis freemarker 开发CMS代码

    【标题】"Spring MVC MyBatis Freemarker 开发CMS代码" 涉及到的是一个基于Java技术栈的内容管理系统(CMS)开发项目。这个项目利用了Spring MVC作为控制层框架,MyBatis作为数据访问层框架,以及Freemarker作为视图...

    Spring3.2.1MVC+Freemarker简单示例

    配置Spring MVC和Freemarker集成的步骤如下: 1. **添加依赖**:在项目中添加Spring MVC和Freemarker的依赖库。确保`pom.xml`或`build.gradle`文件包含相应版本的依赖。 2. **配置Spring MVC**:在`web.xml`中配置...

    Spring 3 mvc + Freemarker 框架例子

    然后,创建`spring-mvc-config.xml`配置文件,配置视图解析器以支持Freemarker: ```xml &lt;bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"&gt; ...

    spring MVC3 集成 freemarker

    **Spring MVC3 集成 FreeMarker 概述** Spring MVC 是一个强大的MVC框架,用于构建基于Java的Web应用程序。它提供了模型、视图和控制器的分离,使得开发过程更加模块化,易于维护。而FreeMarker则是一个模板引擎,...

    spring mvc freemarker 自定义标签

    下面将详细介绍Spring MVC与Freemarker自定义标签的使用。 首先,我们需要了解Freemarker的基础。Freemarker是一个基于模板的语言,它的主要任务是根据数据模型生成输出。在Spring MVC中,Freemarker模板通常用于...

    spring mvc, tiles, freemarker集成

    1. **配置POM.xml**:在项目的`pom.xml`文件中添加Spring MVC、Tiles和Freemarker的依赖。确保版本兼容,通常最新的稳定版本是首选。 2. **配置Spring MVC**:在Spring的配置文件(如`app-servlet.xml`)中,配置...

    spring mvc 3.0-mybatis-freemarker整合

    1. **配置Spring MVC**:首先,我们需要在Spring的配置文件中定义DispatcherServlet,设置视图解析器为FreeMarkerViewResolver,并配置FreeMarker的配置路径。 2. **配置MyBatis**:接着,配置MyBatis的...

    整合 freemarker +spring security + spring MVC + spring DATA jpa 前端jtable 简单的crud

    项目文件"jinandi"可能包含了该项目的所有源码,包括Freemarker模板文件、Spring配置文件、Java源代码以及JTable相关的JavaScript和CSS文件。开发者可以通过阅读这些文件,了解各个组件是如何协同工作的,从而学习和...

    最全最经典spring-mvc教程

    这个"最全最经典spring-mvc教程"应该会详细讲解上述所有概念,并可能通过实例演示如何配置、创建和调试Spring MVC项目。对于想要深入理解和使用Spring MVC的开发者来说,这是一份非常宝贵的资源。通过学习这个教程,...

    Spring MVC 4.2.3

    7. **多视图解析器**:Spring MVC支持多种视图解析器,如JSP、FreeMarker、Thymeleaf等,可以根据项目需求灵活选择。 8. **模板引擎集成**:例如,与Thymeleaf的集成使得开发者能编写声明式逻辑的模板,提高了视...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    另外,Spring Boot的出现简化了Spring MVC的配置,通过自动配置和起步依赖,使得搭建Spring MVC项目变得更加简单。 除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@...

    spring mvc+freemaker 开发实例

    在Spring MVC中,我们可以配置FreeMarker视图解析器,使Spring能够找到并解析模板文件。FreeMarker模板文件通常以`.ftl`为扩展名,其中可以包含变量和控制结构,这些变量会由Spring MVC在运行时用实际的值替换。 ...

    spring mvc 4.0

    7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、Thymeleaf等,视图解析器可以根据配置自动选择合适的视图技术。 8. **异步处理**:Spring MVC 4.0引入了异步请求处理,通过@...

Global site tag (gtag.js) - Google Analytics