前些天接手了公司一个网站的维护和优化,考虑到有的动态页面中有太多的数据库操作,所以要将其进行静态化,这也是网站优化升级的一个必经的步骤。
由于是菜鸟刚刚上阵,起初觉得无从下手,于是在ITeye发了一篇求助,通过一些老鸟的帮助再加上我自己的思考,从而确定了解决思路,并且最终成功搞定。下面说一下方案和步骤:
1:封装一个httpclient,并每隔一段时间向服务器发一次请求(当然请求的是需要静态化的动态页面)
2:以流的形式获取响应报文,并将其写到本地文件且命名为"***.html"
3:配置过滤器,将对该动态页面(***.jsp)的请求转发到转化后的静态页面(***.html)
方案确定了,然后是查对应的技术有哪些,这里面主要有两点,一个是httpclient,一个是定时器。
通过各种搜索,我确定了用Apache的httpclient,然后定时器用quartz。然后去官网查看两者的用法,一步步搞定,下面我贴出一部分代码
Httpclient:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class MyHttpClient {
private static String urlString = "http://www.ncpqh.com/";
private static String fileUrlString = "D:\\forTest\\test.html";
public void fetchAndSave(){
byte[] content = get(urlString);
saveFile(content, fileUrlString);
}
private byte[] get(String url){
HttpClient client = new HttpClient();
GetMethod getMethod = new GetMethod(url);
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
int statusCode = client.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
InputStream inputStream = getMethod.getResponseBodyAsStream();
byte[] bytes = new byte[1024 * 2000];
int index = 0;
int count = inputStream.read(bytes, index, 1024 * 2000);
while (count != -1) {
index += count;
count = inputStream.read(bytes, index, 1);
}
return bytes;
} catch (HttpException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
getMethod.releaseConnection();
}
}
private void saveFile(byte[] content,String fileUrl){
File htmlFile = new File(fileUrl);
if (content == null || content.equals("")) {
System.out.println("There is no content");
}else {
try {
if (htmlFile.exists()) {
htmlFile.delete();
htmlFile.createNewFile();
//这里有个缺陷,如果恰巧删除的时候有人访问的话,对用户来说会很不友好
}
FileOutputStream fileOutputStream = new FileOutputStream(htmlFile);
fileOutputStream.write(content);
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
定时器的部分比较简单quartz官网有很详细的demo,我就不贴代码了
下面是过滤器的部分,碰巧的是我需要静态化的页面只有首页,所以只需要在web.xml里配置一下欢迎页面就可以了,所以就不用过滤器了。但是如果不是首页的是需要配置过滤器的。
好了,到这里静态化的工作就完成了,我这次的收获是这样的:对于毫无头绪的问题,要理性的去分析,一步一步来,不能急于求成。
分享到:
相关推荐
1. **JSP页面静态化原理**: - JSP页面静态化的核心思想是将原本需要服务器实时解析的动态内容,提前转换为静态HTML文件,存储在服务器上。这样,当用户请求这些页面时,服务器不再需要执行JSP脚本,而是直接返回...
实现JSP页面静态化的一种常见方法是利用JSP内置对象`out`,它是`JspWriter`的实例,用于将数据回写到客户端。我们可以通过创建自定义类,继承`JspWriter`并重写其输出方法,将数据写入到服务器上的一个本地文件,而...
包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。
前台页面的静态化就有利于SEO,所以这个问题摆在了我的面前,在网上一搜,关于这方面的资料不是很多,又很杂,关于这方面的知识,越来或多的程序员将会碰到,原来项目中这部分静态化的功能主要由我来做的,现在我将...
以下是JSP页面静态化最常用的三种方法的详细解释: 1. 模板替换法 这种方法是通过读取一个静态模板文件(如`template.htm`),然后使用Java代码动态替换其中的占位符,最终生成HTML文件。例如,`buildhtml.jsp`中的...
在Web开发领域,动态JSP页面静态化是一种常见的优化策略,其主要目的是提高网站的性能和用户体验。这一过程涉及到将原本由服务器动态生成的JSP页面转换为纯HTML页面,从而减少服务器处理请求的压力,加快页面加载...
**JSP页面静态化技术详解** 在Web开发中,JavaServer Pages(JSP)是一种常见的动态网页技术,它允许开发者将HTML代码与Java代码混合编写,以实现动态内容的生成。然而,在高流量的网站中,为了提高性能和降低...
5. **第三方工具或框架**:如Struts、Spring MVC等框架提供了静态化插件或配置,帮助开发者实现JSP静态化。这些工具通常提供更灵活的配置,可以根据业务需求选择静态化策略。 在实际应用中,JSP静态化需要注意以下...
为了提高效率和用户体验,人们提出了页面静态化和伪静态化技术。 **页面静态化**是指将动态生成的HTML页面保存为静态文件,之后的用户请求不再通过服务器动态生成,而是直接读取这些静态文件,从而减轻服务器负担,...
页面静态化是Web开发中一种优化技术,主要目的是减少服务器负担和提高网页加载速度,尤其对于高访问量的网站,效果显著。本实例是关于如何将JSP(Java Server Pages)页面转换为HTML静态页面的过程,这对于提升用户...
- **Apache Tiles**:Tiles是一个JSP框架,支持布局管理和页面静态化。通过定义模板和视图,可以方便地生成静态页面。 - **Spring MVC的PageCache**:Spring MVC提供了PageCache注解,可以标记某个Controller方法的...
Java页面静态化主要有两种方式:服务器端静态化和客户端静态化。 1. 服务器端静态化: - **预渲染(Prerendering)**:在用户请求之前,系统自动将一些常用或者热点页面生成静态HTML文件,存储在文件系统或CDN上。...
在进行页面静态化时,我们还需要考虑一些问题,比如如何处理动态内容(如用户登录状态、个性化推荐)、如何同步静态文件和动态数据、以及如何清理过期的静态文件等。这些问题可以通过设计合理的缓存策略和定时任务来...
页面静态化是Web开发中的一个重要概念,主要目的是提高网站的访问速度和搜索引擎优化(SEO)。在Java Web开发中,页面静态化通常涉及到将动态生成的HTML页面转化为纯HTML文件,以便用户请求时无需通过服务器执行复杂...
以下是对动态页面静态化方案的详细解释: 1. **Java与JSP**: Java是一种广泛使用的后端编程语言,JSP(JavaServer Pages)是Java中用于创建动态网页的技术。在传统的JSP应用中,服务器接收到请求后,会解析JSP...
这个过程称为静态化,它能够使网页在客户端直接加载,而无需每次请求时都执行服务器端的Java代码。 一、JSP与HTML的差异 1. JSP是一种服务器端脚本语言,它允许在HTML页面中嵌入Java代码,实现动态内容的生成。JSP...
3. **自动化工具**:通过一些自动静态化工具,如SiteMesh、JSP2HTML等,可以实现JSP页面的自动化静态化。 4. **CDN服务**:结合内容分发网络(CDN),在边缘节点缓存静态HTML,进一步提升用户体验。 **四、JSP静态...
2. 编写JSP页面:编写你需要静态化的JSP页面,确保其功能正常。 3. 实现静态化逻辑:在Servlet或Filter中,当接收到请求时,判断是否需要生成静态页面。如果需要,可以使用JSP的`javax.servlet.jsp.JspWriter`对象...
页面静态化处理是一种提高网站性能和用户体验的技术,它将动态生成的网页转换为静态HTML文件,用户请求时直接返回这些预先生成的文件,而非每次都执行数据库查询和其他服务器端逻辑。这种方式降低了服务器负担,加快...