=相关新闻=
 =本站服务=
 =最新作品=
海西品牌网
模拟整形网
更多技术文档...
 =站长信息=
NAME: ヤ從伈゛開始
WEB: http://www.987114.cn
QQ: 540573223
EMAIL: 540573223@qq.com
AGE: MiMi
怀旧论坛
计数统计
当然位置: 海西品牌网 >>java编程>> 技术文档 >>正文          保护视力色:默认色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)

java静态页面生成,静态新闻页面发布<二>

发布时间:2009-10-30 浏览数:加载中…

直接在访问时生成静态页面

原理:访问时判断有无此页面,有则访问。没有则生成

类:ToHtmlPath

package servlet;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
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;

import common.Logger;

public class ToHtmlPathextends HttpServlet {
 private static final long serialVersionUID = 1L;
 private Logger logger = Logger.getLogger(ToHtmlPathclass);

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 编码方式,可以配置到 web.xml 里。
String encoding = “GBK”;
// 得到真实的请求地址
String templatePath = simpleURLReWrite(request);
String realPath=
request.getSession().getServletContext().getRealPath("/");
// 想要生成的静态html文件的名字
String htmlName = getHtmlFileName(request);
// 静态html的名字,包含绝对路径
String cachFileName = realPath + File.separator + htmlName;
logger.debug("cachFileName = " + cachFileName);
File cacheFile = new File(cachFileName);
boolean load = true;
// 如果静态html 存在,就直接显示html,否则,我们就生成它。
if(cacheFile.exists()) {
load = false;
}
if(load) {
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, encoding));
HttpServletResponse rep =
new HttpServletResponseWrapper(response) {
public ServletOutputStream getOutputStream() {
return stream;
}
public PrintWriter getWriter() {
return pw;
}
};
logger.debug("HtmlCreatorServlet RequestDispatcher = " + templatePath);
// 使用 RequestDispatcher 去处理真正的请求。
// 例如 index.shtm ,则转发到 index.do
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(templatePath);
dispatcher.include(request, rep);
pw.flush();
FileOutputStream fos = null;
try {
if(os.size() == 0) {
// 如果请求的地址无效,那么就发送一个404错误。
response.sendError(
HttpServletResponse.SC_NOT_FOUND, "");
} else {
// 生成静态文件,并且显示这个静态文件
fos = new FileOutputStream(cachFileName);
os.writeTo(fos);
dispatcher =
getServletContext().
getRequestDispatcher("/"+htmlName);
dispatcher.include(request, response);
}
} finally {
if(fos != null) {
fos.close();
}
}
} else {
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/"+htmlName);
dispatcher.include(request, response);
}
}
 // 这个方法就是把 http://987114.cnproduct_pageNumber_1.shtm
 // 变成 http://987114.cn/product.do?pageNumber=1
 protected String simpleURLReWrite(HttpServletRequest request)
   throws ServletException, IOException {
  String uri = request.getRequestURI();
  String contextPath = request.getContextPath();
  logger.debug("HtmlCreator contextPath = " + contextPath);
  if (contextPath != null && contextPath.length() > 0)
   uri = uri.substring(contextPath.length());
  uri = uri.substring(0, uri.length() - 5);
  String[] urls = uri.split("_");
  uri = urls[0] + ".do";
  if (urls.length > 1) {
   for (int i = 1; i < urls.length; i += 2) {
    if (i == 1) {
     uri += "?" + urls[i] + "=" + urls[i + 1];
    } else {
     uri += "&" + urls[i] + "=" + urls[i + 1];
    }
   }
  }
  logger.debug("HtmlCreatorServlet get uri = " + uri);
  return uri;
 }

 // 这个方法就是根据 http://987114.cn/product_pageNumber_1.shtm
 // 来得到生成的html文件名字,也就是 product_pageNumber_1.html
 private String getHtmlFileName(HttpServletRequest request)
   throws ServletException, IOException {
  String uri = request.getRequestURI();
  String contextPath = request.getContextPath();
  if (contextPath != null && contextPath.length() > 0)
   uri = uri.substring(contextPath.length());
  uri = uri.substring(1, uri.length() - 5);
  uri += ".html";
  return uri;
 }
}

web.xml配置

   <servlet>
    <servlet-name>ToHtmlPath</servlet-name>
    <servlet-class>servlet.ToHtmlPath</servlet-class>
  </servlet>

<servlet-mapping>
    <servlet-name>ToHtmlPath</servlet-name>
    <url-pattern>*.shtm</url-pattern>
  </servlet-mapping>

本文首发:java编程(http://www.987114.cn:80/blog/),转载请注明出处。
文章来源于:java编程 http://www.987114.cn:80/blog/

 

评论
英国的网友: 2009-11-20
太帅了
美国的网友: 2009-12-19
太帅了
美国的网友: 2009-12-21
太帅了
美国的网友: 2009-12-21
太帅了
美国的网友: 2009-12-25
太帅了
 =友情链接=
海西品牌网 模拟整形网 海西论坛 爱美尔整形
版权所有:海路传媒