`

【精华】Java项目生成静态页面

阅读更多
需转载,请注明转载出处!本文地址:

http://blog.csdn.net/xxd851116/archive/2009/06/24/4293239.aspx

第一次做项目需要生成静态页面,网上很多大牛对将网页生成静态页面有很多异议。说一下我的看法。

不外乎有以下因素:
1、从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而静态页面则省去了这些时间。
2、从便于搜索引擎抓取的角度来讲:搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎SEO排名更容易提高,一些大门户站页面大多都采用静态或伪静态网页来显示,更便于搜索引擎抓取与排名。
3、从安全性来看:静态网页不宜遭到黑客攻击,因为黑客不知道你的网站的后台、网站采用程序、数据库的地址。
4、从稳定性来看:哪天数据库服务器挂了,动态网页就拜拜了!而要运行一个静态网页的发布服务器,相信大家都知道配置不是太高也行的吧?呵呵。

因此,我认为,生成静态页面具有可行性。

那么怎么把动态网页的代码生成静态网页呢?又存在哪呢?原理其实很简单。
1、利用Freemark模板生成静态页面,网上搜一下大把大把的代码随你挑,我就不在这里啰嗦了。
我很讨厌这种方式,因为对于一个数据量较大的页面来讲工作量太大,要写模板,语法又比较怪异,不流行!
2、也是我偶尔想起来的。用Java中URLConnection抓取某个URL网页源码(这是原理核心)生成html文件,就是这么简单!就是这么Easy!

代码奉上!

1)、以下是捕捉网页源码程序:

view plaincopy to clipboardprint?
import java.io.BufferedReader;  
import java.io.File;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.MalformedURLException;  
import java.net.URL;  
import java.net.URLConnection;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
 
import org.apache.commons.io.FileUtils;  
import org.apache.commons.lang.StringUtils;  
 
/** 
* @author Xing,XiuDong 
*/ 
public class HTMLGenerator {  
 
    public static final String generate(final String url) {  
        if (StringUtils.isBlank(url)) {  
            return null;  
        }  
 
        Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");  
        Matcher matcher = pattern.matcher(url);  
        if (!matcher.find()) {  
            return null;  
        }  
 
        StringBuffer sb = new StringBuffer();  
 
        try {  
            URL _url = new URL(url);  
            URLConnection urlConnection = _url.openConnection();  
            BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));  
 
            String inputLine;  
            while ((inputLine = in.readLine()) != null) {  
                sb.append(inputLine);  
            }  
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
 
        return sb.toString();  
    }  
 
    /** 
     * Test Code 
     * Target : http://www.google.cn/ 
     */ 
    public static void main(String[] args) throws IOException {  
        String src = HTMLGenerator.generate("http://www.google.cn/");  
 
        File file = new File("C:" + File.separator + "index.html");  
        FileUtils.writeStringToFile(file, src, "UTF-8");  
    }  
 

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;

/**
* @author Xing,XiuDong
*/
public class HTMLGenerator {

public static final String generate(final String url) {
if (StringUtils.isBlank(url)) {
return null;
}

Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher(url);
if (!matcher.find()) {
return null;
}

StringBuffer sb = new StringBuffer();

try {
URL _url = new URL(url);
URLConnection urlConnection = _url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

String inputLine;
while ((inputLine = in.readLine()) != null) {
sb.append(inputLine);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return sb.toString();
}

/**
* Test Code
* Target : http://www.google.cn/
*/
public static void main(String[] args) throws IOException {
String src = HTMLGenerator.generate("http://www.google.cn/");

File file = new File("C:" + File.separator + "index.html");
FileUtils.writeStringToFile(file, src, "UTF-8");
}

}

2)、将源码写入Html文件,这个需要根据用户的需求了,我根据我项目中遇到的情况写了以下代码:(附测试程序:http://www.google.cn/)

view plaincopy to clipboardprint?
/** 
* generite html source code 
*  
* @author Xing,XiuDong 
* @date 2009.06.22 
* @param request 
* @param url 
* @param toWebRoot 
* @param encoding 
* @throws IOException 
*/ 
public void genHtml(HttpServletRequest request, String url, boolean toWebRoot, String encoding) throws IOException {  
 
    if (null == url) {  
        url = request.getRequestURL().toString();  
    }  
 
    String contextPath = request.getContextPath();  
    String seq = StringUtils.substring(String.valueOf(new Date().getTime()), -6);  
 
    String ctxPath = super.getServlet().getServletContext().getRealPath(File.separator);  
    if (!ctxPath.endsWith(File.separator)) {  
        ctxPath += File.separator;  
    }  
 
    String filePath = StringUtils.substringAfter(url, contextPath);  
    filePath = filePath.replaceAll("\\.(do|jsp|html|shtml)$", ".html");  
 
    String savePath = "";  
    String autoCreatedDateDir = "";  
    if (!toWebRoot) {  
        savePath = StringUtils.join(new String[] { "files", "history", "" }, File.separator);  
 
        String[] folderPatterns = new String[] { "yyyy", "MM", "dd", "" };  
        autoCreatedDateDir = DateFormatUtils.format(new Date(), StringUtils.join(folderPatterns, File.separator));  
 
        filePath = StringUtils.substringBefore(filePath, ".html") + "-" + seq + ".html";  
    }  
 
    File file = new File(ctxPath + savePath + autoCreatedDateDir + filePath);  
    FileUtils.writeStringToFile(file, HTMLGenerator.generate(url), encoding);  

/**
* generite html source code
*
* @author Xing,XiuDong
* @date 2009.06.22
* @param request
* @param url
* @param toWebRoot
* @param encoding
* @throws IOException
*/
public void genHtml(HttpServletRequest request, String url, boolean toWebRoot, String encoding) throws IOException {

if (null == url) {
url = request.getRequestURL().toString();
}

String contextPath = request.getContextPath();
String seq = StringUtils.substring(String.valueOf(new Date().getTime()), -6);

String ctxPath = super.getServlet().getServletContext().getRealPath(File.separator);
if (!ctxPath.endsWith(File.separator)) {
ctxPath += File.separator;
}

String filePath = StringUtils.substringAfter(url, contextPath);
filePath = filePath.replaceAll("\\.(do|jsp|html|shtml)$", ".html");

String savePath = "";
String autoCreatedDateDir = "";
if (!toWebRoot) {
savePath = StringUtils.join(new String[] { "files", "history", "" }, File.separator);

String[] folderPatterns = new String[] { "yyyy", "MM", "dd", "" };
autoCreatedDateDir = DateFormatUtils.format(new Date(), StringUtils.join(folderPatterns, File.separator));

filePath = StringUtils.substringBefore(filePath, ".html") + "-" + seq + ".html";
}

File file = new File(ctxPath + savePath + autoCreatedDateDir + filePath);
FileUtils.writeStringToFile(file, HTMLGenerator.generate(url), encoding);
}

发表于 @ 2009年06月24
分享到:
评论

相关推荐

    (超赞)JAVA精华之--深入JAVA API

    - `java.util.Random` 用于生成伪随机数,可用于生成随机数或随机选择。 - **向量类 Vector** - `java.util.Vector` 是线程安全的动态数组,可以自动调整大小,适用于多线程环境。 - **栈类 Stack** - `java....

    java面试精华2

    ### Java面试精华知识点详解 #### 一、JVM内存划分 **1.1 程序计数器(Program Counter Register)** - **定义**: 当前线程所执行的字节码的行号指示器,用于记录当前线程所执行的字节码的地址。 - **特性**: - **...

    达内java工程师训培笔记

    【达内java工程师训培笔记...这些知识点构成了Java Web开发的基础,对提升Java工程师的技能水平和项目实践经验有着重要作用。通过深入学习和实践,开发者可以掌握构建复杂Web应用的能力,从而在职场上取得更大的成功。

    jsp精华,总结

    【JSP 精华知识点总结】 Java Server Pages(JSP)是Java EE平台中用于构建动态Web应用程序的重要组成部分。它结合了HTML和Java代码,让开发者能够在同一个文件中处理静态内容和动态逻辑。JSP的本质是Servlet,它...

    Tomcat基本知识精华

    - **HTML示例**:HTML是最基础的网页语言,用于构建静态页面。 - **JSP示例**:JSP是一种动态网页技术,可以在服务器端执行Java代码并生成HTML响应。JSP文件通常包含HTML标签以及嵌入式的Java表达式和脚本元素。 ...

    JSP教学管理系统(源代码+报告).zip

    在本项目中,Java用于处理业务逻辑、数据库操作以及与JSP页面的交互。常见的Java后端框架如Spring MVC或Struts2,可以提供结构化的开发模式,提高代码的可维护性和可扩展性。 **3. 数据库设计** 教学管理系统通常会...

    jsp精华文章(集合)

    **JSP(Java Server Pages)**是Java技术在Web开发中的一个重要组成部分,它是一种动态网页技术,允许开发者将静态HTML内容与动态Java代码结合起来,从而创建交互式的网页应用。JSP是在服务器端运行的,其生成的HTML...

    Jsp001精华文章离线版下载

    1. **JSP页面结构**:一个JSP页面由静态内容(HTML、CSS、JavaScript)和动态内容(Java代码)组成。动态内容以`<% %>`或`标签的形式出现,负责处理服务器端逻辑。 2. **指令元素**:如`<%@ page %>`, `...

    jsp基础速成精华讲解

    **JSP基础速成精华讲解** JavaServer Pages(JSP)是Java平台上的一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现动态内容的生成。本教程面向初学者,旨在帮助你快速掌握JSP的基础知识。 ...

    JAVA SE 类库查询手册

    《JAVA SE 类库查询...以上内容仅为《JAVA SE 类库查询手册》的部分精华,涵盖了Java SE 6中关键的类和接口。深入理解这些基础知识对于提高Java开发技能至关重要。无论是学习还是工作,这本手册都是不可或缺的资源。

    Jsp精华文章

    **JSP(JavaServer Pages)** 是一种动态网页技术,由Sun Microsystems开发,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,从而实现服务器端的动态生成页面。JSP是Java EE(企业版)平台的一部分,主要...

    论坛JSP精华区

    - JSP是一种服务器端的技术,它将HTML或XML文档和Java代码结合,使得开发者可以在页面上进行动态内容的生成。 - JSP页面由HTML标签、脚本元素(scriptlets)、声明(declarations)、表达式(expressions)、指令...

    jsp对于软件人员的精华

    JSP是一种用于创建动态网页的技术,它结合了HTML、XML和Java语言,允许开发者在服务器端生成动态内容,并将其嵌入到静态网页中。下面,我们将深入探讨JSP的关键概念和技术细节。 1. **JSP基础知识** JSP页面由...

    servlet jsp tomcat sql oracle 技巧集 精华集

    JSP页面由静态内容和可执行的Java代码(标签、脚本元素)组成。通过JSP指令、表达式、脚本片段等,开发者可以方便地在页面上插入动态数据。JSP的转换过程会产生对应的servlet,执行后生成HTML发送给客户端。 Tomcat...

    基于java的非ssh框架论坛系统

    - 页面静态化:部分高访问量页面可转化为静态HTML,减少服务器压力。 - 负载均衡:通过Nginx、HAProxy等工具实现多服务器间的负载分发。 通过以上分析,我们可以看出“基于Java的非SSH框架论坛系统”是一个综合了...

    JSP精华编程与文档说明

    **JSP(Java Server Pages)** 是一种动态网页技术,由Sun Microsystems开发,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,从而实现服务器端的动态内容生成。本资源“JSP精华编程与文档说明”是针对JSP...

    Jsp001精华文章离线版 v1.0(HTML)

    JSP页面会被服务器转换成Servlet,然后由Servlet来处理请求并生成响应。JSP页面的主要组成部分包括HTML标记、JSP指令、脚本元素和JSP表达式。 ### 2. JSP元素 - **JSP指令**:例如`<%@ page %>`, `<%@ include %>`...

    jsp凌云论坛全部源代码

    学习和研究这个开源项目,你可以深入了解Java Web开发中的session管理、cookies使用、权限控制、模板引擎、数据库设计等方面的知识,同时也能了解到论坛系统特有的功能实现,如用户注册与登录、发帖、回帖、精华帖、...

Global site tag (gtag.js) - Google Analytics