论坛首页 Java企业应用论坛

关于页面静态化方案的实施

浏览 21955 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-08-27  
最近要作网站的静态化,老大让找方案,以前也没作过,在网上查了下具体的实现如下:
用Filter实现HTML缓冲的步骤是:  
   
  1.   用Filter截获请求,如/a.jsp?id=123,映射到对应的html文件名为/html/a.jsp$id=123.htm。  
  2.   查找是否有/html/a.jsp$id=123.htm,如果有,直接forward到此html,结束。  
  3.   如果没有,实现一个WrappedResponse,然后调用filterChain(request,   wrappedResponse)。  
  4.   将返回的WrappedResponse写入文件/html/a.jsp$id=123.htm,然后返回响应给用户。  
  5.   下一次用户发送相同的请求时,到第2步就结束了。  
   
  使用这个方法的好处是不用更改现有的Servlet,JSP页,限制是,JSP页面结果不能与Session相关,需要登陆或用户定制的页面不能用这种方法缓冲
我的疑问就是:
1.静态化启用之后的生命周期是多长,即静态化后到下次重新静态化的时间
2.有会话的、实时交付比较多的页面怎么作静态化
3.静态化的目录结构怎么化分,是在当前文件夹下生成吗
4。用过滤器的话怎么做到,比如我要静态化a目录下的1.jsp ,b目录的c.jsp

或者大家有什么好的方案没?
   发表时间:2007-08-27  
不解,1.3.4都是由你自己控制。第二点,既然用的是forward实现,那实质上还是动态页面,照样可以用jsp:include把动态内容包含进去?
或者用apache SSI?或者可以看看OSCache的CacheFilter和ehcache的CachingFilter?
1 请登录后投票
   发表时间:2007-08-27  
1.3.4是自己控制的,只是想听听别人的意见,比如静态化的目录结构有的人建议是不要和动态的内容放在同一个地方;
forward跳转的页面是html的,这样不就不用容器的解析了吗?

OSCache ehcache 是作缓存用的,和静态化有关系吗?

还请指教

ps:能否给咱推荐几本apache的书(2.0的),书店都没有
1 请登录后投票
   发表时间:2007-08-27  
我目前也在做这方面的工作,要求是对于免费的部分进行静态转变,对于会员部分仍然要做动态处理.
开始也想过用filter,但对与会员的部分仍要进行动态,显示动静混杂的话就很难用filter来解决.所以我们采用了数据加载模板的办法,在数据后边加一个url的字段,对新生成的静态页给他一个对应的字段,在生成列表的时候直接将其url写入就可以了.
这里我和主管有了分歧,我的意思是要根据数据的约束条件去查询模板并生成静态列表,这样的话如果一条数据在多个页面进行显示就成了很大的问题,怎样才能使这条记录(也就是他的url)加入到对应的页面,如果有二级或三级目录的话就很复杂.
主管的意思是针对于每个模板去向里面添加内容,这样就不用去考虑这条记录同时出现在几个地方的问题,但这样需要的模板就相当多,而且对应的每个模板要写一个对应的方法,在更新的时候还要去查找每个模板数据是不是有改变,才能更新.(这样工作量实在太大,不符合现实情况,或许是我对他的意思理解有误)
他强烈要求要按他的意思去做,现在我也是很为难啊.
1 请登录后投票
   发表时间:2007-08-28  
dxwang 写道
1.3.4是自己控制的,只是想听听别人的意见,比如静态化的目录结构有的人建议是不要和动态的内容放在同一个地方;
forward跳转的页面是html的,这样不就不用容器的解析了吗?

OSCache ehcache 是作缓存用的,和静态化有关系吗?

还请指教

ps:能否给咱推荐几本apache的书(2.0的),书店都没有

哦,我的意思是,既然你用filter来做静态,这本身就是动态的,为什么偏要生成为html呢。
引用

1. 用Filter截获请求,如/a.jsp?id=123,映射到对应的html文件名为/html/a.jsp$id=123.htm。
2. 查找是否有/html/a.jsp$id=123.htm,如果有,直接forward到此html,结束。
3. 如果没有,实现一个WrappedResponse,然后调用filterChain(request, wrappedResponse)。
4. 将返回的WrappedResponse写入文件/html/a.jsp$id=123.htm,然后返回响应给用户。
5. 下一次用户发送相同的请求时,到第2步就结束了。

不太清楚你的需求是什么,但根据上面这段,我猜是想减轻数据库的压力?或者是去掉不必要的系统内部逻辑处理?如果是这样,可以说,这就是一个缓存。而服务器的压力也肯定不在于容器解析的是jsp还是html上。
对于需要sesion的页面,不一定要生成html了啊,也可以生成为jsp,把动态的东西保留在生成的jsp中。也就是这样:
引用

1. 用Filter截获请求,如/a.jsp?id=123,映射到对应的jsp文件名为/html/a.jsp$id=123.jsp。
2. 查找是否有/html/a.jsp$id=123.jsp,如果有,直接forward到此jsp,结束。
3. 如果没有,实现一个WrappedResponse,然后调用filterChain(request, wrappedResponse)。
4. 将返回的WrappedResponse写入文件/html/a.jsp$id=123.jsp,然后返回响应给用户。
(写入的此jsp文件中,包含读取session的代码)
5. 下一次用户发送相同的请求时,到第2步就结束了。

oscache ehcache的CacheFilter都是使用拦截器对页面进行缓存的例子,似乎和你的要求很类似,并且有什么失效时间的配置啊,根据lastModified进行判断之类的东西,可能会用得着。
0 请登录后投票
   发表时间:2007-08-28  
静态生成的目地为了一些经常被访问的、只读的、交互少的前台页面,这些生成的静态HTML应该用apache来处理,而动态的部分交由动态服务器解析。

这样才是你生成静态文件的目地。

静态文件应由你的后台程序生成,例如一个新闻系统,后台的新闻发布系统会在发布新闻时就是生成html文件了。而前台的apache对应的只是这个html文件。再以动态web服务器无关。
1 请登录后投票
   发表时间:2007-08-28  
现在讨论的不是生成静态文件的目的.而是他的实现过程,尤其是同一条信息在不同栏目下显示时,怎样能够执行关联操作.
例如我新增一条记录,让他在不同的页面引用,怎么能确保记录都添加进去呢?
0 请登录后投票
   发表时间:2007-08-30  
新增记录时发布消息/事件进行通知,受影响的栏目全部重新生成静态页面。
0 请登录后投票
   发表时间:2007-08-30  
建立关联通知,例如,生成一个新闻,以这个新闻相关的页面要调用各自的生成程序重新生成。
0 请登录后投票
   发表时间:2007-08-30  
我们主管要求是针对于栏目的统一转化,不考虑他们间的关联关系,只是对模板的数据进行改变,不知道会出现什么样的问题。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics