- 浏览: 739751 次
- 性别:
- 来自: 湖北
文章分类
最新评论
-
SE_XiaoFeng:
用mysqldump命令行导出。这个报错唉。错误提示信息如下: ...
linux下如何导入导出MySQL数据库 -
SE_XiaoFeng:
文章写的干脆了当,我喜欢!
linux下如何导入导出MySQL数据库 -
niky6688:
网站咋打不开呢
beckham herms birki ...
【原创】上周给公司新做了一个网站,请大家审阅! -
niky6688:
哈哈
new chanel bags 2012
burbe ...
今天我抢了一个咪咪??? -
ydsakyclguozi:
...
jsp资源管理器也可能是木马
需转载,请注明转载出处!本文地址:
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
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
2010-12-11 08:51 1200import java.util.ResourceBu ... -
【珍藏版】微软等数据结构+算法面试100题全部出炉[100题首次完整亮相]
2010-12-06 16:33 2889转至: http://blog.csdn.net/v_JULY ... -
【原创】Log4j 日志文件 使用
2010-12-02 11:37 1234log4j.properties 代码 log4j.ro ... -
【精华】保护自己的网站资源
2010-11-19 08:03 1207禁止用“另存为”保存页面 <head> < ... -
【精华】Window.Open()网页弹出窗口大全
2010-11-16 18:01 1572【1、最基本的弹出窗口代码】 <!--<br ... -
【精华】页面右下角弹出类似QQ或MSN的消息提示
2010-11-05 16:36 1035具体实现见 附件 主要是 针对 在框架中 如何实现 后下 ... -
【原创】苦恼了1个星期的DIV 滚动条置底, 今天终于实现了!!!
2010-11-05 10:58 3447<script type="text/ja ... -
【急救......】Could not find the main class.program will exit
2010-11-01 17:23 1637Java中Could not find the main cl ... -
屏蔽 F5 刷新键
2010-10-28 11:09 796<script language="JavaS ... -
web页面中按ESC关闭窗口
2010-10-28 11:04 1415<script language="jav ... -
web页面中如果想让用户复制页面内容粘贴时加入一些自定义信息
2010-10-28 11:04 859如果让用户复制你网站上的信息到别处粘贴时,附加自定义信息可以采 ... -
防止页面被多次提交
2010-10-28 11:03 18971. javascript ,设置一个变量,只允许提交一 ... -
Javascript打印代码
2010-10-18 14:38 904Javascript打印代码 实现打印功能的javasc ... -
【原创】struts+mysql+jsp 分页源码
2010-09-16 10:42 941具体代码见附件 一起学习,xf.zhouwenjun@163 ... -
【原创】struts 动态 设置radio 与 select 的默认值
2010-08-06 13:10 1651运行效果见 附件,有好的解决方法请分享xf.zhouwenju ... -
【原创】平时编码中积累的,非常好用,且很全的【时间工具类】
2010-07-21 17:42 910具体java类 请下载附件!烦请大家一起完善完善,请给我也分享 ... -
【原创】苦苦寻找的: ajax 定时读取数据,无刷新在页面显示
2010-07-19 17:17 1060demo 见附件 -
【绝】在web工程下 调用js 日历控件 报错【missing ( before function parameters)
2010-07-09 11:28 1135报错代码 function document.onclick( ... -
【精髓】非常好用的日历控件,可以自由的选择日期 时分秒
2010-07-09 10:57 17531、Calendar.js代码如下 省略! 具体内容 ... -
JS获取Select多选的值
2010-07-07 15:50 3577JS获取Select多选的值 DropDownLis ...
相关推荐
- `java.util.Random` 用于生成伪随机数,可用于生成随机数或随机选择。 - **向量类 Vector** - `java.util.Vector` 是线程安全的动态数组,可以自动调整大小,适用于多线程环境。 - **栈类 Stack** - `java....
### Java面试精华知识点详解 #### 一、JVM内存划分 **1.1 程序计数器(Program Counter Register)** - **定义**: 当前线程所执行的字节码的行号指示器,用于记录当前线程所执行的字节码的地址。 - **特性**: - **...
【达内java工程师训培笔记...这些知识点构成了Java Web开发的基础,对提升Java工程师的技能水平和项目实践经验有着重要作用。通过深入学习和实践,开发者可以掌握构建复杂Web应用的能力,从而在职场上取得更大的成功。
【JSP 精华知识点总结】 Java Server Pages(JSP)是Java EE平台中用于构建动态Web应用程序的重要组成部分。它结合了HTML和Java代码,让开发者能够在同一个文件中处理静态内容和动态逻辑。JSP的本质是Servlet,它...
- **HTML示例**:HTML是最基础的网页语言,用于构建静态页面。 - **JSP示例**:JSP是一种动态网页技术,可以在服务器端执行Java代码并生成HTML响应。JSP文件通常包含HTML标签以及嵌入式的Java表达式和脚本元素。 ...
在本项目中,Java用于处理业务逻辑、数据库操作以及与JSP页面的交互。常见的Java后端框架如Spring MVC或Struts2,可以提供结构化的开发模式,提高代码的可维护性和可扩展性。 **3. 数据库设计** 教学管理系统通常会...
**JSP(Java Server Pages)**是Java技术在Web开发中的一个重要组成部分,它是一种动态网页技术,允许开发者将静态HTML内容与动态Java代码结合起来,从而创建交互式的网页应用。JSP是在服务器端运行的,其生成的HTML...
1. **JSP页面结构**:一个JSP页面由静态内容(HTML、CSS、JavaScript)和动态内容(Java代码)组成。动态内容以`<% %>`或`标签的形式出现,负责处理服务器端逻辑。 2. **指令元素**:如`<%@ page %>`, `...
**JSP基础速成精华讲解** JavaServer Pages(JSP)是Java平台上的一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现动态内容的生成。本教程面向初学者,旨在帮助你快速掌握JSP的基础知识。 ...
《JAVA SE 类库查询...以上内容仅为《JAVA SE 类库查询手册》的部分精华,涵盖了Java SE 6中关键的类和接口。深入理解这些基础知识对于提高Java开发技能至关重要。无论是学习还是工作,这本手册都是不可或缺的资源。
**JSP(JavaServer Pages)** 是一种动态网页技术,由Sun Microsystems开发,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,从而实现服务器端的动态生成页面。JSP是Java EE(企业版)平台的一部分,主要...
- JSP是一种服务器端的技术,它将HTML或XML文档和Java代码结合,使得开发者可以在页面上进行动态内容的生成。 - JSP页面由HTML标签、脚本元素(scriptlets)、声明(declarations)、表达式(expressions)、指令...
JSP是一种用于创建动态网页的技术,它结合了HTML、XML和Java语言,允许开发者在服务器端生成动态内容,并将其嵌入到静态网页中。下面,我们将深入探讨JSP的关键概念和技术细节。 1. **JSP基础知识** JSP页面由...
JSP页面由静态内容和可执行的Java代码(标签、脚本元素)组成。通过JSP指令、表达式、脚本片段等,开发者可以方便地在页面上插入动态数据。JSP的转换过程会产生对应的servlet,执行后生成HTML发送给客户端。 Tomcat...
- 页面静态化:部分高访问量页面可转化为静态HTML,减少服务器压力。 - 负载均衡:通过Nginx、HAProxy等工具实现多服务器间的负载分发。 通过以上分析,我们可以看出“基于Java的非SSH框架论坛系统”是一个综合了...
**JSP(Java Server Pages)** 是一种动态网页技术,由Sun Microsystems开发,它允许开发者在HTML、XML或其他标记语言中嵌入Java代码,从而实现服务器端的动态内容生成。本资源“JSP精华编程与文档说明”是针对JSP...
JSP页面会被服务器转换成Servlet,然后由Servlet来处理请求并生成响应。JSP页面的主要组成部分包括HTML标记、JSP指令、脚本元素和JSP表达式。 ### 2. JSP元素 - **JSP指令**:例如`<%@ page %>`, `<%@ include %>`...
学习和研究这个开源项目,你可以深入了解Java Web开发中的session管理、cookies使用、权限控制、模板引擎、数据库设计等方面的知识,同时也能了解到论坛系统特有的功能实现,如用户注册与登录、发帖、回帖、精华帖、...