Struts1.3+Spring4.0+Hibernate4.3.5框架搭建

来源:互联网 发布:如何得网游数据库信息 编辑:程序博客网 时间:2024/04/29 14:20

大部分实验室的项目采用的框架版本太旧了。这次,我尝试着自己搭建一个最简单的SSH架构,所用的版本都是现在最新的。搭建之前,看了一下别人的介绍的流程,照着做还是运行不通,可能是版本的问题吧。

毫无疑问,首先是下载相关的包了,当然去官网了,没的说,挑最新的下。不过那样就带了一个问题:包冲突。因为每个框架要想独立运行,都会包含一些必要的工具组件,如common-log.jar、log4j.jar,要是不同的框架所包括的工具组件的版本不一样,自然就冲突了。我已经把SSH架构所需的包上传上去,全部是官网下载,解决了包冲突问题。下载地址:http://download.csdn.net/detail/u013361010/7979729

首先要在项目配置文件中配置好struts和Spring,以便在项目启动的时候加载这些框架的配置文件,如下所示:

<context-param>    <param-name>contextConfigLocation</param-name>    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>  </context-param>    <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <servlet>    <description>This is the description of my J2EE component</description>    <display-name>This is the display name of my J2EE component</display-name>    <servlet-name>action</servlet-name>    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>    <init-param>      <param-name>config</param-name>      <param-value>/WEB-INF/struts-config.xml</param-value>    </init-param>  </servlet>  <servlet-mapping>    <servlet-name>action</servlet-name>    <url-pattern>*.do</url-pattern>  </servlet-mapping>  
    熟悉SSH架构的人都应该知道,其中Struts和Hibernate是相互独立的框架,他们被Spring这个框架容器统一管理着,也就是所要将Struts和Hibernate交给Spring管理。为把Struts交给Spring管理,如下图所示:

<action-mapping  <action path="/modify"input="/index.jsp"name="addForm" type="org.news.action.AddAction"  ><forward name="success" path="/index.jsp"/>   </action></action-mappings><controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>


其中Controller标签的配置就是将Struts交给Spring管理,看下Spring的配置文件applicationContext.xml就知道:

<bean name="/modify" class="org.news.action.AddAction">  <property name="service" ref="service"/></bean>
这样,当浏览器要求请求“/modify.do”时,所要执行的的Action便是“
<span style="font-size:24px;">org.news.action.AddAction”而且其属性service会被自动注入。</span>
再看Spring是如何管理Hibernate的

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">      <property name="jdbcUrl" value="jdbc:sqlserver://localhost:2996;databaseName=newsDemo"/>      <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>      <property name="user" value="sa"/>      <property name="password" value="sa"/>    </bean>    <!-- 数据源配置end -->        <!-- sessionFatory配置 begin -->    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">      <property name="dataSource" ref="dataSource"/>      <property name="annotatedClasses">        <list>          <value>org.news.form.LoginForm</value>          <value>org.news.form.AddForm</value>        </list>      </property>      <property name="hibernateProperties">        <props>          <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>          <prop key="hibernate.show_sql">true</prop>          <prop key="hibernate.hbm2ddl.auto">update</prop>          <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>        </props>      </property>    </bean>

这里要提醒注意就是hibernate.current_session_context_class这个属性的配置,再不能像单独运行Hibernate一样配置成thread。

OK,到此为止SSH的配置已经完了,下面讲几点此版本的SSH和低版本的区别。首先最大的区别是session的获取,不再是通过sessionFactory.openSession()方法。这个方法为每次操作创建一个session,而且不会自动关闭,必须手动进行进行关闭,相当麻烦。在此版本中会话的获取采用session.getCurrentSession(),比如当一个线程创建了一个session,而且还没有关闭,那么其他线程要使用session时,就会使用该线程的session,而不会再单独创建。另外这样获取的session在使用完之后会自动关闭,开发者不用担心。另外,此版的SSH必须注解配置和XML配值都采用org.springframework.orm.hibernate4.LocalSessionFactoryBean类,不做区分。最后最重要的一点是,此版本的SSH中必须做事务管理,否则回报:org.hibernate.HibernateException: No Session found for current thread。异常。具体事务管理我会在其他的博文中详细介绍。

    

0 0
原创粉丝点击