Javaei的发布系统的主要功能是录入、预览和发布,在实现上,其实是个很小很小的增删改查,本微不足道,但我觉得技术不是最重要的事,因为我的网站目前不需要太高深的技术。但还是要说说这个发布系统的一些实现细节,不为别的,只为给自己做个记录,给网站做个记录。
在上一篇已经说到过,发布系统的关键在于生成html并替换动态连接为静态的html连接,我想到的实现方式有两种,在客户端用程序发起请求,第一种方式是解析响应的html,对要处理的超级链接(也就是<a href=””>)做处理,第二种方式是在开发的时候定制一个标签,把要处理的超级链接写在定制标签里,服务器在解析标签的时候对超级链接进行处理。对超级链接进行处理有两件事,一件事就是生成该链接的html文件,一件事是替换原来的连接为指向生成的html文件的静态链接。我采用的是第二种方式。第一种方式更适合对已有的网站进行静态化。不管是哪种方式,都面临着一个相同的问题,那就是在处理超级链接的时候,超级链接指向的页面同样包含着要处理的超级链接,而且还会有与正在处理超级链接相同的超级链接,这是个递归。其实这也是个简单的爬虫,已经爬过的就不能再爬。解决这个问题其实很简单,对已经处理过的超级链接做个hash缓存就可以了。
要处理的超级链接生成的html方式可能不一样,简单来说就是生成的html文件的路径和生成的html连接的uri可能不相同,所以需要把这种不同从标签处理器里分出来,标签不能太复杂,标签的主要作用应该是接受标签的属性值作为参数和输出<a>标签和href属性的值及其他属性的值。而生成html文件和html路径(也作为uri)应该由一个独立出来的处理器来完成。下面是相关的类结构图。
BaseHrefTag的部分代码如下
public abstract class BaseHrefTag extends BodyTagSupport {
private String href;//
private String tohtml;//是否需要处理,预览时为false
private String classname;//css class name
private String target;//target
private String root;//生成html链接时是否加上host
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
String hrefvalue = null;
// System.out.println("getHref() "+getHref());
if(getHrefCache().containsKey(getHref())){
hrefvalue = getHrefCache().get(getHref());
}else{
hrefvalue = getHref();
if(isTohtml()){
hrefvalue=getToHtml().getHtmlHref(hrefvalue);
hrefvalue = addRoot(hrefvalue);
getHrefCache().put(getHref(), hrefvalue);
try {
hrefvalue = getToHtml().exportToHtmlFile(getHref());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
hrefvalue = addRoot(hrefvalue);
getHrefCache().put(getHref(), hrefvalue);
}
}
String href ="<a href=\""+hrefvalue+"\" ";
if(getTarget() != null){
href = href + "target = \""+getTarget()+"\" ";
}
if(getClassname() != null){
href = href + "class=\""+getClassname()+"\"";
}
href = href + ">";
printToPage(href);
return (BodyTagSupport.EVAL_BODY_TAG);
}
}
AbstractToHtml的部分代码如下
public abstract class AbstractToHtml {
//有子类实现,构造生成的html文件的名称和路径
protected abstract String[] createDirAndFile(String href);
public String exportToHtmlFile(String href)throws Exception{
//发起get方式请求
URL mu = new URL(ClientParam.root+appendToHref(href));
URLConnection conn = mu.openConnection();
conn.connect();
String[] dirfile = createDirAndFile(href);
writeToFile(ClientParam.basicdir+dirfile[0],dirfile[1],conn);
return dirfile[0]+dirfile[1];
}
//读取服务器响应的内容输出到html文件
private void writeToFile(String dirname,String filename,URLConnection conn)throws Exception{
deleteOldFile(dirname,filename);
PrintStream ps=new PrintStream(dirname+filename,ClientParam.charset);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),ClientParam.charset));
String s;
while((s=br.readLine())!=null){
ps.println(s);
}
br.close();
ps.close();
}
}
页面的<iframe src="">src属性又是也需要处理,采用同样的方法,定义SrcTag。
在开发的时候,非常喜欢用jstl和自己定义的标签,其实人家的模板技术也大致如此。
- 大小: 19 KB
分享到:
相关推荐
NULL 博文链接:https://summeryhrb.iteye.com/blog/423297
青年教师课堂教学手记——胡美霞.doc
班主任工作范文班主任手记——班级管理的无为与民主.doc
资源名称:DBA手记4——数据安全警示录资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
单片机的匠人手记很出名,现在跟大家共享一下
- 功能强大:内置丰富的函数库,支持多种数据库接口,可以轻松实现复杂的网站功能。 - 高效性:运行速度快,尤其对于处理大量数据和访问数据库的应用程序来说,性能表现优秀。 - **应用场景**: - 构建动态网页:...
IT项目经理成长手记PDF 潘东_韩秋泉著 来自项目第一线的管理经验和实用工具 机械工业出版社 2013年1月第1次印刷 完整版,含全部书签目录 非常不错的资源 整本书以亲身经历的故事穿插理论知识的写法,很容易让人...
【标题】:“小黑之天地培训学习手记——第三、四周” 这篇博客是博主小黑在天地培训课程中关于第三、四周学习内容的记录。在这个阶段,他可能深入学习了编程语言的源码分析和使用工具提升开发效率的技巧。由于没有...
├─第一篇 DBA工作手记 │ 01.Eygle的DBA工作手记 │ 02.Yangtingkun的DBA工作手记 │ 03.老熊的DBA手记 │ 04.BanPing的DBA工作手记 │ ├─第二篇 诊断案例篇 │ 01.ASM案例分析与诊断 │ 02.监听故障的诊断与...
这篇文档讲述的是一个班主任在处理留守儿童教育问题上的经历和思考,体现了教育工作者对特殊群体学生的关心与责任。留守儿童,指的是因父母外出务工而留在家乡生活的孩子,他们在成长过程中可能面临亲情缺失、教育...
随着我国经济的飞速发展,农村劳动力大量涌入城市,为社会的建设贡献着自己的力量。然而,这一现象也催生了一个特殊群体——留守儿童。他们被留在农村,由祖辈或其他亲戚照料,面临着诸多生活和教育上的挑战。这些...
STM32的GPIO口可以配置为输入和输出模式,并能够实现对按键状态的检测以及LED灯的控制。本例程提供了如何通过STM32操作GPIO的输入输出模式,检测按键状态,并控制LED灯的点亮以及通过串口输出按键值的详细步骤。 ...
Linux桌面的新彩虹——Fedora Core 4试用手记揭示了一个充满活力和创新的开源操作系统版本。Fedora Core 4(FC4)的发布标志着Linux在桌面领域的又一个重要里程碑,它采用了最新的开源技术,包括GNOME 2.10、KDE 3.4...
MATLAB GUI设计学习手记(第二版)——罗华飞编著2011
Linux服务器也可以很简单——Quick Enterprise Linux AS4使用手记.pdf
于博士SI设计手记,主要讲解了信号完整性基本理论和在实际工作中的经验。
matlab的gui设计经典教程,适合初学者、开发人员等读者参考。
非常摄影手记玩转单反相机,,2天玩转单反相机,电子工业出版社