我请求的页面是:index.jsp 那么服务器接收请求,生成了静态的index.html后,怎样发送到客户端,让客户端看到的是静态页面index.html,而不是index.jsp呢。还有,用户请求的是jsp文件,那么服务器也是运行这个文件后然后再生成html文件的吧。望高手指点其中的奥妙.
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;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 test extends HttpServlet
{ 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.jsp
//则你访问这个servlet时加参数.如http://localhost/toHtml?file_name=index url = "/stw/" + file_name + ".jsp"; //这是你要生成HTML的jsp文件,如
//http://localhost/index.jsp的执行结果. // name = "/home/resin/resin-2.1.6/doc/" + file_name + ".htm"; //这是生成的html文件名,如index.htm.
name = "D:/Tomcat 4.1/webapps/stw/test/" + file_name + ".htm"; //这是生成的html文件名,如index.htm. RequestDispatcher rd = sc.getRequestDispatcher(url); 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();
FileOutputStream fos = new FileOutputStream(name); //把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
PrintWriter out = response.getWriter();
out.print(
"<p align=center><font size=3 color=red>首页已经成功生成!Andrew</font></p>");
}在网上找到这个代码,但是在执行后,生成的htm文件大小为空,里面没有内容.希望高手介绍一下完整方案!!!!!!!!谢谢
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;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 test extends HttpServlet
{ 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.jsp
//则你访问这个servlet时加参数.如http://localhost/toHtml?file_name=index url = "/stw/" + file_name + ".jsp"; //这是你要生成HTML的jsp文件,如
//http://localhost/index.jsp的执行结果. // name = "/home/resin/resin-2.1.6/doc/" + file_name + ".htm"; //这是生成的html文件名,如index.htm.
name = "D:/Tomcat 4.1/webapps/stw/test/" + file_name + ".htm"; //这是生成的html文件名,如index.htm. RequestDispatcher rd = sc.getRequestDispatcher(url); 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();
FileOutputStream fos = new FileOutputStream(name); //把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
PrintWriter out = response.getWriter();
out.print(
"<p align=center><font size=3 color=red>首页已经成功生成!Andrew</font></p>");
}在网上找到这个代码,但是在执行后,生成的htm文件大小为空,里面没有内容.希望高手介绍一下完整方案!!!!!!!!谢谢
----------------------------------------------------------------在客户端能看到的jsp文件,实际已经是个静态的html形式文件了。
不知你的目的是什么?
访问jsp的时候根据刷新策略决定是否forward或者redirect.其实,首页放到内存里比放到文件里会更快.....
用什么方法可以解决这个问题呢?
import javax.servlet.http.*;
import java.io.*;
public class ToHtml
extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";
FileOutputStream fos =null;
String charset="gbk";//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 {
String url = "";
String name = "";
String pName = "";ServletContext sc = getServletContext();url = "/indexbak125.jsp"; //这是要生成HTML的jsp文件,如//http://localhost/index.jsp的执行结果.name = "indexa.html"; //这是生成的html文件名,如index.htm.
pName = "/usr/tomcat/webapps/ROOT/indexa.html"; //生成html的完整路径
RequestDispatcher rd = sc.getRequestDispatcher(url);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();
try
{
fos = new FileOutputStream(pName);
fos.write(value.getBytes(charset));
os.writeTo(fos);
fos.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
response.sendRedirect(name); //书写完毕后转向htm页面
}
}
这是我写的代码??
到底该怎么定义那个value才能解决生成的页面不是乱码并可以显示呢?