利用Freemarker生成html静态页面,也可利用模版功能生成不同格式的文件
通过java生成文件毫无疑问会使用到流,对于流在该文章中不做重点解释。首先我们做一个准备工作,搭建你的项目,采用Freemarker模版技术,首先给大家展示一个Freemarker文件。
1
2
预定价格: ${trip.price!'面议'}元 目的地: ${trip.toCity!''} 行程天数:${trip.tripDay!'待定'} 提前预定天数: 建议提前一周报名 出团日期:${trip.toTirpTime} 友谊
模版建好了,我们接下来写一个工具类,通过该工具类生成html文件。FreeMarkerUtil.java 此处我们只列出主要用到的方法。
public static void writeTo(ServletContext context, Mapmap, String templatePath,
String templateName, String htmlPath) throws IOException, TemplateException {
Configuration freemarkerCfg = new Configuration();
// 设置要解析的模板所在的目录,并加载模板文件
freemarkerCfg.setServletContextForTemplateLoading(context, templatePath);
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
// 获取模板,并设置编码方式
Template template = freemarkerCfg.getTemplate(templateName);
template.setEncoding("UTF-8");
File htmlFilel = new File(context.getRealPath("") +File.separator +"html"+File.separator+"channel");
if(! htmlFilel.exists()) {
htmlFilel.mkdir();
}
File htmlFile = new File(context.getRealPath("") + File.separator + htmlPath);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlFile), "UTF-8"));
// 合并数据模型与模板
template.process(map, out);
out.flush();
out.close();
}
需要导入的类,这些都在freemarker-2.3.16.jar 包中了:
1
2
3
4
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
接下来就是业务处理了,其实很简单的没有任何的技术含量,这个功能也是在使用Freemarker做模版视图较多使用的,此处为了让学习的人看的明白,业务和控制层都写在一个方法了,容易理解。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public ModelAndView doAdd(HttpServletRequest request,
MultipartHttpServletRequest filerequest, Trip trip)
throws ParseException {
Listfile1 = filerequest.getFiles("file1");
Listfile2 = filerequest.getFiles("file2");
if (file1.size() > 0) {
String titleImg = "";
titleImg = uploadImage(request, file1.get(0));
if (null != titleImg && !titleImg.equals("")) {
trip.setImgUrl(titleImg);
}
}
if (file2.size() > 0) {
String titleImg = "";
titleImg = uploadImage(request, file2.get(0));
if (null != titleImg && !titleImg.equals("")) {
trip.setImgUrl2(titleImg);
}
}
trip.setInputTime(new Date());
File directory = new File(request.getSession().getServletContext()
.getRealPath("/")
+ "trip");
if (!directory.exists()) {
directory.mkdirs();
}
DateFormat format1 = new SimpleDateFormat("yyyyMMddhhmm");
String dateStr = format1.format(new Date());
String html = "trip" + File.separator + trip.getChannelId() + "-"
+ trip.getCityId() + "-" + dateStr + ".html";
trip.setUrlStr(html);
PageBean pageBean3 = tripService.getTriplist(0, 10);
ListtripList = pageBean3.getBeanList();
PageBean pageBean2 = newsService.getTripNewslist(1, 10);
ListtripNewsList = pageBean2.getBeanList();
PageBean pageBean22 = newsService.getTripNews2list(1, 10);
ListtripNews2List = pageBean22.getBeanList();
Map map = new HashMap();
map.put("tripNews2List", tripNews2List);
map.put("tripList", tripList);
map.put("tripNewsList", tripNewsList);
map.put("trip", trip);
map.put("base", request.getContextPath());
try {
FreeMarkerUtil.writeTo(request.getSession().getServletContext(),
map, "/templates", "trip.ftl", html);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tripService.save(trip);
return new ModelAndView("redirect:/trip/page.shtml?page_now=1");
}
好了,这样你就可以写你的静态网站了。
也许有人现在也不知道生成静态的作用到底是什么呢?
1、访问的时候不需要在操作数据库了。
2、对于搜索引擎来说html静态页面更加的友好。
3、访问速度变的很快。
等等,大家自己感受一下。有需要可留言要源码demo。