Java 项目生成静态页面的代码
程序员文章站
2024-02-17 20:43:22
不外乎有以下因素: 1、从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而...
不外乎有以下因素:
1、从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而静态页面则省去了这些时间。
2、从便于搜索引擎抓取的角度来讲:搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎seo排名更容易提高,一些大门户站页面大多都采用静态或伪静态网页来显示,更便于搜索引擎抓取与排名。
3、从安全性来看:静态网页不宜遭到黑客攻击,因为黑客不知道你的网站的后台、网站采用程序、数据库的地址。
4、从稳定性来看:哪天数据库服务器挂了,动态网页就拜拜了!而要运行一个静态网页的发布服务器,相信大家都知道配置不是太高也行的吧?呵呵。
因此,我认为,生成静态页面具有可行性。
那么怎么把动态网页的代码生成静态网页呢?又存在哪呢?原理其实很简单。
1、利用freemark模板生成静态页面,网上搜一下大把大把的代码随你挑,我就不在这里啰嗦了。
我很讨厌这种方式,因为对于一个数据量较大的页面来讲工作量太大,要写模板,语法又比较怪异,不流行!
2、也是我偶尔想起来的。用java中urlconnection抓取某个url网页源码(这是原理核心)生成html文件,就是这么简单!就是这么easy!
代码奉上!
1)、以下是捕捉网页源码程序:
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文件,这个需要根据用户的需求了,我根据我项目中遇到的情况写了以下代码:
/**
* 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);
}
来源:
1、从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而静态页面则省去了这些时间。
2、从便于搜索引擎抓取的角度来讲:搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎seo排名更容易提高,一些大门户站页面大多都采用静态或伪静态网页来显示,更便于搜索引擎抓取与排名。
3、从安全性来看:静态网页不宜遭到黑客攻击,因为黑客不知道你的网站的后台、网站采用程序、数据库的地址。
4、从稳定性来看:哪天数据库服务器挂了,动态网页就拜拜了!而要运行一个静态网页的发布服务器,相信大家都知道配置不是太高也行的吧?呵呵。
因此,我认为,生成静态页面具有可行性。
那么怎么把动态网页的代码生成静态网页呢?又存在哪呢?原理其实很简单。
1、利用freemark模板生成静态页面,网上搜一下大把大把的代码随你挑,我就不在这里啰嗦了。
我很讨厌这种方式,因为对于一个数据量较大的页面来讲工作量太大,要写模板,语法又比较怪异,不流行!
2、也是我偶尔想起来的。用java中urlconnection抓取某个url网页源码(这是原理核心)生成html文件,就是这么简单!就是这么easy!
代码奉上!
1)、以下是捕捉网页源码程序:
复制代码 代码如下:
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文件,这个需要根据用户的需求了,我根据我项目中遇到的情况写了以下代码:
复制代码 代码如下:
/**
* 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);
}
来源:
上一篇: 浅谈C# 中的可空值类型 null
推荐阅读