学历考试 | 高考 | 外语考试 | 英语词汇 | 计算机考试 | 资格考试 | 建筑工程考试 | 会计考试 | 医药考试 | 技能考试 | 才艺考试 | 出国留学 | 企业管理

基于Spring框架的WebSphere应用开发2

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass"> <value> org.springframework.web.servlet.view.freemarker.FreeMarkerView </value> </property> <property name="suffix"><value>.ftl</value></property> </bean> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath"> <value>/view/</value> </property> </bean>

  如果不使用Spring的MVC框架而想结合已有的一些MVC框架,Spring也是支持的。Spring对于常见的MVC框架都提供了支持,包括Struts,WebWork,Tapestry和JSF等。结合使用这些框架的一个好处是可以使用一些已有的熟悉的技术,另外结合Spring的AOP拦截器可以相对比较容易地处理框架动作共有的事情,比如动作的日志处理等。如果选择这些MVC框架,那么在使用框架的配置文件和应用的Spring配置文件都需要做相应的修改。比如使用Struts的时候,Struts-config.xml配置文件中的映射动作类型一般会设置成org.springframework.web.struts.DelegatingActionProxy,或者设置控制器为org.springframework.web.struts.DelegatingRequestProcessor。然后需要在相应应的WebApplicationContext中定义与Struts Action对应的Bean。这样就可以充分利用Spring的控制反转技术来管理Struts的Action了。

  另外在使用这些框架的时候要解决的一个问题是上下文的装载。比如使用Struts,可以使用ContextLoaderPlugin来装载Web上下文。这个ContextLoaderPlugin替换了原来通过DispacherServlet装载的方式。需要在struts-config.xml文件中添加如下条目:<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>。这种方式可以使Spring的Web上下文随着Struts ActionServlet的初始化而装载。

  因此,如果用户已有的应用是基于某个MVC框架,或者用户熟悉某个框架,那么可以利用Spring对这些框架的支持结合使用。因为我们的目的本来就是为了解决问题而不是为了使用某种技术。但是对其它用户而言,如果不是对已有的一些MVC框架比较熟悉的话,那就直接使用Spring的MVC框架就可以了。

  Web Context设置

  对于不依赖于应用服务器的Spring 上下文(Context)设置,通常在应用代码中通过FileSystemXmlApplicationContext或ClasspathXmlApplicationContext来获取。比如使用这样的代码来得到上下文:

ApplicationContext ctx = new FileSystemXmlApplicationContext("config.xml");

  但是按照控制反转的原则,应用程序代码应该尽可能少的知道上下文的设置。因此,在基于Spring的Web应用中,这样的代码也可以省去。Spring可以通过配置让Web容器自动装载上下文配置文件。从本质上讲,Web应用的ServletContext就是Spring用来存放应用上下文的地方。Spring中与Web Context装载相关的有几个类:

  1. ContextLoaderListener:一般的应用服务器如WAS都能先装载Listener,如果不是的话,那么只能使用ContextLoaderServlet。

  2. ContextLoaderServlet:需要配置<load-on-startup>使得它率先装载。真正装载Context的类是ContextLoader,上面两个类只是两种调用ContextLoader的不同途径。ContextLoader内部实际调用的是XmlWebApplicationContext,其缺省配置文件为/WEB-INF/applicationContext.xml。

  如果使用ContextLoaderListener,其在web.xml中的配置一般如下:

<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>

如果使用ContextLoaderServlet,其在web.xml中的配置一般如下:

<servlet> <servlet-name>context</servlet-name> <servlet-class> org.springframework.web.context.ContextLoaderServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet>

  应用本身可能除了基于HTTP的Web渠道之外还通过别的渠道对外提供服务,因此,一个比较好的做法是把展示相关的配置与后面业务处理部分的配置分开。这样如果更改了应用的访问渠道,只需要修改对应的配置文件即可。因此,Spring提供了一个WebApplicationContext的概念。在WebApplicationContext中一般包含与Web访问相关的配置定义,包括各种控制动作的定义、界面展示的定义等等。WebApplicationContext一般由DispatcherServlet来初始化。在上下文层次结构上可以把它看成是ApplcationContext的子上下文。在缺省的情况下,DispatcherServlet装载的配置文件名称为其Servlet名称-Servlet.xml,但是可以通过contextConfigLocation参数来定制。DispatcherServlet在web.xml中的定义示例如下:

<servlet> <servlet-name>Dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/context/Webcontrollers.xml</param-value> </init-param>

  数据持久化层

  虽然使用J2EE技术的Web应用可以连接多种不同的企业信息系统(EIS),但是毫无疑问数据库是其中最为重要和常见的一种。正因如此,Spring对数据库访问提供了非常完备的支持。数据访问对象(DAO)模式是J2EE模式中非常重要的一种。它的主要目的是使得持久化层与业务逻辑层分离,从而屏蔽持久化层的具体实现。我们可以把Spring的DAO支持分为两大类,一是直接基于Spring JDBC模板的数据访问,另一类是基于某种O/R映射框架的数据访问。这里刚好可以使用Spring的控制反转特性,通过外部配置文件来定义DAO接口和实际实现类之间的关系。Spring框架目前支持的O/R映射框架包括Hibernate、JDO、TopLink、iBATIS等。

  假设我们定义了一个userDAO。当使用JDBC来实现这个DAO的时候,定义的类可以如下所示:

public class userDAOJDBC extends JdbcDaoSupport implements userDAO{ … }

  如果使用Hibernate来实现这个DAO的时候,定义的类如下:

public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO { … }

  Spring对于其它的O/R映射机制都有相应的抽象类供应用使用,比如对于iBATIS有SqlMapClientDaoSupport,对于JDO有JdoDaoSupport等。

  下面我们看一下如何在Spring的配置文件中定义上述DAO与具体实现的关系。假设我们的userDAO具体实现是通过Hibernate,那么在applicationContext.xml中的一个DAO可以定义如下:

<bean id="userDAO" class="com.fgw.dao.hibernate.UserDAOHibernate"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean>

  在这里我们实际DAO接口定义是:com.fgw.dao.UserDAO,而具体实现类为:com.fgw.dao.hibernate.UserDAOHibernate。显然,对于其它DAO的实现,我们只需要在配置文件中修改相应的实现类(具体实现类当然是比不可少的)和属性即可。比如对于JDBC的DAO实现,属性就定义成相应的数据源。

上一篇:基于Spring框架的WebSphere应用开发3 下一篇:基于Spring框架的WebSphere应用开发1