如何使用freemarker将jsp网页静态化?

我们做好jsp的项目后, 要将jsp页面都转换成静态的html页面, 这样有利于收索引擎收录, 用户在访问页面时不用再去读数据库中的内容, 这样也大大提高了访问页面的速度。

最常用的是用freemarker来静态化jsp页面,

1. 如何配置安装freemarker的开发环境。

--》1.1. 去freemarker官网上下载最新的freemarker的jar包(freemarker-2.3.19)http://sourceforge.net/projects/freemarker/

--》1.2. 将freemarker.jar拷到eclipse的安装目录的plugins下。

--》1.3. 将freemarker.jar加载到你的项目中。

这样就OK了。

2. freemarker在项目中如何配置和使用。

--》2.1在项目的根目录下创建pom.xml来使项目与freemarker得到关联依赖。

pom.xml的代码如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.konghao.freemarker</groupId>
  <artifactId>freemarker-hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>freemarker-hello</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.7</version>
      <scope>test</scope>
    </dependency>
    <dependency>
   <groupId>org.freemarker</groupId>
   <artifactId>freemarker</artifactId>
   <version>2.3.19</version>
 </dependency>
  </dependencies>
</project>

--》2.2 在项目中创建ftl目录, 供放ftl文件用。如: /freemarker-hello/src/main/java/ftl/01.ftl

--》2.3 freemarker的读写代码

package org.konghao.freemarker;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FreemarkerUtil {
 //getTemplate("01.ftl")
 public Template getTemplate(String name) {
  try {
   //通过Freemaker的Configuration读取相应的ftl
   Configuration cfg = new Configuration();
   //设定去哪里读取相应的ftl模板文件
   cfg.setClassForTemplateLoading(this.getClass(),"/ftl");
   //在模板文件目录中找到名称为name的文件
   Template temp = cfg.getTemplate(name);
   return temp;
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 }
 
 public void print(String name,Map<String,Object> root) {
  try {
   //通过Template可以将模板文件输出到相应的流
   Template temp = this.getTemplate(name);
   temp.process(root, new PrintWriter(System.out));
  } catch (TemplateException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 public void fprint(String name,Map<String,Object> root,String outFile) {
  FileWriter out = null;
  try {
   //通过一个文件输出流,就可以写到相应的文件中
   out = new FileWriter(new File("D:\\webservice\\ftl\\"+outFile));  //存放html文件的地方
   Template temp = this.getTemplate(name);
   temp.process(root, out);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (TemplateException e) {
   e.printStackTrace();
  } finally {
   try {
    if(out!=null) out.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
}

--》2.4 ftl文件中的代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>${user.id}-----${user.name}-----${user.age}</h1>
<#if user.age lt 12>
 ${user.name}还是一个小孩
<#elseif user.age lt 18>
 ${user.name}快成年
<#else>
 ${user.name}已经成年
</#if>
</body>
</html>

说明一下, user是一个对象里面有属性id,name,age

package org.konghao.freemarker.model;
public class User {
 private int id;
 private String name;
 private int age;
 
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public User(int id, String name, int age) {
  super();
  this.id = id;
  this.name = name;
  this.age = age;
 }
 public User() {
  super();
  // TODO Auto-generated constructor stub
 }
}


--》2.5 建立测试类

package org.konghao.freemarker.test;

import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;
import org.konghao.freemarker.FreemarkerUtil;
import org.konghao.freemarker.model.Article;
import org.konghao.freemarker.model.Channel;
import org.konghao.freemarker.model.Student;
import org.konghao.freemarker.model.User;

public class TestFreemarker {
 FreemarkerUtil fu;
 Map<String,Object> root = null;
 
 @Before
 public void setUp() {
  fu = new FreemarkerUtil();
  root = new HashMap<String,Object>();
 }

 @Test
 /*读取对象中的属性的方法*/
 public void test02() {
  //freemarker还可以输出相应的对象
//  root.put("user", new User(1,"李四",16));
  User _User=new User();
  _User.setId(1);
  _User.setName("jason");
  _User.setAge(30);
  root.put("user", _User);
  sprint("03.ftl");
  fprint("03.ftl","03.html");
 }

 private void sprint(String name) {
  fu.print(name, root);
 }
 private void fprint(String name,String filename) {
  fu.fprint(name, root, filename);
 }
}

可去下载一份 FreeMarker 手册FreeMarker_Manual_zh_CN.pdf ,里面讲得非常祥细。

 转载请注明出自同行网,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中使用 JSP 页面时,通常不推荐使用静态页面存放 JSP,而是将 JSP 页面放在 `/WEB-INF/jsp/` 目录下,由 Spring Boot 的视图解析器进行解析。如果你非常希望使用静态页面存放 JSP,可以按照以下步骤进行操作。 1. 在 application.properties 文件中配置 Spring Boot 的 WEB 静态资源路径: ``` spring.web.resources.static-locations=classpath:/static/ ``` 2. 在 static 目录下创建一个 html 页面,如 `test.html`。 3. 在 `test.html` 页面中引入 JSP 页面,如下所示: ``` <%@ page contentType="text/html;charset=UTF-8" %> <!DOCTYPE html> <html> <head> <title>My Test Page</title> </head> <body> <jsp:include page="/WEB-INF/jsp/test.jsp"> <jsp:param name="param1" value="value1" /> <jsp:param name="param2" value="value2" /> </jsp:include> </body> </html> ``` 在该页面中,我们使用了 `<jsp:include>` 标签来引入 JSP 页面。需要注意的是,`page` 属性需要指定 JSP 页面的路径,而路径需要以 `/WEB-INF/jsp/` 开头。同时,我们也传递了两个参数,分别是 `param1` 和 `param2`。 4. 在 `test.jsp` 页面中获取传递过来的参数值,如下所示: ``` <% String param1 = request.getParameter("param1"); String param2 = request.getParameter("param2"); %> ``` 这样就实现了使用静态页面存放 JSP 并传递参数的功能。需要注意的是,如果使用 Thymeleaf、Freemarker 等模板引擎进行视图层的渲染,就不需要进行上述步骤的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值