日期:2014-05-18  浏览次数:20855 次

得到HttpServletResponse的内容
我想再response被返回给客户端之前,能让我再看看即将被返回的html代码
我试着用outputstream结果就是没有输出,就连getOutputStream也不让用,说getWrite()已经执行
各位达人帮帮忙吧

------解决方案--------------------
再好好看一下jsp/servlet的机制,HttpServletResponse就是向客户端输出数据的,输出的数据是你自己定义的,如“ <html> <head> ....”,那为何还不知道你要写出的html代码呢?另外一种情况就是HttpServletRequest将请求重定向到一个jsp或是html,是jsp的情况的话,jsp会被编译成.class,和servlet类似,向客户端输入html流,这样jsp文件里的html代码就是你想要得到html。
不知道说清楚了没有。
------解决方案--------------------
/**
* 该程序用来生成HTML页面.JSP只要提交到该Servlet就可以了.
*/
package com.thx.mx.servlet;


import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import javax.servlet.http.HttpSession;
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 {

/**
* Constructor of the object.
*/
public ToHtml() {
super();
}

public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
String url = " ";
String name = " ";

ServletContext sc = getServletContext();

String file_name = request.getParameter( "file_name ");// 你要访问的jsp文件名,如index,不包括扩展名
//则你访问这个servlet时加参数.如http://localhost/test/toHtml?file_name=index

url = "/ " + file_name + ".jsp ";// 将要被生成html的文件名。扩展名为jsp .

name = getServletContext().getRealPath( "/ ")+ file_name + ".htm ";
// 这是生成的htm文件名,如index.htm.文件名字与源文件名相同。扩展名为htm
// 路径这里使用的是和jsp文件同目录,要修改到其他目录自己修改
//getServletContext().getRealPath( "/ ")为你的应用的上下文路径。

RequestDispatcher rd = sc.getRequestDispatcher(url);

final ByteArrayOutputStream os = new ByteArrayOutputStream();
//此处声明为final是为了让内部类调用

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();
FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();

request.getRequestDispatcher(file_name+ ".htm ").forward(request, response);
//指向生成后的和jsp同名的htm文件.

}

/**
* Destruction of the servlet. <br>
*/