Spring如何整合WEB框架

来源:互联网 发布:剑灵韩国捏脸数据库 编辑:程序博客网 时间:2024/05/17 06:44

  前边我们讲过了如何使用Spring的声明式事务,即先需要根据DAO的框架类型设定一个TransactionManager的bean,然后引入tx命名空间,并使用<tx:annotation-driver  transanction-manger="">指向前边的事务管理器,从而使事务的注解起作用,第三部是在业务方法上添加事务注解使用注解即可。此外还讲过了事务的传播性(默认REQIURED值,即有事务在运行就行)、隔离级别(默认read_commited,读取另一个事务已经提交的数据)、超时属性(强制回滚前的时间,单位是秒)、只读属性(只读取而不操作数据,可帮助优化数据库)和不回滚异常类型属性(可设置不回滚的异常类型)。今天我们来讲一讲Spring如何整合WEB的框架,如Struts2。

  1.Spring在WEB下整合的思路

  与普通的Java项目相比,Spring在web下整合的异同是:

  ① 须额外的导入两个jar包,spring-web.jar  和spring-webmvc.jar

  ② spring的配置文件没有什么不同

  ③ 如何创建IOC容器?

  普通的Java项目中,我们在配置好spring的配置文件之后,只需要在main方法中通过new ClassPathXmlApplicationContext就可以获取IOC容器,但是在web环境下,我们希望在WEB程序被加载的时候才创建IOC容器的实例。那么如何确定web程序被服务器刚刚加载呢?

  在程序被服务器加载的时刻会有一个监听器叫做ServletContextListener可以记录这个时刻,并且他有一个ContextInitialed方法可以用于创建IOC容器的实例。这样,当web程序被加载时,就可以使用IOC容器了。那么,如何在web应用的其他组件中访问IOC容器呢?

  我们在监听器的初始化方法中初始化IOC容器之后,就需要将这个IOC容器的实例放入到ServletContext的对象application的一个属性中。然后web程序的其他组件就可以通过applicaiton这个域对象来访问IOC容器了。

  需要注意的是:我们在获取spring的配置文件时也可以自己在web.xml中为这个配置文件指定名称和位置。

  我们在这边学习到了在web项目中如何自定义一个监听器并在web项目被加载的时候进行监听程序。注意:web项目被加载就是web.xml文件被加载的时候。

  2.Spring的ServletContextListener

  ① 在spring中,他提供了一个ServletContextListener的实现类叫做ContextLoaderListener,它自动的帮助我们在加载web项目的时候来进行IOC容器的加载。我们需要做的就是在web.xml文件中配置这一个监听器ContextLoaderListener和在web.xml中配置初始化参数代表spring配置文件的名称和位置

  ② 然后在JSP页面中通过WebApplicationContextUtil.getApplicationContext(applcaiton域对象)获取IOC容器即可

  需要注意的是:在web.xml文件中配置的spring的配置文件的名称和位置必须按照严格的名称,因为在spring的ContextLoaderListener中获取配置文件就是通过名称获取的,名称必须是contextConfigLocatio。

  3.Spring整合Struts2框架

  我们使用Spring整合Struts2框架的最终目的是让Spring的IOC容器来管理Struts2框架中的各个Action实例,同时一旦Spring的IOC容器管理了这些Action的bean,那么在Action中,也就可以获取Spring的IOC容器中的其他的bean了

  配置步骤:

  ① 正常加入Struts2的内容:导入jar包,在web.xml文件中配置一个过滤器,创建Struts2的配置文件--struts.xml。

  ② 在Spring的IOC容器中配置Action的各个bean。特别需要注意的是:Sping配置的bean默认都是单例的,但是每个Action请求都会对应一个Action的实例,所以Action的实例必须多例的,即bean的属性应该为protoType。

  ③ 配置Struts2的配置文件--struts.xml。与以往的配置一个action请求不同的是,在以往我们的action节点的class属性指向的是一个类的全类名,然后通过反射创建一个Action的对象,但是现在我们使用Spring整合struts2框架之后希望使用Spring来管理各个Action类的实例,所以每个action节点的class属性应该指向在Spring的IOC容器中配置好的对应的bean的id。

  ④ 特别需要注意的是:我们还需要导入一个额外的jar包--struts-spring-plugin.jar,才可以将Spring和Struts2框架结合起来。在这个jar包中的Struts-plugin.xml中,重新配置了Struts2框架的对象工厂指向了Spring的IOC容器中的对象工厂,所以我们才可以使用Spring的IOC容器来创建Struts2的Action的对象。