利用Freemarker生成html静态页面,也可利用模版功能生成不同格式的文件




利用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。

 本文地址:http://www.osblog.net/code/117.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值