1.背景
往往首页是包含多很内容的,对于讲究首页访问速度。动态请求生成jsp页面,往往略显吃力,这样对于服务器和db都有很大的压力。
为此,通过定时器定时请求生成静态页面,进行定时更新。
2.实现逻辑
我们需要解决下面一些技术问题:
一、静态请求的逻辑:
1.拼装jsp请求,发送请求
2.将请求到的结果进行流输出,jsp->html的转换过程
额外需求:
定时调用生成静态页面
问题:
1.如何知道jsp请求?
查看配置文件便可知道
2.如何发送jsp请求?
转发即可(保留request,response)
----------------------------------------
1.如何将请求的结果保存并进行流输出?
虽然有源码,但还是不怎么清楚原理
二、如何让其定时的自动发送生成静态页面的请求?
1.使用URLConnection进行发送请求(携带必要参数)
2.使用Timer进行定时访问
3.使用wrapper生成后台服务,自动发送请求
3.实现源码
-------------------------------------------web端-------------------------------------------------------------------
1.生成静态页面的servlet请求源码-ToHtmlServlet
public class ToHtmlServlet extends HttpServlet {
/**
* 需要转换成静态页面的动态请求,相对路径(request)
*/
private String url = "";
/**
* 生成的静态文件的绝对路径
*/
private String path = "";
/**
* 需要转换成静态页面的动态请求名称(ps:不需要添加do后缀)
*/
private String actionName="";
/*
* (non-Javadoc)
*
* @see
* javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest
* , javax.servlet.http.HttpServletResponse)
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 则你访问这个servlet时加参数.如http://localhost/test/toHtml?actionName=index
actionName = req.getParameter("actionName");// 你要访问的jsp文件名,如index,不包括扩展名
url = "/" + actionName + ".do";
path = this.getServletContext().getRealPath("/") + "index.htm";
// 这是生成的html文件名,如index.htm.文件名字与源文件名相同。扩展名为htm
RequestDispatcher rd = req.getRequestDispatcher(url);
// 通过匿名类来创建一个stream实例,只引用其中write方法
// 通过匿名类创建PrintWriter实例,使用上面输出客户端的流stream
// 通过自定义实例化pw对象
/**
* 个人觉得产生的匿名产生的stream和rep以及新实例化的pw对象,都与本身此请求的steam,rep,pw对象完全不同。
* 这些自定产生的对象是用于保存流并输出到指定的静态文件。
*/
// 静态处理开始....
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(resp) {
public ServletOutputStream getOutputStream() {
return stream;
}
public PrintWriter getWriter() {
return pw;
}
};
// 用来记录保留request和response,以后不能再修改response里表示状态的信息
rd.include(req, rep);
pw.flush();
FileOutputStream fos = new FileOutputStream(path); // 把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
// 静态处理结束...
// 下面是针对此请求对应客户端的响应方式
resp.setCharacterEncoding("utf8");
PrintWriter out = resp.getWriter();
out.print("生成成功~");
}
}
2.需要生成静态页面的动态请求-IndexServlet(url)
public class IndexServlet extends HttpServlet {
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher rd=req.getRequestDispatcher("template.jsp");
rd.forward(req, resp);
}
}
3.web.xml配置详情
<servlet>
<servlet-name>toHtml</servlet-name>
<servlet-class>com.techbirds.servlet.ToHtmlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>toHtml</servlet-name>
<url-pattern>/toHtml.do</url-pattern>
</servlet-mapping>
<!-- 需要静态的首页请求 -->
<servlet>
<servlet-name>toIndex</servlet-name>
<servlet-class>com.techbirds.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>toIndex</servlet-name>
<url-pattern>/toIndex.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>toIndexHtm.jsp</welcome-file>
</welcome-file-list>
4.jsp页面列表
-------------------------------------------定时服务端-------------------------------------------------------------------
5.发送请求-Service
public class CallHtmlService {
public void callHtml(String actionName) {
try {
String str = "http://localhost:8080/toHtml/toHtml.do?actionName="
+ actionName;
int httpResult;
URL url = new URL(str);
URLConnection connection = url.openConnection();
connection.connect();
HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
httpResult = httpURLConnection.getResponseCode();
if (httpResult != HttpURLConnection.HTTP_OK) {
System.out.println("生成失败...");
} else {
System.out.println("生成成功...");
}
} catch (Exception e) {
}
}
}
6.定时任务
public class CallHtmlTimer {
/**
* 延迟几秒执行
*/
private static Long DELAYTIME=1000*10l;
/**
* 间隔几秒执行
*/
private static Long PERIODTIME=1000*10l;
public static void main(String[] args) {
Timer timer=new Timer();
timer.schedule(new CallHtmlTask(), DELAYTIME, PERIODTIME);
}
}
class CallHtmlTask extends TimerTask{
@Override
public void run() {
new CallHtmlService().callHtml("toIndex");
}
}
ps:做成windows服务参考:
http://blog.csdn.net/techbirds_bao/article/details/8799528
分享到:
相关推荐
Java+Servlet+HTML+CSS+数据库,实现的学生信息管理系统,实现了 新增和查询功能。 覆盖知识 java部分:程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、实用类、JDBC、三层架构...
1. 手动编写java代码,...4. 实现用Servlet实现伪静态页面的访问 5. 实现用缺省的Servlet实现对静态页面的访问。 6. 使用ServletConfig对象,访问web.xml中的数据库连接信息。 7. 使用ServletContext对象,实现转发操作
大名鼎鼎的 java2s 静态网页打包下载 我只是知识的搬运工,版权归属原作者。 是全面学习java不可多得的素材,代码复制粘贴都可运行。 网友给的评论 这个网站非常好,分成三大类,分别是Example、Products、 ...
项目描述 jsp+servlet开发的景点旅游网站 运行环境 jdk8+tomcat8+mysql+eclipse+maven 项目技术(必填) java servlet+mysql+jquery ajax ...3.前台大部分页面是静态的模板内容,有交互的比如留言是ajax写入数据
这是一个Java实现的新闻发布系统,小型的网站,包括源代码和静态的页面,主要用的servlet实现
jsp生成静态页面的方法的最简单的代码,这儿的实现是通过Servlet代码,把客户端的请求以IO流创建静态的页面,响应客户端
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...
一个Javaservlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。Servlet的生命周期被javax.servlet.Servlet这个接口所定义。 所有的...
一、Servlet简介:随着互联网技术的逐步普及,以及人们对互联网要求提高,以前那种静态网页已经不再是适应,我们看到今天的网页不但有flash,vide等等,显然以前的那种静态网页展示无法解决,为了解决这个问题,SUN公司...
动态Jsp页面转换成静态Html页面 ,通过一个servlet将指定的jsp转换成相对应的静态html页面。
基于Java EE平台项目管理系统的设计与实现【源代码+论文+数据库】 java项目管理系统平台 此在这个系统中我综合应用了MySQL、Servlet、JSP等知识。网页界面的结构设计以实用性出发,具有易于操作、简洁、方便等特点。...
JSP的特点 1、JSP里面可以嵌入Java代码 2、在运行的时候JSP被容器自动翻译成为一个servlet ...5、Servlet生成静态页面比较麻烦,适合做Control层,JSP生成页面比较容易,适合做view层,JSP本质上就是servlet。
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...
了处理动态网页的Java Servlet和JSP技术,较其 他的网上动态交互信息处理技术具有极其优越性。 而随着XML和相关标准的定型,全新的基于Java/ XML的发布框架逐渐走入人们的视野。因此,针对 现有远程教学系统的不足...
JSP(Java Server Pages)是建立在Servlet规范之上的动态网页开发技术,其实质是一个简化的Servlet。在JSP文件中,HTML和Java代码共同存在,其中,HTML代码用于实现网页中静态内容的显示,Java代码用于实现网页中...
JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签...
它不仅可以用作表现层的实现技术,而且还可以用于生成 XML,JSP 或 Java 等。 目前企业中:主要用 Freemarker 做静态页面或是页面展示 总结:freemarker 模版引擎,可以使用 Freemarker 模版生成 html 页面。 ...
纯Servlet编写的网站? ;JSP;HTML、servlet和JSP相比较;静态HTML页面的请求过程;Servlet的请求过程;JSP页面(hello.jsp);创建第一个JSP文件;JSP的请求和执行过程;JSP源文件和转译后的Servlet文件对比;JSP的执行过程;...
JSP是基于Java Servlet以及整个Java体系的Web开发技术,利用这一技术来构建安全的、跨平台的动态Web站点,而且目前在不断进行更新和优化。如果读者对微软的ASP技术比较熟悉,应该知道ASP的编程语言是VBScript和...
如: 都属于非持久化会话方案 都使用页面动态修改技术,因此不支持静态HTML 代码编写方式很相似 Cookie技术 什么是Cookie? 一些网站会在您的计算机上的以小文本文件存储信息。这种文件称为cookie。 Cookie可以随着...