Cosmos框架是一个由国内开发人员开发的一款J2EE中间层框架,框架的主页在:
http://code.google.com/p/cosmos4j/
在1.0.3中,增加了一个将动态页面静态化的工具过滤器,下面把这个过滤器的使用简单介绍一下:
刚刚讨论了很多关于页面静态化的帖子,在这里把Cosmos中关于页面静态化的解决方案贴出来,应该说这个方案能基本上解决上面帖子讨论的所有问题,包括分页。
第一步、在开发中,一定要将所有链接转化成静态链接,即:*****.html的格式;
第二部、部署Cosmos中所附带的静态化的过滤器,部署方法如下:
<filter>
<display-name>static</display-name>
<filter-name>static</filter-name>
<filter-class>com.microbrain.cosmos.web.filters.StaticEnableFilter</filter-class>
<init-param>
<param-name>relative</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>root</param-name>
<param-value>E:/Web/cosmos/</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>static</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这个过滤器包括三个参数,分别是relative、root以及encoding,relative是指产生的静态文件是否就在应用程序的相对目录里,如果是相对目录,则root参数则可以使用相对路径,root参数是指产生的静态文件所放置的根目录,而encoding是指产生的HTML文件的编码。
第三步、配置Apache,使其能够达到以下目标:检查静态文件是否存在,存在则给用户返回静态文件,如果不存在,则重写URL,导向用户到动态页面,并在动态页面中加入一个参数cosmosStaticFile=/index.html,这个参数的存在可以触发上面配置的过滤器,使该过滤器能够将输出的响应页面保存到root参数配置的根目录下的文件/index.html中,根据cosmosStaticFile值的不同,可以保存不同的静态页面,下面是一个URL重写的样例配置:
RewriteEngine On
RewriteLog logs/cosmos-rewrite.log
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^/develop/([^-]+)-local-commands.html$ /dev/domainLocalCommands?forward=development.localCommands&domain=$1&cosmosStaticFile=/develop/$1-local-commands.html [PT,QSA,L]
上面的配置中RewriteCond来判断当前访问的静态页面是否存在,不存在则执行下面的URL重写规则,在重写规则中除了普通的动态页面参数之外,增加了一个参数为cosmosStaticFile=/develop/$1-local-commands.html,这个参数将会触发上面的过滤器,将这个URL的响应写到/develop/$1-local-commands.html文件中去。
最后,通过上述步骤,已经基本上实现了动态页面自动静态化的过程了,现在唯一需要开发人员在开发中注意的是,如果一旦发布新的帖子,或者内容,需要通过程序去清理上面配置目录里的相关静态页面,从而在下次访问的时候,能重新产生该页面。
其实这个做法,在PHP开发人员中,似乎知道的比较多,Java这么做的人并不多,但实际上,利用Java的过滤器,比起PHP来说,方便太多了,而且,可以能达到良好的扩展性和低耦合度。
http://code.google.com/p/cosmos4j/
在1.0.3中,增加了一个将动态页面静态化的工具过滤器,下面把这个过滤器的使用简单介绍一下:
刚刚讨论了很多关于页面静态化的帖子,在这里把Cosmos中关于页面静态化的解决方案贴出来,应该说这个方案能基本上解决上面帖子讨论的所有问题,包括分页。
第一步、在开发中,一定要将所有链接转化成静态链接,即:*****.html的格式;
第二部、部署Cosmos中所附带的静态化的过滤器,部署方法如下:
<filter>
<display-name>static</display-name>
<filter-name>static</filter-name>
<filter-class>com.microbrain.cosmos.web.filters.StaticEnableFilter</filter-class>
<init-param>
<param-name>relative</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>root</param-name>
<param-value>E:/Web/cosmos/</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>static</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这个过滤器包括三个参数,分别是relative、root以及encoding,relative是指产生的静态文件是否就在应用程序的相对目录里,如果是相对目录,则root参数则可以使用相对路径,root参数是指产生的静态文件所放置的根目录,而encoding是指产生的HTML文件的编码。
第三步、配置Apache,使其能够达到以下目标:检查静态文件是否存在,存在则给用户返回静态文件,如果不存在,则重写URL,导向用户到动态页面,并在动态页面中加入一个参数cosmosStaticFile=/index.html,这个参数的存在可以触发上面配置的过滤器,使该过滤器能够将输出的响应页面保存到root参数配置的根目录下的文件/index.html中,根据cosmosStaticFile值的不同,可以保存不同的静态页面,下面是一个URL重写的样例配置:
RewriteEngine On
RewriteLog logs/cosmos-rewrite.log
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^/develop/([^-]+)-local-commands.html$ /dev/domainLocalCommands?forward=development.localCommands&domain=$1&cosmosStaticFile=/develop/$1-local-commands.html [PT,QSA,L]
上面的配置中RewriteCond来判断当前访问的静态页面是否存在,不存在则执行下面的URL重写规则,在重写规则中除了普通的动态页面参数之外,增加了一个参数为cosmosStaticFile=/develop/$1-local-commands.html,这个参数将会触发上面的过滤器,将这个URL的响应写到/develop/$1-local-commands.html文件中去。
最后,通过上述步骤,已经基本上实现了动态页面自动静态化的过程了,现在唯一需要开发人员在开发中注意的是,如果一旦发布新的帖子,或者内容,需要通过程序去清理上面配置目录里的相关静态页面,从而在下次访问的时候,能重新产生该页面。
其实这个做法,在PHP开发人员中,似乎知道的比较多,Java这么做的人并不多,但实际上,利用Java的过滤器,比起PHP来说,方便太多了,而且,可以能达到良好的扩展性和低耦合度。