jsp 页面生成静态页面(调包response)

过滤器

package cn.itcast.web.filter;

import java.io.File;
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class StaticFilter implements Filter {
	private FilterConfig config;
	public void destroy() {}
	public void init(FilterConfig fConfig) throws ServletException {
		this.config = fConfig;
	}

	public void doFilter(ServletRequest request, 
			ServletResponse response, FilterChain chain) 
					throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		/*
		 * 1. 第一次访问时,查找请求对应的html页面是否存在,如果存在重定向到html
		 * 2. 如果不存在,放行!把servlet访问数据库后,输出给客户端的数据保存到一个html文件中
		 *   再重定向到html
		 */
		/*
		 * 一、获取category参数!
		 * category有四种可能:
		 * * null --> null.html
		 * * 1 --> 1.html
		 * * 2 --> 2.html
		 * * 3 --> 3.html
		 * 
		 * html页面的保存路径, htmls目录下
		 * 
		 * 判断对应的html文件是否存在,如果存在,直接重定向!
		 */
		String category = request.getParameter("category");
		String htmlPage = category + ".html";//得到对应的文件名称
		String htmlPath = config.getServletContext().getRealPath("/htmls");//得到文件的存放目录
		File destFile = new File(htmlPath, htmlPage);

		if(destFile.exists()) {//如果文件存在
			// 重定向到这个文件
			res.sendRedirect(req.getContextPath() + "/htmls/" + htmlPage);
			return;
		}

		/*
		 * 二、如果html文件不存在,我们要生成html
		 * 1. 放行,show.jsp会做出很多的输出,我们要让它别再输出给客户端,而是输出到我们指定的一个html文件中
		 * 完成:
		 * * 调包response,让它的getWriter()与一个html文件绑定,那么show.jsp的输出就到了html文件中
		 */
		StaticResponse sr = new StaticResponse(res, destFile.getAbsolutePath());
		chain.doFilter(request, sr);//放行,即生成了html文件

		// 这时页面已经存在,重定向到html文件
		res.sendRedirect(req.getContextPath() + "/htmls/" + htmlPage);
	}
}

调包的response

package cn.itcast.web.filter;

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class StaticResponse extends HttpServletResponseWrapper {
	private PrintWriter pw;

	/**
	 * String path:html文件路径!
	 * @param response
	 * @param path
	 * @throws UnsupportedEncodingException 
	 * @throws FileNotFoundException 
	 */
	public StaticResponse(HttpServletResponse response, String path) 
			throws FileNotFoundException, UnsupportedEncodingException {
		super(response);

		// 创建一个与html文件路径在一起的流对象
		pw = new PrintWriter(path, "utf-8");
	}

	public PrintWriter getWriter() {
		// 返回一个与html绑定在一起的printWriter对象
		// jsp会使用它进行输出,这样数据都输出到html文件了。
		return pw;
	}
}

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1728755

时间: 2024-10-31 02:07:47

jsp 页面生成静态页面(调包response)的相关文章

php 静态化页面 生成静态页面

前言: 目前网络上好多网站的新闻发布系统都采用了动态服务器技术生成静态HTML的做法,这样做的好处是:一是能减轻其服务器的负担,二是因为生成了HTML静态页面,所以其网站被搜索引擎搜索到的机率更大一些.笔者的网站曾经使用PHP这一动态技术来构建新闻发布系统,其原理也就是应用了PHP生成HTML静态页面的技术,相关平台是 Windows XP Sp2+php4.32+mysql,因此,在这里,想简单地谈一下这种做法的思路.这篇文章适合于对PHP+MYSQL数据库操作,SQL语句以及网页设计有点基础

jsp 生成静态页面代码

网页特效phttp://www.111cn.net/网页特效p.html target=_blank >jsp教程 生成静态页面代码 buildhtml.java: import java.util.*; import java.io.*; public class htmlfile{ public static void main(string[] args){ try{ string title="测试"; string content="测试" stri

生成静态页面的技术是如何实现的

问题描述 在浏览很多论坛或者网站的时候,一般都是大型的门户网站或者论坛.发现都是.html的静态页面.比如: http://www.domain.com/thread-htm-fid-240.html 的形式.我觉得这个肯定是在后台通过程序将JSP页面生成的html页面.我想问的就是这个是如何实现的? 通过什么技术 或者是 什么设计模式 ?这样做的有点和缺点都有哪些?有点我认为可以减少对数据库的操作,增加搜索引擎的抓取几率吧,不知道理解的对不对.在本站和网络上也搜索了不少,但是感觉说的都太模糊了

JSP怎么生成静态HTML页面

问题描述 JSP怎么生成静态HTML页面 JSP怎么生成静态HTML页面,在eclipse平台里,用Java代码 解决方案 用servlet的response直接输出html页面代码即可. 解决方案二: public class HTMLMaker { final static Object lock = new Object(); public static void makeHtml(String page, String filePath){ makeHtml(page,filePath,

JSP生成静态页面-Tomcat提高性能之王道

常见的分类信息首页,需读取至少六次数据库:其他子页面,五至十几次次不等. 在使用数据库连接池的情况下,Tomcat可以支撑的并发量也十分有限.系统资源主要消耗在两方面: 1.数据库操作,频繁的从数据库返回结果: 2.Tomcat解析JAVA文件. 将动态页面按一定规则创建一匹.html纯静态页面的过程,称之为生成静态页面. 优点 无须访问数据库,节省了最大的系统消耗. Tomcat直接返回.html静态文件,无须解析JAVA文件,最大限度的提高效率. 安全,避免了非法传递参数所导致的错误. 缺点

JSP结合JavaBean生成静态页面示例

 JSP结合JavaBean生成静态页面示例1.为什么要做:节省不停操作数据库的开支,减少解析JSP页面的开支2.怎么做:很简单,就是利用文件操作,把需要的内容与现成的模板相合成再写入一个新的静态WEB页面就OK.3.功能扩展:这里只是利用文件写出的方式,将组合的HTML的内容写入到一个WEB页面里去,但是,为了引用,让其的页面知道有该页面的存在,我们还是得在数据库或者是静态页面里加上这个信息.为了简便,你这里就可以采用数据库,当然你要全部采用静态页面也可以,可能操作就复杂一点,不过,如果你能够

jsp生成静态页面

使用jsp生成静态页面.整个工程的目录结构如图:   StaticPage是我们将要生成的静态页面目录 所有静态页面都会生成在这个目录. 然后编写一个MyFitler的过滤器: 以下是代码片段: package com.filter; import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import jav

JSP技术实现动态页面到静态页面的方法_JSP编程

本文是介绍了jsp技术实现动态页面到静态页面的方法,分享给大家,具体如下: 对于JSP技术实现动态页面到静态页面的方案,我们从三个步骤来说明: JSP技术实现动态页面到静态页面的方案第一: 为了能深入浅出的理解这个框架的由来,我们首先来了解一下JSP解析器将我们写的JSP代码转换成的JAVA文件的内容. 下面是一个JSP文件test.jsp ﹤%@ page language=java contentType=text/html;charset=GB2312 %﹥ ﹤% out.write(﹤!

实例:JSP中把动态页面转换为静态页面

js|动态|静态|页面|转换 要自动生成静态页面,用Filter截获jsp请求并先进行预处理,自动生成Html,是个不错的主意.一个很容易想到的方法是在Filter截获Request后,导向一个Servlet,在这个Servlet中向本机发送一个http请求,然后将响应写入一个文件: URLConnection urlConn = URLConnection.open(http://localhost/req); 注意要避免递归. 另一个方法是不模拟http,而是定制Response,把服务器返