在SpringMVC中实现程序启动时加载数据库中内容
2016-02-14 16:12
621 查看
因为需要在程序启动时加载相关系统参数,所以百度了很多,现在做个记录。
一、使用servlet(失败)
1、继承HttpServlet类,并在构造方法中处理
2、在web.xml中配置servlet的启动顺序
这里的<load-on-startup>2</load-on-startup>就是启动顺序
a、当值为0或者大于0时,表示容器在应用启动时就加载这个servlet
b、当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载
c、正数的值越小,启动该servlet的优先级越高
(在这里我不把其设置为1是应为我想要spring的DispatcherServlet先执行)
这个方法的弊端在于我没法获取application,我使用
二、实现ServletContextListener接口(失败)
1、实现ServletContextListener接口,并在contextInitialized方法中处理
这时候application的问题解决,但是新的问题出现了。我无法使用spring的数据层了。
将上面的/***/中注释的代码弄出来,调断点的时候发现userService根本就没有被初始化。
毕竟listener没法像servlet那样设定执行顺序,在该listener执行的时候spring的配置还没执行完呢
三、继承ServletContextAware类(成功)
1、继承spring自带的ServletContextAware类,并在setServletContext方法中处理
2、在applicationContext.xml中配置bean
此时application照样没问题,但是加上数据库那部分就报错了,具体错误我就不贴了,大致意思就是Autowired在这里用不了。
毕竟Autowired是应该在service或者Controller中才能使用的,所以这里我们应该吧bean按照service或者Controller的方式来配。
我这里调用的是service中的方法,那么这个bean就应该配成Controller
我之前都是按注解配的,这里也这样就可以了:
1、把之前在在applicationContext.xml中配置的删除
好了,到这里application和数据层的问题都解决了。有看到这篇笔记的筒子们有别的实现方法的也希望能告诉我。
一、使用servlet(失败)
1、继承HttpServlet类,并在构造方法中处理
public class ViewServlet extends HttpServlet { public ViewServlet() { System.out.println("这是一个测试构造函数Servlet"); } }
2、在web.xml中配置servlet的启动顺序
<servlet> <servlet-name>viewServlet</servlet-name> <servlet-class>com.util.classUtil.ViewServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet>
这里的<load-on-startup>2</load-on-startup>就是启动顺序
a、当值为0或者大于0时,表示容器在应用启动时就加载这个servlet
b、当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载
c、正数的值越小,启动该servlet的优先级越高
(在这里我不把其设置为1是应为我想要spring的DispatcherServlet先执行)
这个方法的弊端在于我没法获取application,我使用
ServletContext application = this.getServletContext();// 获取application得到的是null(如果有获取的方法,知道的大牛记得高诉我)
二、实现ServletContextListener接口(失败)
1、实现ServletContextListener接口,并在contextInitialized方法中处理
public class ViewListener implements ServletContextListener { /** * 当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。 */ @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("这是Listener的结束"); } /* @Autowired private UserService userService;*/ /** * 当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化, * 并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。 */ @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("这是Listener的开始"); /* try { TBLBaseUser user= dao.findByName("张三"); System.out.println("name:"+user.getUserName()+"\t psw:"+user.getPassword()); } catch (Exception e) { e.printStackTrace(); }*/ ServletContext application = sce.getServletContext(); application.setAttribute("test", "this is test!"); } }2、在web.cml中配置listener
<listener> <listener-class>com.util.classUtil.ViewListener</listener-class> </listener>
这时候application的问题解决,但是新的问题出现了。我无法使用spring的数据层了。
将上面的/***/中注释的代码弄出来,调断点的时候发现userService根本就没有被初始化。
毕竟listener没法像servlet那样设定执行顺序,在该listener执行的时候spring的配置还没执行完呢
三、继承ServletContextAware类(成功)
1、继承spring自带的ServletContextAware类,并在setServletContext方法中处理
public class SpringViewListener implements ServletContextAware{ @Autowired private UserService userService; @Override public void setServletContext(ServletContext sc) { TBLBaseUser user=null; try { user = userService.findByName("张三"); System.out.println("name:"+user.getUserName()+"\t psw:"+user.getPassword()); } catch (Exception e) { } sc.setAttribute("userName", user.getUserName()); }
2、在applicationContext.xml中配置bean
<bean class="com.util.classUtil.SpringViewListener"/>
此时application照样没问题,但是加上数据库那部分就报错了,具体错误我就不贴了,大致意思就是Autowired在这里用不了。
毕竟Autowired是应该在service或者Controller中才能使用的,所以这里我们应该吧bean按照service或者Controller的方式来配。
我这里调用的是service中的方法,那么这个bean就应该配成Controller
我之前都是按注解配的,这里也这样就可以了:
1、把之前在在applicationContext.xml中配置的删除
<bean class="com.util.classUtil.SpringViewListener"/>2、在SpringViewListener上加上@Controller
好了,到这里application和数据层的问题都解决了。有看到这篇笔记的筒子们有别的实现方法的也希望能告诉我。
相关文章推荐
- JAVA与C#的区别
- struts2 返回类型
- 2016蓝桥杯假期任务之《关联矩阵》
- Java关键字transient和volatile小结
- Java高级篇 -- List选择及优化
- java设计模式之——策略模式
- Spring 统一的异常访问体系
- java常见的问题
- net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- 通过Struts源码生成chm格式帮助文档
- JavaWeb学习总结(一)——JavaWeb开发入门
- Java栈和堆的区别
- java虚拟机的简单介绍
- java 趣味题目解题。
- Eclipse中设置作者日期等信息
- MyEclipse中Junit使用
- Eclipse卸载插件
- 理解java中的深复制和浅复制
- Java NIO概述
- Spring AOP 简单例子