將JSP輸出成靜態html頁面
/*** 參數requestPageUrl想要生成html的jsp文件路徑(如:/frontStage/articleMenuContent.jsp),這是實際存在的jsp文件 * (同時我看了一些API想找到只需要傳過來一個action也可以的方法,但是找不到...請高手幫幫忙..指點一下) * 參數createPagePath為存放生成html的路徑(如:/frontStage/articleMenuContent.html) * **/ public void createStaticPage(String requestPageUrl,String createPagePath) throws Exception{ /** * 創建ServletContext對象,用于獲取RequestDispatcher對象 */ ServletContext sc = ServletActionContext.getServletContext(); /** * 根據傳過來的相對文件路徑,生成一個reqeustDispatcher的包裝類 */ RequestDispatcher rd = sc.getRequestDispatcher(requestPageUrl); /** * 獲得request,response對象 */ HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); /** * 創建一個ByteArrayOutputStream的字節數組輸出流,用來存放輸出的信息 */ final ByteArrayOutputStream baos = new ByteArrayOutputStream(); /** * ServletOutputStream是抽象類,必須實現write的方法 */ final ServletOutputStream outputStream = new ServletOutputStream(){ @Override public void write(int b) throws IOException { /** * 將指定的字節寫入此字節輸出流 */ baos.write(b); } }; /** * 通過現有的 OutputStream 創建新的 PrintWriter * OutputStreamWriter 是字符流通向字節流的橋梁:可使用指定的 charset 將要寫入流中的字符編碼成字節 */ final PrintWriter pw = new PrintWriter(new OutputStreamWriter(baos,"utf-8"),true); /** * 生成HttpServletResponse的適配器,用來包裝response */ HttpServletResponse resp = new HttpServletResponseWrapper(response){ /** * 調用getOutputStream的方法(此方法是ServletResponse中已有的)返回ServletOutputStream的對象 * 用來在response中返回一個二進制輸出對象 * 此方法目的是把源文件寫入byteArrayOutputStream */ public ServletOutputStream getOutputStream(){ return outputStream; } /** * 再調用getWriter的方法(此方法是ServletResponse中已有)返回PrintWriter的對象 * 此方法用來發送字符文本到客戶端 */ public PrintWriter getWriter(){ return pw; } }; /** * 在不跳轉下訪問目標jsp。 就是利用RequestDispatcher.include(ServletRequest request, * ServletResponse response)。 該方法把RequestDispatcher指向的目標頁面寫到response中。 */ rd.include(request, resp); pw.flush(); FileOutputStream fos = new FileOutputStream(createPagePath); /** * 使用ByteArrayOutputStream的writeTo方法來向文本輸出流寫入數據,這也是為什么要使用ByteArray的一個原因 */ baos.writeTo(fos); fos.close(); }</pre>
本文由用戶 ccfc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!