论坛首页 Java企业应用论坛

初学freemarker,有一些问题没弄明白望大家解答一下

浏览 4272 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-09-27  
手上正在做一个小网站,ssh架构,起初没有考虑过页面的静态化处理,现在网站基本成型了,客户方又提出了需要首页静态化。不用全站静态化,只需要首页jsp转为html就可以。在网上找了一些静态化方法,感觉用freemarker合适一些,由于以前未接触过freemarker,现在有一些问题不太了解,希望大家能指点一二。
1.首页现在是jsp文件,布局样式都已固定下来了,用freemarker制作模板的话这外些部的css,js之类的文件还可不可以直接引用了?
2.页面使用了include标签 包含其他jsp文件,使用模板生成html时候这些引用的文件可以生成出来么?
3.原页面数据部分ognl标签使用的比较多,freemarker模板里边可以继续使用吧。
4.生成的html文件需要定时更新一次,用什么方法做比较好呢
   发表时间:2012-09-27  
用urlrewriter 不更快更省事
0 请登录后投票
   发表时间:2012-09-27  
1.可以

2.不可以

3.可以(rootMap的key,value保持与原来的名称一致就行了)

4.Quartz
0 请登录后投票
   发表时间:2012-09-27  
这个简单一个filter搞定,不要把那么大一个东西加进来就为解决一个首页静态化。
filter拦截首页请求验证是否已生成静态化(就是判断首页HTML文件存不存在),如果没有就生成静态页面(其实就是简单的将响应保存到HTML文件)
可以加个缓存变量控制静态页失效时间

这是思路具体实现坛子里都有,多找找
0 请登录后投票
   发表时间:2012-09-27   最后修改:2012-09-27
1,那些js css的可以直接引用。
2,那些 jsp也要用freemarker页面 才可以include
3,一样可以使用 不过一般都是用freemarker的
4,定时更新, 这种情况可能不一定 可能即时的,你可以用jms activemq中间件  后台发送消息 告诉前台要生成页面了。
0 请登录后投票
   发表时间:2012-09-27  
js, css等完全不用改变, 模板页就是个普通的HTML页, 然后把需要输出的数据放到一个Map中, 填充到模板即可, 我现在也在使用freemarker生成静态页
你可以使用Quartz定时更新首页, 很方便
0 请登录后投票
   发表时间:2012-09-28   最后修改:2012-09-28
LZ为何要生成静态页面呢,你可以让Freemarker解析模板,然后生成HTML的字符串,填充到主页面的DIV中,这样就不用考虑每次都要刷新HTML页面了,写个方法给你看哈:
	/**
	 * 这个方法就是初始化模板引擎的,传入模板名称,他会解析模板,并最终渲染好,返回字符串
	 * @param templateName 传入模板文件名称
	 * @param templatePath 模板文件的绝对路径
	 * @param map map绑定的变量
	 * @param context Servlet Context
	 * @return 返回渲染的HTML字符串
	 * @throws IOException
	 * @throws TemplateException
	 */
	public String initialize(String templateName, String templatePath, 
			Map<String, Object> map, ServletContext context) 
	throws IOException, TemplateException {
		Configuration config = new Configuration();
		config.setServletContextForTemplateLoading(context, templatePath);
		config.setEncoding(Locale.getDefault(), "UTF-8");
		Template template = config.getTemplate(templateName);
		template.setEncoding("UTF-8");
		StringWriter result = new StringWriter();
		template.process(map, result);
		return result.toString();
	}

然后,你在表现层的Action里面可以这么写:
        // 初始化一个Map对象,将变量绑定到Map中
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("变量a", 变量a);
        map.put("变量b", 变量b);
        ......
        // 
        String result = FreemarkerUtil.initialize("template.htm", "/root/template_path", map,
                    request.getSession().getServletContext());
        response.getWriter().write(result);
        // 然后你在JSP页面指定div位置请求这个Action就可以了。
0 请登录后投票
   发表时间:2012-09-28  
只有首页就直接URL访问首页的动态地址将网页内容保存为html就可以了。

首页复杂一点Freemarker要做模板麻烦死了。我反正是懒得写。
0 请登录后投票
   发表时间:2012-09-28  
public static void main(String[] args) {
		try {
			URL url = new URL("http://www.kktrip.com/");
			URLConnection con = url.openConnection();
			InputStream is = con.getInputStream();
			byte[] bs = new byte[1024];
			int len;
			OutputStream os = new FileOutputStream("C:\\index.html");
			while ((len = is.read(bs)) != -1) {
				os.write(bs, 0, len);
			}
			os.close();
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("完毕");
		}
	}


代码是写着玩的,别当真。
  • 大小: 184.9 KB
0 请登录后投票
   发表时间:2012-09-30  
yanxiansheng 写道
public static void main(String[] args) {
		try {
			URL url = new URL("http://www.kktrip.com/");
			URLConnection con = url.openConnection();
			InputStream is = con.getInputStream();
			byte[] bs = new byte[1024];
			int len;
			OutputStream os = new FileOutputStream("C:\\index.html");
			while ((len = is.read(bs)) != -1) {
				os.write(bs, 0, len);
			}
			os.close();
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("完毕");
		}
	}


代码是写着玩的,别当真。



正准备回复来着,发现楼上的已经把我的想法连着“代码”都弄了。

写个小程序去抓网页,然后存下来,就完成“静态”要求了。至于更新么,也不用复杂,用windows的计划任务,xUnix的crontab定时跑一下就行了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics