首先说说为何要静态化。
对于如今的Web Application来讲,动态页面是占有绝对高的地位的,正由于有了动态化,才有了如今Web的丰富多彩,可是如同全部别的事实同样,好处每每都是有代价的。
为了产生出动态的效果,每一次对页面的请求都会要求服务器对页面进行编译或者执行,这些操做都很消耗系统资源。若是这期间还有和数据库的通信,那么代价将会更大。
若是一个页面在必定的时间内,其内容没有发生改变,那么就没必要为每一次对它的访问进行一次“新”的编译或执行。咱们能够把它在这段没有发生改变的时间内的结果保存到一个静态的页面里面,而后每次访问这个页面时,就用刚才保存的静态页面进行回复。这样便能大大地减小系统资源的消耗,而且提升对客户的响应速度。而这个过程就称之为页面静态化。 javascript
如今所面临的问题就是如何在JSP中将页面的内容保存下来。
在访问JSP页面的时候,服务器会先将JSP文件编译为Servlet文件,而后对这个Servlet编译、执行,并最终把结果返回给客户端。而咱们的任务就是要把这个最终生成的HTML静态页面保留下来,存放在服务器上。
解决的方法其实很简单。普通的对于JSP的访问,最终的数据流是回写到客户端的,若是咱们把它重定向,让它回写到服务器上一个本地的文件,这样就能把JSP的执行结果保存起来,而这个文件就是咱们想要获得的静态化的结果。 html
好了,说了那么多废话,如今说说具体怎么实现。
看过将JSP编译成的Servlet文件之后,能够知道这个Servlet是经过一个"JspWriter"类型的对象将数据回写给客户端的,而这个对象正是JSP里面的内置对象"out",如今咱们只须要定义一个本身的类,让它继承"JspWriter"类,覆盖里面的输出相关函数,让数据都输出到一个指定的文件就能够了。
例如(省略了部分重载函数): java
程序代码 web
而后将须要静态化的页面写成以下形式: 数据库
程序代码 服务器
这样页面静态化基本上就算完成了,余下的操做就是处理什么时候须要更新。至于什么时候更新是跟特定的应用程序相关的,这里就不详细分析了。 app
JSP使用URLRewirte实现url地址伪静态化 jsp
在网上找了不少关于URLRewirte的使用,基本都是关于asp的,jsp的相关文档不多,并且大多写的很模糊,看了以后也是不清不楚,并且在项目中没法使用成功,鉴于此,本身整理了关于URLRewirte的用法.该方法只是实现了url的伪静态化,并非真正的静态化. ide
工做环境:Eclipse3.2.2+MyEclipse_5.5.1+Tomcat5.0.28 函数
URLRewirte版本:urlrewrite-2.6.0.jar
前提条件:有一个能够正常使用的web应用项目
URLRewirte的用处:
1.知足搜索引擎的要求
2.隐藏技术实现,提升网站的移植性
3.知足美感的要求(我的感受这个用处太牵强)
项目部署
1.首先在http://tuckey.org/urlrewirte/下载urlrewirtefilter
2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下,而后编译
3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下
4.在web.xml文件中加入如下:
<!-- 动态地址静态化 -->
5.须要配置urlrewrite.xml文件来实现url静态化,下面将详细说明
到这里相关的配置已经完成,下面看如何把动态地址静态化
1.普通url静态化
例如:要把http://localhost/prjtest/user/list.jsp转换成http://localhost/prjtest/user/list.html
这种是最简单的,当一个servlet跳转到list.jsp页面列出user列表时,在urlrewrite.xml中这样配置:
当请求/user/list.html这个页面时,实际上至关于请求/user/list.jsp页面
在servlet的跳转要这样写:
response.sendRedirect("./user/list.html");
2.带参数的url静态化
例如:要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin转换成
http://localhost/prjtest/user/view/1_admin.html
在urlrewrite.xml中这样配置:
当请求/user/view/1_admin.html这个页面时,实际上至关于请求/user/list.jsp?cid=1&cname=admin页面
在servlet的跳转要这样写(cid,cname为变量):
response.sendRedirect("./user/view/"+ cid +"_"+ cname +".html");
注意:配置文件中用"&"来代替"&"