⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tohtml.java

📁 jsp开发常用信息管理系统适合初学者学习 新闻管理
💻 JAVA
字号:
/*
 * 创建日期 2007-1-11
 */
package ch06.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;

/**
 * @author <a href="chengweits@hotmail.com">ChengWei </a>
 *  静态页面生成程序
 */
public class toHtml extends HttpServlet {
    
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        long current = System.currentTimeMillis();
        //路径
        String url = "";
        //取得文件名
        String name = "";
        
        /**
         * 通过Servlet的getServletContext()函数获取javax.servlet.ServletContext 
         * 这个对象在应用程序的整个生命周期间都有效,存放在这个对象内的数据任何Web组件都能访问到
         */
        ServletContext sc = getServletContext();
        
        /**
         * file_name 将要访问的jsp文件,这个参数是从页面上得到的参数
         * 如http://localhost:8080/ch06.news/toHtml?file_name=help
         * 这个参数可以直接从前面传过来,当读者访问这个servlet时加参数
         */
        String file_name = request.getParameter("file_name") == null ? ""
                : request.getParameter("file_name");
        System.out.println("file_name=" + file_name);
        
        /**
         * ServletContext的路径一定要加"/",相对于当前路径
         * 
         * @url  将要生成静态页面的jsp文件,如http://localhost:8080/ch06.news/help.jsp的执行结果.
         * @name 生成后的htm文件名及保存位置.
         * 		 根据系统当前时间和文件名参数一起来作为静态页面文件名保存.
         */
        url = "/" + file_name + ".jsp";
        name = Constants.html_path + current + "_" + file_name + ".htm";
        
        /**
         * @ByteArrayOutputStream可以捕获内存缓冲区的数据,转换成字节数组,实现将数据从高层次的形式转化成低层次的形式.
         * @public ByteArrayOutputStream()创建一个新的字节数组输出流。缓冲区初始容量为 32 字节,
         *         必要时可增加其尺寸.
         * 
         * @public synchronized void write(byte b[],int off,int len)
         * @将指定字节数组中从偏移量 off 开始的 len 个字节写入该字节数组输出流。参数:(b - 数据.off - 数据的起始偏移量.len -
         *                           写入的字节数.)
         * 
         * @write(int)将指定字节写入该字节数组输出流。
         */
        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);
            }
        };
        
        /**
         * @调用PrintWriter实现缓冲流中的内容写出到文件中去
         * @定义HttpServletResponse参数让其传到其它界面
         */
        
        final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
        HttpServletResponse rep = new HttpServletResponseWrapper(response) {
            public ServletOutputStream getOutputStream() {
                return stream;
            }

            public PrintWriter getWriter() {
                return pw;
            }
        };
        
        /**
         * 使用RequestDispatcher重定向而不用redirect,主要是因为前面的可以将form传给目标URL,而后者不能。
         * dispatcher类型对应了RequestDispatcher.forward方法,而redirect类型则是HttpServletResponse.sendRedirect方法。
         * forward方法确实是不会使得其参数中包含的URL在IE地址栏中显示出来的。
         */
        RequestDispatcher rd = sc.getRequestDispatcher(url);
        
        /**
         * @RequestDispatcher的include()方法将把Request Dispatcher资源的输出包含到当前输出中
         */
        
        rd.include(request, rep);
        
        /**
         * @flush()方法强制输出后刷新缓冲区,清空缓冲区.
         */
        pw.flush();
        //把jsp输出的内容写到静态页面文件中
        FileOutputStream fos = new FileOutputStream(name);
        //把os的内部缓冲区写到fos文件中去.
        System.out.println(fos);
        os.writeTo(fos);
        fos.close();
        PrintWriter out = response.getWriter();
        request.setCharacterEncoding("GBK");
        out.print("<p align=center><font size=3 color=red>Success create html!</font></p>");
        out.print("<p align=center><font size=3 color=red>"
                + current + file_name + "</font></p>");
        /**
         * @实现页面转向
         * @让访问者直接生成的页面
         * @response.sendRedirect(url)转址会在地址栏中显示目标URL值
         */
        response.sendRedirect("./doc/" + current + "_" + file_name + ".htm");
        
        /* ==============使用RequestDispatcher转向不会在地址栏显示目标URL========= */
//        RequestDispatcher rdo = getServletContext()
//          				.getRequestDispatcher("./doc/" + current + "_" + file_name + ".htm");
//        rdo.forward(request, response);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -