jsp解决高并发,其中一个方法就是生成静态页面,这样可以减少访问数据库次数,也可以省去后台处理逻辑。
那么实现生成静态页面的技术已经相当成熟了,向velocity,freemarks架构都已经包装好了。
但是在结合各种奇奇怪怪的架构中,还是在自己实现的代码复用最好,所以,接下来简单解析生成页面部分代码,
在这个生成静态页面代码中,URL的重定向,就是将URL改为约定好的html页面地址,这个步骤就是拼拼接接字符串,放在
requestDispatcher中,或是说requestDispatcher指向html页面资源
那么下面是关键生成讲台页面的代码,不管是哪个版本的,都会有如下代码:
{
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 dispatcher = getServletContext().getRequestDispatcher(templatePath);
dispatcher.include(request, rep);
pw.flush();
FileOutputStream fos = null;
try {
if(os.size() == 0) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "");
}
else {
fos = new FileOutputStream(cachhtmlFileName);
os.writeTo(fos);
dispatcher = getServletContext(). getRequestDispatcher("/"+htmlName);
dispatcher.include(request, response);
}
} finally {
if(fos != null) {
fos.close();
}
}
}
其目的就是从response中将目标资源jsp写入到静态页面html中,其中关键语句为
HttpServletResponse rep = new HttpServletResponseWrapper(response) {
public ServletOutputStream getOutputStream() {
return stream;
}
public PrintWriter getWriter() {
return pw;
}
他将输出流的方向改变了,将response中的内容转到打印流pw中,pw在写入到数组字节流os中,os就可以写到文件指定的html文件中了,可喜可贺可喜可贺。那么都是在哪句代码中实现的呢,在这句活
dispatcher.include(request, rep);
disparcher的include,玩过jsp都知道,是将目标资源处理结果包括在当前资源中,呈现给用户,可是response被rep重现包装后,前段已经说过,将输出流改变了方向。
以此实现了生成静态页面。
分享到:
相关推荐
NULL 博文链接:https://fruitking.iteye.com/blog/1033719
里面包括了郭克华教授J2EE高级框架1-50视频所用的ppt和视频中编写的实例源代码
j2ee服务器端生成带有背景验证码,j2ee服务器端生成带有背景验证码
J2EE课程设计票据管理系统源代码J2EE课程设计票据管理系统源代码J2EE课程设计票据管理系统源代码J2EE课程设计票据管理系统源代码J2EE课程设计票据管理系统源代码J2EE课程设计票据管理系统源代码。J2EE课程设计票据...
J2ee代码生成器.exe
#资源达人分享计划#
J2EE高级框架实战J2EE高级框架实战J2EE高级框架实战 几十个J2EE高级框架实战的PDF
J2EE事务并发控制策略总结 当前J2EE项目中,面临的一个共同问题就是如果控制事务的并发访问,虽然有些持久层框架已经为我们做了很多工作,但是理解原理,对于我们开发来说还是很有用处
郭克华J2EE高级框架实战教学视频源代码
J2EE JSP SERVLET 网上商城 购物车 源代码,J2EE JSP SERVLET 网上商城 购物车 源代码,J2EE JSP SERVLET 网上商城 购物车 源代码,J2EE JSP SERVLET 网上商城 购物车 源代码,J2EE JSP SERVLET 网上商城 购物车 源...
J2EE增删改查经典代码,主要实现学生信息的增删改。
J2EE事务并发控制策略总结汇编.pdf
学习J2EE事务并发控制策略总结.pdf
J2EE struts1 网上商城 购物车 源代码,J2EE struts1 网上商城 购物车 源代码,J2EE struts1 网上商城 购物车 源代码,J2EE struts1 网上商城 购物车 源代码,J2EE struts1 网上商城 购物车 源代码,J2EE struts1 ...
里面包含有J2EE的很多资源,其中所有的都是由SUN公司的高级技术开发人员,或是IBM的资深专家所写,很后参考的价值。
J2EE架构师手册(j2ee高级进阶,j2ee深层次必备) 升华后 发现技术 原来也有“道”
郭克华J2EE高级框架实战教学视频源代码(附录).rar
基于j2ee的在线选课系统源代码,由于没时间做啦,传上来,不喜勿喷 ,可联系我,修改
J2EE项目开发框架实例源代码(含演示动画)