您的位置:首页 > 编程语言 > Java开发

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

2014-09-26 19:47 411 查看
大部分实验室的项目采用的框架版本太旧了。这次,我尝试着自己搭建一个最简单的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。异常。具体事务管理我会在其他的博文中详细介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: