我请求的页面是: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文件大小为空,里面没有内容.希望高手介绍一下完整方案!!!!!!!!谢谢

解决方案 »

  1.   

    我请求的页面是:index.jsp  那么服务器接收请求,生成了静态的index.html后,怎样发送到客户端,让客户端看到的是静态页面index.html,而不是index.jsp呢。
    ----------------------------------------------------------------在客户端能看到的jsp文件,实际已经是个静态的html形式文件了。
    不知你的目的是什么?
      

  2.   

    我想了想,应该是在后台对数据更新的时候就生成了静态的html文件,那么在生成html文件之前需要建一个与jsp页面相同的静态页面吗,还是自己自动的生成静态页面.望楼上的高手能解答一下.能说的详细吗,详细的实现方案
      

  3.   

    把你做好的jsp用IE Browser打开,然后再用IE菜单里的原码功能看一下。你会发现在此时的jsp中没有任何处理语句,只有结果(html形式)!
      

  4.   

    上面的意思是说,jsp运行后输出的就是html文件,你可以把它输出到你想要得html文件中保存
      

  5.   

    说白了挺简单的,就是把jsp的输出流重定向到一个文件中。
    访问jsp的时候根据刷新策略决定是否forward或者redirect.其实,首页放到内存里比放到文件里会更快.....
      

  6.   

    用户请求的是JSP页面,在这个INDEX.JSP页面中先检测INDEX.HTML是不是新的(设定多长时间更新产生INDEX.HTML),如果没超出时间就直接转向到INDEX。HTML,如果超出时间了就重新生成INDEX。HTML再转向到INDEX。HTML
      

  7.   

    我用这个servlet生成静态页面后为什么会出现乱码呢?
    用什么方法可以解决这个问题呢?
      

  8.   

    package slt;import javax.servlet.*;
    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才能解决生成的页面不是乱码并可以显示呢?