网站首页静态化

关于页面静态化的处理,自己有一下几点理解,还请多多指教。 

1、首页可以采用freemarker来静态化,也可以采用流来处理,还可以通过oscache等方式来处理。 

2、一些二级页面和一些动态页面可以采用urlrewriter来实现伪静态+缓存来实现速度上的优化。一方面可以针对seo优化,用户体验上也不错。 

3、还是针对第二点,一些二级页面和一些动态页面也都可以使用freemarker来做处理。速度上差距不大,因为2有缓存的支持。

做了个简单的例子,针对访问页面的静态化,例如访问index.jsp则生成index.html然后执行跳转。代码如下:


public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		String currentURL = req.getRequestURI();
		// 得到访问文件名. 例如 /index.jsp
		String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
				currentURL.length());
		// 对文件名进行拆分. 先得到/index 然后在得到index
		String splitName = targetURL.split("\\.")[0];
		String name = splitName.split("/")[1];
		String fileName = name + ".html";
		String path = protDirPath + fileName;
		// 判断文件是否存在. 存在的话则执行跳转. 否则执行生成.
		File file = new File(path);
		if (!file.exists()) {
			System.out.println("生成HTML文件,执行跳转..");
			PrintWriter out = response.getWriter();
			FileCaptureResponseWrapper responseWrapper = new FileCaptureResponseWrapper(
					(HttpServletResponse) response);
			chain.doFilter(request, responseWrapper);
			String html = responseWrapper.toString();
			System.out.println(html);
			// 得到的html页面结果字符串
			responseWrapper.writeFile(path);
			responseWrapper.writeResponse(out);
			res.setHeader("REFRESH", "0;URL=" + req.getContextPath() + "/"
					+ fileName);
		} else {
			System.out.println("目标文件已经存在,执行跳转...");
			res.setHeader("REFRESH", "0;URL=" + req.getContextPath() + "/"
					+ fileName);
		}
	}
                  
public class FileCaptureResponseWrapper extends HttpServletResponseWrapper {
	private CharArrayWriter output;
	public String toString() {
		return output.toString();
	}
	public FileCaptureResponseWrapper(HttpServletResponse response) {
		super(response);
		output = new CharArrayWriter();
	}
	public PrintWriter getWriter() {
		return new PrintWriter(output);
	}
	public void writeFile(String fileName) throws IOException {
		FileWriter fw = new FileWriter(fileName);
		fw.write(output.toString());
		fw.close();
	}
	public void writeResponse(PrintWriter out) {
		out.print(output.toCharArray());
	}
}
                  
web.xml的配置就不多说了,把过滤配上后然后即可实现所有jsp生成html,针对一些二级页面或首页来优化都不错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值