用urlrewrite及mapping方式实现静态化

来源:互联网 发布:大数据时代在线 编辑:程序博客网 时间:2024/06/06 05:26

用Article表来演示下页面静态化,在此做记录,便于今后参考。这里是基于SSH2架构来演示的。

1.演示工程整体结构概览

演示工程结构概览

这里我引入了htdz_lib这么个User Libraliry,包含了SSH2整合所需的jar以及urlrewrite.jar。

同时urlrewrite.xml也已创建于WEB-INF下。

2.Article表预览

Article表

我们给Article表增加个HadStatic字段,用以标识此文章是否已静态化。

 

我们不建议添加一篇文章就直接生成对应的静态页面,如果都没有用户来阅读,服务器就徒增了大量html文件,浪费资源。

所以我们一般采用访问生成策略:

用户访问某文章,判断服务器是否存在此文章对应的静态页,存在则直接重定向到此静态页面,不存在则执行静态化,然后再重定向到生成的静态页。

然而每次通过IO去查找文件是否存在,耗费性能,所以像Article这类表加个HadStatic字段,直接判断字段的值来决定是否静态化显得合理多了。

3.配置web.xml

其它你懂的,就是修改了struts2的过滤器的<filter-mapping/>,增加了几个<dispatcher/>,WHY?后面会讲到。

另外再加了个urlrewrite的过滤器。

4.配置applicationContext.xml

其他dataSource、sessionFactory、事务等配置,不是本帖的重点,略去了。

这里我在<beans/>中用了default-autowire="byName"让spring自动装配依赖的bean了。

5.下面贴上各层的代码

以下是ArticleDao.java

再是ArticleService.java及ArticleServiceImpl.java

然后是ArticleAction.java

这里省略了getter、setter方法。

CreateStaticHTML.java

这里我们采用了mapping方式实现静态化。另外还有用freemarker作为模版来实现静态化的,

将在《用urlrewrite及mapping方式实现静态化》内做介绍。建议采用mappding方式。

6.struts.xml

7.页面articleList.jsp及article.jsp

下面是articleList.jsp

下面是article.jsp

  

 

这里我们先看下静态化的目标,总结如下:

1.直接返回已存在的静态页,减少服务端压力;

2.隐藏真实访问地址,增强系统安全性;

3.增加网站被搜索引擎爬虫捕获的概率;

 

为了实现2和3的目标,我们还使用了urlrewrite伪静态技术,把articleList.jsp的“查看”链接编写为

<a href="article_${article.articleID}_${article.hadStatic}.html" target="_blank">查 看</a>。

8.在urlrewrite.xml里配置了转向链接

 

前面我们不是在web.xml里配置了urlrewrite过滤器嘛,这里的article_(/d+)_([0-1]).html的请求被过滤成

showArticle.action?articleID=$1&hadStatic=$2

这里的$1指第一个位置正则表达式的值,$2指第二个位置正则表达式的值,

所以当我们点击页面的链接

<a href="article_${article.articleID}_${article.hadStatic}.html" target="_blank">查 看</a>

后台实际去访问了

showArticle.action?articleID=${article.articleID}&hadStatic=${article.hadStatic}。

 

struts2的过滤器只过滤直接来自客户端.action的request请求。当我们访问*.html时,通过urlrewrite过滤器在服务端用fowward转成.action请求,struts2是不会处理的。所以我们前面修改了struts2的过滤器,增加了<dispatcher/>

 

至此,彻底完成了静态化的目标,看下效果。

浏览器输入http://localhost:8080/listArticles.action,返回articleList.jsp显示文章列表,

鼠标移到第一篇文章的“查看”链接处,查看状态栏显示地址

访问

说明请求的articleID是1,hadStatic是0,

urlrewrite在服务端将其forward成showArticle.action?articleID=1&hadStatic=0。

生成静态页后重定向到静态页article_1.html

静态页面

再次刷新http://localhost:8080/listArticles.action

鼠标移动到第一篇文章的“查看”链接处,看状态栏显示。

访问

说明此文章已静态化,点击后将直接访问html页面,我们的工程里已经存在这个HTML页面了

静态文件

原创粉丝点击