最近想研究一下网页静态化,在网上找了不少的资料还是没有做到嘿嘿。

可能是自己笨

最后经过研究发现静态化页还是挺简单的,

首先思路问题

第一 主是要生成HTML文件,

然后就是用户访问了。

我用serlvet做了一个例子。

一般的我们在访问动态的URL地址会像testSerlvet?action=getById&id=2这样的

访问路径,那么我们自己定义一个规则,用getById_2.shtml来访问,

因些我们在做个一个servlet来过滤这这个*.shtml

 <servlet>
    <servlet-name>CreateHtml</servlet-name>
    <servlet-class>com.data.CreateHtml</servlet-class>
  </servlet>

<servlet-mapping>
    <servlet-name>CreateHtml</servlet-name>
    <url-pattern>*.shtml</url-pattern>
  </servlet-mapping>

在这个serlvet中我们要完成用流新建一个HTML文件,并显示它。如果有就直接显示

代码:

 //取得请求路径
  String repath = request.getRequestURI();
  //取得请求参数
  String str = repath.substring(repath.lastIndexOf("/")+1, repath.lastIndexOf("."));
  String param[] = str.split("_");

  String basePath = request.getScheme() + "://"
    + request.getServerName() + ":" + request.getServerPort();
  //System.out.println("repath : "+repath);
  String shtml = repath.substring(repath.indexOf("/send/")+5, repath.lastIndexOf("."));
  //System.out.println("repath : "+repath);
  String fpath = request.getSession().getServletContext().getRealPath(shtml+".html");
 // System.out.println("fpath :"+fpath);
  File pfile = new File(fpath);
  if(pfile.exists()){
   //如果存在转到这个页面
   response.sendRedirect("/send"+shtml+".html");
  }else{
   //不存在先HTTP请求。取得流
   //pfile.createNewFile();
   basePath = basePath+"/send/servlet/MsgInfo?action="+param[0]+"&msg_id="+param[1];
   URL url = new URL(basePath);
   HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
   
   if(httpconn.getResponseCode()!= HttpURLConnection.HTTP_OK){
    return;
   }else{
    httpconn.connect();
    BufferedReader br = new BufferedReader(new InputStreamReader(httpconn.getInputStream(),"UTF-8"));
    String conn = "";
    FileOutputStream  fos = new FileOutputStream(fpath);
    while((conn=br.readLine())!=null){
     fos.write(conn.getBytes());
    }
    fos.close();
    br.close();
    
    response.sendRedirect("/send"+shtml+".html");
   }
   
   System.out.println(basePath);
   
  }

这样我们静态化就做完了。还有一个重点就是建立一个模板。就是我们动态访问时候的JSP文件

,我们是读JSP文件中的内容然后写入到新的HTML文件中的

 

 

这一个静态化最后要考虑到如果有更新了静态化如何更新。我是这样做的。

我来取得文件的大小如果这个内容的大小与上次内容有变化,那么我就重新静态化一次。

这个只是servlet 的例子。我想其它的也差不多是这样的。嘿嘿。

有不对的请给指正。

 

posted on 2010-07-27 09:48  空指针  阅读(416)  评论(0编辑  收藏  举报