最近想研究一下网页静态化,在网上找了不少的资料还是没有做到嘿嘿。
可能是自己笨
最后经过研究发现静态化页还是挺简单的,
首先思路问题
第一 主是要生成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 的例子。我想其它的也差不多是这样的。嘿嘿。
有不对的请给指正。