1、使用freemarker

当用户访问指定的servlet时,servlet加载指定的模板文件。并从数据库,或其他指定的地方获取目标数据,然后,将数据填充到模板文件中。将填充好的文件保存成静态页面。将用户的请求重定向到保存好的静态文件。

新建servlet文件FreeMarkerServle.java

public class FreeMarkerServlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doPost(request, response);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        Map
data = new HashMap
(); data.put("name", "张三"); data.put("address", "北京海淀"); data.put("name1", "李四"); data.put("address1", "上海"); List
persons = new ArrayList
(); for (int i = 1; i <= 30; i++) { Person p = new Person(); p.setId(i); p.setName("张三" + i); p.setAge(23); p.setSex("男"); persons.add(p); } data.put("persons", persons); Create4Static.createHTML4FreeMarker(request.getSession() .getServletContext(), data, "success.ftl", "free.html"); response.sendRedirect("html/free.html"); }}

编辑模版文件success.ftl

            
<#--插值--> 姓名: ${name}
地址: ${address}
姓名1:${name1}
地址1:${address1}
<#--定义变量--> <#assign x=2.588> <#--输出变量的值--> 变量的值:${x}
<#--保留两位小数--> 变量的值保留两位小数:#{x;M2}
<#assign theAge=23> <#--判断语句--> <#if (theAge>60)>老年人 <#elseif (theAge>40)>中年人 <#elseif (theAge>20)>青年人 <#else> 少年
<#assign theName="浪曦"> <#switch theName> <#case ""> 什么也没有 <#break> <#case "浪曦"> 浪曦精神,技术为王! <#break> <#default> 干嘛呀!
<#--引用外部文件--> <#include "macroTest.ftl"> <#--引用自定义的函数--> <@showPerson persons/> macroTest.ftl文件:<#macro showPerson persons>
<#--遍历集合元素---> <#list persons as person>
编号 姓名 性别 年龄
${person.id} ${person.name} ${person.sex} ${person.age}

2、使用mapping方式生成静态页原理

spacer.gif

根据已有的jsp页面,动态生成静态的html页面。然后,将用户请求重定向到生成的静态页面。如果,用户请求的jsp页面对应的html页面已经生成,则不需要重新生成,直接重定向过去即可。但是,一旦数据库的数据发生变化。必须要将已经过时的静态页面删除,利用jsp页面重新生成静态页面。

Jsp页面:success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>      My JSP 'success.jsp' starting page                                      ${requestScope.hello }    
ID 名字 性别 年龄
${p.id} ${p.name} ${p.sex} ${p.age}

Servlet页面:MappingServlet.java

public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        //将所有jsp页面中用到的动态信息,存放到request中去,用request作为媒介来传递信息        request.setAttribute("hello", "Hello , World!");//      request.getSession().setAttribute("hello", "你好!");        List
persons = new ArrayList
(); for(int i = 1; i <= 30; i++){ Person p = new Person(); p.setId(i); p.setName("张三" + i); p.setAge(23); p.setSex("男"); persons.add(p); } request.setAttribute("persons", persons); //需要静态化的页面的路径 String jsp_url = "/" + "success" + ".jsp"; //目标静态页面的路径 String html_url = request.getSession().getServletContext().getRealPath("")+"\\" +"\\html\\success"+".html"; //创建静态页面 Create4Static.createHTML4Mapping(request, response, jsp_url, html_url); //重定向到生成好的静态页面 response.sendRedirect("html/success.html"); }

3、使用URLWriter

如果客户端直接输入**.html的话,怎么导航到servlet中去?如果需要传入Parameter,该怎么处理?

使用URLWriter

1、添加到工程中。即:将URLWriter.jar拷贝到WebRoot文件下的WEB-INF文件夹下的lib文件夹中。

2、配置web.xml文件。在web.xml文件中添加一个UrlRewriteFilter

UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
logLevel
WARN
UrlRewriteFilter
/*

3、WEB-INF目录下添加urlrewriter.xml配置文件

/([0-9]+)_([a-z0-9]+)_([a-z0-9]+).html
/free?test1=$2&test2=$3&test3=$1

4、修改servlet文件(FreeMarkerServle.java),用来测试

public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                  String s1 = request.getParameter("test1");        String s2 = request.getParameter("test2");        String s3 = request.getParameter("test3");        System.out.println(s1);        System.out.println(s2);        System.out.println(s3);        Map
data = new HashMap
(); data.put("name", "张三"); data.put("address", "北京海淀"); data.put("name1", "李四"); data.put("address1", "上海"); List
persons = new ArrayList
(); for (int i = 1; i <= 30; i++) { Person p = new Person(); p.setId(i); p.setName("张三" + i); p.setAge("23"); p.setSex("男"); persons.add(p); } data.put("persons", persons); CreateStaticHTML.createHTML4FreeMarker(request.getSession() .getServletContext(), data, "success.ftl", "free.html"); response.sendRedirect("html/free.html"); }

然后在地址栏敲入

OK!!!