static_mkk 2017-09-12 14:54 采纳率: 50%
浏览 718

Jsp静态化问题…………

public class CreateStaticHTMLPage {
HttpServlet da= new HttpServlet() {
};
public void create(HttpServletRequest request, HttpServletResponse response,
ServletContext servletContext, String fileName, String fileFullPath, String jspPath)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");// 设置HTML结果流编码(即HTML文件编码)
RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);// 得到JSP资源
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 用于从ServletOutputStream中接收资源
final ServletOutputStream servletOuputStream = new ServletOutputStream() {// 用于从HttpServletResponse中接收资源
/*

* 我看不懂这里(?)写了servletOutPutStream得write()的两个方法,**

* 这是什么用处和怎么实现的????**

         */
        public void write(byte[] b, int off, int len) {
            byteArrayOutputStream.write(b, off, len);
        }

        public void write(int b) {
            byteArrayOutputStream.write(b);
        }

        @Override
        public boolean isReady() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public void setWriteListener(WriteListener arg0) {
        }
    };
    final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));// 把转换字节流转换成字符流
    HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(response) {// 用于从response获取结果流资源
       /*

* 这里写的两个方法我也不知道是做什么用的??看了源码,这个类里面并没有这两个方法**

* 这两个方法的用处和实现原理是什么?**

        */

        public ServletOutputStream getOutputStream() {
            return servletOuputStream;
        }
        public PrintWriter getWriter() {
            return printWriter;
        }
    };
    rd.include(request, httpServletResponse);// 发送结果流(把带有两个输出流的response发到相应jsp页面)
    printWriter.flush();// 刷新缓冲区,把缓冲区的数据输出
    /*
     *
     *      也就是说,把带有两个输出流httpServletResponse发送到对应jsp文件,并printWrite.flush()之后,
     *      servletOuputStream和printwrite都带有相同的html的内容,就是上述HTML内容

所以在这里总结一下:为什么flush之后,这两个输出流里面就都有了完整的html信息了呢????百思不得其解啊,求大神解答一下啊,,谢谢啦****

     */
    FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath);
    /* 

            此时的bytearrayoutputstream已经具有了所有的jsp中servletoutputstream的内容*/
    /*这里的byteArrayOutputStream流里面又有什么内容,也很迷惑*/
    byteArrayOutputStream.writeTo(fileOutputStream);// 把byteArrayOuputStream中的资源全部写入到fileOuputStream中
    fileOutputStream.close();// 关闭输出流,并释放相关资源
    response.sendRedirect(fileName);// 发送指定文件流到客户端
}

}

  • 写回答

1条回答

  • IAmObject 2017-09-13 00:41
    关注

    你的问题是什么呢? 所谓静态化,就是页面的CSS、以及各种布局都已经固定住了,只是把模板的值替换一下

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog