资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
这里对 freemarker的代码进行了修改,效果:1,请求.do 的 URL时直接生成对应的.htm 文件,并将请求转发到该 htm文件2,自由控制某个页面是否需要静态化原理:对org.springframework.web.servlet.view.freemarker.FreeMarkerView类进行扩展第一步:在 web.xml中将*.do 请求交给 SpringMVCXML codedemoorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/demo-servlet.xml1demo*.do第二步:配置/WEB-INF/demo-servlet.xmlXML code 1UTF-8第三步:新建 package,com.myview,新建一个 MyFreeMarkerView,继承自org.springframework.web.servlet.view.freemarker.FreeMarkerView,在这里对原类进行扩展Java codepackage com.myview;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;public class MyFreeMarkerView extends FreeMarkerViewOverrideprotected void doRender(Map model,HttpServletRequest request, HttpServletResponse response)throws Exception / 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() + );/ Grab the locale-specific version of the template.Locale locale = RequestContextUtils.getLocale(request); /* 默认生成静态文件,除非在编写 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);elsecreateHTML(getTemplate(locale), fmModel, request, response);public void createHTML(Template template, SimpleHash model,HttpServletRequest request,HttpServletResponse response) throws IOException, TemplateException, ServletException /站点根目录的绝对路径String basePath = request.getSession().getServletContext().getRealPath(/);String requestHTML = this.getRequestHTML(request);/静态页面绝对路径String htmlPath = basePath + requestHTML;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(requestHTML).forward(request, response);/* 计算要生成的静态文件相对路径* 因为大家在调试的时候一般在 Tomcat的 webapps下面新建站点目录的,* 但在实际应用时直接布署到 ROOT目录里面,这里要保证路径的一致性。* param request HttpServletRequest* return /目录/*.htm*/private String getRequestHTML(HttpServletRequest request)/web应用名称,部署在 ROOT目录时为空String contextPath = request.getContextPath();/web应用/目录/文件.doString requestURI = request.getRequestURI();/basePath里面已经有了 web应用名称,所以直接把它replace掉,以免重复requestURI = requestURI.replaceFirst(contextPath, );/将.do 改为.htm,稍后将请求转发到此 htm文件requestURI = requestURI.substring(0, requestURI.indexOf(.) + .htm;return requestURI;到这里就基本完成了。一个 Controller类的例子:Java codepackage com.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;Controllerpublic class IndexController RequestMapping(/index)public ModelAndView index()ModelAndView mav = new ModelAndView(index);mav.addObject(title, 网站标题);/在这里可以控制不生成静态 htmmav.addObject(CREATE_HTML, false);return mav;RequestMapping(/abc/index)public ModelAndView abcindex()ModelAndView mav = new ModelAndView(index);/默认生成 htm文件mav.addObject(title, 网站标题);return mav;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号