MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 前辈们提提(java)生成静态页方案,该如何处理

前辈们提提(java)生成静态页方案,该如何处理(5)

www.MyException.Cn  网友分享于:2015-08-27  浏览:54次

------解决方案--------------------
一段将网页静态化的java代码
------解决方案--------------------
我认为,提高数据库的查询速度,首先得对数据库的表关系改成级联操作,通过主外键联系,其次,在页面上采用真分页显示.再次,就是尽量将页面模块化,分成多块,
然后在页面包含到相应位置,对动态查询部分采取级联查询,或建个索引!
------解决方案--------------------
很简单,有一种早已失传的技术,就是页面静态化技术,你可以使用模板引擎技术,velocity就是一种模板引擎,你可以用他实现你的页面静态化。
------解决方案--------------------
mark下
------解决方案--------------------
Java code
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 ChangeHtml extends HttpServlet { 

    public void service(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String url = ""; 
     String name = ""; 

     ServletContext sc = getServletContext(); 

     String htmName = request.getParameter("htmName");// 要生成的htm文件名 
     String jspUrl = request.getParameter("jspUrl");//访问的jsp路径
     String htmUrl = request.getParameter("htmUrl");//存放生成htm文件的路径

     // 则你访问这个servlet时加参数.如http://localhost/test/toHtml?file_name=index 

     //url = "/" + file_name + ".jsp";// 你要生成的页面的文件名。
    我的扩展名为jsf . 
     
     name = sc.getRealPath(htmUrl)+"\\"+ htmName + ".htm";
     //System.out.println(name);
     //name = ConfConstants.CONTEXT_PATH+"\\"+ file_name + ".htm";// 这是生成的html文件名,如index.htm.文件名字与源文件名相同。扩展名为htm 

     //ConfConstants.CONTEXT_PATH为你的应用的上下文路径。

     RequestDispatcher rd = sc.getRequestDispatcher(jspUrl);

     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(); 
     System.out.println("页面已经成功生成");
     //PrintWriter out = response.getWriter(); 
     //out.print("<p align=center><font size=3 color=red>页面已经成功生成!single<br>http://www.agilejava.org/space/? 233</font></p>"); 
    } 
   }

------解决方案--------------------
最近自己刚刚搞了个静态页系统。 
基本上都是用Freemarker生成的。 

表的设计上,除了普通存放作者,发布时间的表(称之为原表)之外,还有有个专一存放静态页地址和路径的表,其中有上篇和下篇文章的URL(静态表)。 

生成静态页容易,难点在生成以后更新上篇或下篇或者一些动态内容。这部分内容需要楼主多东东脑筋,自己写方案解决,其实慢慢来就可以了。。下边简单说下。
首先根据ID或者发布时间查找该类别下 上一遍文章,通过freemarker生成静态页后将当前文章地址插入上条记录中的“下一篇内容”,再提取出上一遍的URL等信息,存入当前信息的“上一篇”。。同时在原表中插入当前URL信息(搜索时可直接显示静态的URL地址)。 最后,更新上一遍文章中的“下一篇”为当前的信息。可以选择用ajax局部更新,或者Str.replaceAll()来重写页面。

至于列表页,也可以用freemarker来实现。。freemarker中有遍历数组的方法。
至于其他动态内容,可以用ajax实现,例如DWR,可以将动态内容首先放入资源文件,通过dwr调用(避免读取数据库)。通过TIMER(或其他实现)每隔一段时间重写一次要读取资源文件。

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有