原文出处:http://fojian.javaeye.com/blog/496769
最近学着做个ssh的网站,随着一系列问题的产生与解决,网站也大概初具模型,但这些天又被一个问题困扰,怎样实现一输入网址就请求数据库数据后对网站首页进行初始化呢?一般的网站都是一进入index网站首页的初始化就完成的,上过网的人都知道,要实现这种网站首页初始化肯定是有办法的,有人知其然也知其所以然,也许大部分人是知其然而不知其所以然的,像我,呵呵……
首先想到的肯定要发送一个action请求,但这个请求肯定是不能让用户进到你的首页后再点一下链接去完成的,想到了forward的,但以前用的都是forward里面的page值是跳转到一个页面,试了一下,将page里的值换成action请求后,在Struts.xml里再跳转到首页,结果不行!
然后想能不能让服务器启动的时候就完成这里的初始化呢?于是去看web.xml文件,在Struts的配置里有FilterDispatcher这个东东,这是Struts2的基本控制器,想这肯定是在启动时就会被初始化的,继承这个类试试,后来无果,百度了下,知道有个更好的方法实现系统的初始化,实现ServletContextListener这个接口,再在web.xml中配置一个自己的listener就行了,ServletContextListener有两个方法contextInitialized和contextDestroyed,这不就是系统初始化和销毁的方法嘛,其实contextInitialized这个词常常见到,在启动tomcat是控制台的前几行里就有它,就兴奋着去做了,可是当我把需要用到的属性从Spring中注入进来时问题又来了,因为contextInitialized是
在Spring的启动前完成的,这时还没将要注入的bean实例化呢,无奈又放弃了!
又想到在Spring的bean配置中有个init-method的属性,这是在bean的实例化之前指定要执行的方法,希望又来了,编写action,将action配置到Spring中,启动tomcat,给我报了个空指针异常,正是由于init-method那个方法有问题,我需要将一些值放置到session中供首页调用,可是这是通过ActionContext.getContext().getSession()得到的session却总是空的,找了好久也不知道这是为什么,
到现在还是没想通,没办法又放弃了!
用拦截器,呵呵,这个想法只是一闪而过……没办法,发帖求救,好心人说用forward的,啊,这不又回到我的原点了嘛,可是不行啊!百度下想确认forward的page能不能放action,发现貌似在Struts2中是不行的,无意中发现有一个js的方法可以实现从页面自动跳转到action中,哈哈爱死这位大哥了,代码很简单,一句就搞定了:
<script type="text/javascript">
window.location = '要跳转的action';
</script>
将其放到页面上转到一个action,提取数据后再到首页显示,哈哈,搞定!到目前为止,觉得这才是最简单最直接的方法,这样可以让用户访问的时候即时的请求到数据库里的数据,而不是在服务器启动的时候就把数据封装好了,但用户这时候却感觉不到发送的是action请求,而是页面请求。这样就实现了输入网址转到后就请求到了即时的网站首页信息,完成网站首页的初始化。
想想学习真是一件痛苦又快乐的事情,付出了才会有回报,但可能会转一些弯路,现在对我来说也许这是一件好事吧,呵呵...