`

jsp页面静态化例子

    博客分类:
  • JAVA
阅读更多
package com.htmlstatic;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class ToHtml extends HttpServlet {
	private static final String CONTENT_TYPE = "text/html; charset=GBK"; //$NON-NLS-1$

	private static ServletContext sc = null;

	private HttpServletRequest request = null;
	private HttpServletResponse response = null;
	private static String staticHtmlRefreshTime = "1";//刷新间隔时间
	private static String path = "D:\\tomcat5.5\\webapps\\diesel_gdc";//文件生成路径
	private static String url = "/index.jsp";//需要静态化的页面

	
	// Initialize global variables
	public void init() throws ServletException {
	}

	// Process the HTTP Get request
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType(CONTENT_TYPE);
		service(request, response);
	}

	// Process the HTTP Post request
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

	public void destroy() {
	}

	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType(CONTENT_TYPE);
		long SPACING = 0;
		if (staticHtmlRefreshTime == null) {
			SPACING = 1000 * 60 * 10;
		} else {
			SPACING = 1000 * 60 * Long.parseLong(staticHtmlRefreshTime);
		}

		sc = getServletContext();
		this.request = request;
		this.response = response;
		
		String[] urls = url.split(",");

		List names = new ArrayList();
		for (int i = 0; i < urls.length; i++) {
			String tmp = urls[i].replaceAll(".jsp", ".html");
			names.add(tmp);
		}
		while (true) {
			System.err.println("静态化开始");
			myService(urls, names);
			System.err.println("静态化结束");
			try {
				Thread.currentThread().sleep(SPACING);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public synchronized void myService(String[] urls, List names) {

		String name = "";
		for (int i = 0; i < urls.length; i++) {
			FileOutputStream fos = null;
			try {
				name = path + names.get(i).toString().replaceAll(".html", ".html");
				RequestDispatcher rd = sc.getRequestDispatcher("/" + urls[i]);
				final ByteArrayOutputStream os = new ByteArrayOutputStream();
				final ServletOutputStream stream = new ServletOutputStream() {
					public void write(byte[] data, int offset, int length) {
						os.write(data, offset, length);
					}

					public void write(int b) throws IOException {
						os.write(b);
					}
				};
				final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
				HttpServletResponse rep = new HttpServletResponseWrapper(response) {
					public ServletOutputStream getOutputStream() {
						return stream;
					}

					public PrintWriter getWriter() {
						return pw;
					}
				};

				rd.include(request, rep);
				pw.flush();
				System.out.println("name=="+name);
				
				fos = new FileOutputStream(name);
				// 把jsp输出的内容写到xxx.htm
				os.writeTo(fos);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (ServletException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					fos.close();
				} catch (Exception e) {
				}
			}

		}		
	}

	private void writeFile(String fileName, String content) {
		OutputStreamWriter writer = null;
		try {
			File f = new File(path + "\\" + fileName);
			if (!f.exists()) {
				f.createNewFile();
			}
			writer = new OutputStreamWriter(new FileOutputStream(f), "GBK");
			writer.write(content);
			writer.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 web.xml配置:

 

                 <servlet>
		<servlet-name>tohtml</servlet-name>
		<servlet-class>com.htmlstatic.ToHtml</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>tohtml</servlet-name>
		<url-pattern>*.tohtml</url-pattern>
	</servlet-mapping>

 

分享到:
评论
3 楼 hll127 2016-07-15  
请问service这个方法里为什么要while(true)啊?
2 楼 wsliupan 2014-07-01  
例子中有中文乱码,请在
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
改成final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os ,"UTF-16"));
就不会乱码了
1 楼 橄榄绿 2010-06-22  
你好。受教了!我也写了一个。但是不知道为什么发到网上生成的时候就显示乱码,在本机里测试没问题。有时间能帮我看看吗?

相关推荐

    jsp/java生成静态页面

    jsp生成静态页面 生成静态页面 完全可以运行的例子!!!!

    velocity freemarke 模版 静态化 实现

    使用velocity freemarke 模版实现页面静态化,有具体代码实现例子

    静态Html、jsp、php等使用element ui最简单直观例子(含table/对话框服及js/css等)

    静态Html、jsp、php等使用element ui 的最简单直观联系,含table样例/对话框样例及所有 js css和图标,学习前台框架很好的入门资源

    html静态网页综合(多例子绝对好)

    html静态网页综合(多例子绝对好) html静态网页综合(多例子绝对好) html静态网页综合(多例子绝对好)

    urlrewrite静态页面的使用例子

    一个很简单的使用urlrewrite实现静态页面的实现,只要把该文件解压后直接导入到eclipse里就行了,或者直接把WEB下的文件拷到TOMCAT的ROOT下去,即可运行。

    jsp经典笔记jsp经典笔记

    JSP(java server page) 1.JSP介绍: JSP是服务器端运行的页面,JSP本身就是一个Servlet,他不仅可以包含静态的HTML代码,也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet...4,JSP是以静态页面为主的。

    JSP页面的静态包含和动态包含使用方法

    JSP中有两种包含:静态包含:&lt;&#37;@include file=”被包含页面”%&gt;和动态包含:&lt;jsp page=”被包含页面”flush&gt;。下面以一个例子来说明如何使用包含。 实例: 项目文件树: header.jsp文件中内容: &lt;...

    JSP 程序设计从入门到精通 PDF 教程

     1.3.1 JSP页面中的元素 14  1.3.2 JSP语法概要 15  1.3.3关于模板文本(静态HTML) 16  1.4 运行第一个Jsp程序 16  1. 5本章小结 20  第2章Jsp 基础学习 20  2.1 JSP基本语法 20  2.1.1 JSP 语法之...

    JSP生成静态页实践及其设计思想[转]

    引子:我们以两个大型网站为例作比较:51job和智联招聘(先声明我不是为他们作广告,仅以他们为例作技术上的比较)51job采用的是...后缀不限,但一般都用*.template例子&lt;html&gt;&lt;head&gt;&lt;title&gt;#title#

    bbs 简单的参考例子

    如何由静态页面改为动态页面,借助Dreamweaver; 树状展现和平板展现帖子,使用到了递归; CKEditor 在线编辑器的引入,由例子入手,注意学习方式; 分页的应用; URL 的重定向; 引入javaScript 客户端的验证,服务器端...

    JSP页面的动态包含和静态包含示例及介绍

    主要介绍了JSP页面的动态包含和静态包含示例及介绍,本文讲解了它们的区别并给出了相应例子,需要的朋友可以参考下

    J2EE体系之-JSP学习

    JSP( Java Sserver Page )是基于Java语言的服务器端页面 JSP本质就是一个文档,他不仅可以包含静态的HTML代码,也可以包含动态的JAVA代码,服务器容器可以将JSP转换成Servlet发布,并接受请求 JSP文件只需放在...

    xml实现静态网页读取动态数据

    此资料可以让静态的html页面可以实现像jsp,asp,asp.net,php等动态读取数据的效果,只需用到javascript读取xml里面的数据就可以啦,里面的很多的例子讲说,只要看一遍就会做啦。。。

    Java从服务器上获取时间动态显示在jsp页面实现思路

    Java获取服务器时间,动态显示到jsp页面,大家都是到Java只能获取一次,到页面的时间是静态的,不过通过js和Java的合作,巧妙地实现此功能。本人是给电视做系统,客户要求页面能显示时间,因为电视浏览器获取的时间...

    提升JSP应用程序的七大绝招

    你时常被客户抱怨JSP页面响应速度很慢吗?你想过当客户访问次数剧增时,你的WEB应用能承受日益增加的访问量吗?本文讲述了调整JSP和servlet的一些非常实用的方法,它可使你的servlet和JSP页面响应更快,扩展性更强。...

    Java博客系统yijavaBlog v1.0.0.zip

    上面配置后,您就可以直接在 html 静态页面上这样写: ${mobileSegment("mobile=13500000000").data.province} 即可在页面上显示 “广东” ,除了 province ,您可以获取接口返回的任意数据哦 ~ 关于接口: 目前...

    ThymeleafDemo

    #ThymeleafDemo 这是一个基于 ThymeLeaf 框架和 ... 例子5 添加了一个用于 jsp 页面的视图解析器和一个电影计数器 jsp 页面,演示了常规 servlet 引擎和 Thymeleaf 引擎可以并行运行。 ###运行代码构建代码:mvn clean

    J2EE中文版指南 CHM格式 带全文检索

    初始化及结束一个JSP页面 180 生成静态内容 181 生成动态内容 181 在JSP中使用对象 181 隐式对象 181 特定应用程序对象 181 共享对象 182 JSP scripting 元素 182 声明 182 脚本(scriptlets) 183 表达式 184 在JSP...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    /staticTree.jsp 静态树 /dynamicTree.jsp 动态树 /css/tree.css CSS样式表文件 /js/all.js JavaScript脚本文件 /images 图片文件 第24章(/ch24) 程序描述:本章将使用Ajax...

    前端HTML模板解析引擎domTemplate.js.zip

    美工设计好静态HTML文件,交给后端工程师,需要转换成Jsp、Freemarker、Velocity等动态模板文件。这种模式有几个缺点 1、动态模板文件不能被浏览器解释、必须要运行在服务器中才能显示出效果 2、动态效果和静态...

Global site tag (gtag.js) - Google Analytics