J2EE SSH框架整合教程
本文仅作为学习和研究的参考,与实际项目使用技术有所不同,由于作者水平有限,错误疏漏在所难免,请各位看官批评指教。
项目的源代码放在:https://github.com/Frank-Pei/SSHIntegrationDemo
使用软件环境概述:JDK1.7.0_79, Eclipse Mars4.5, Oracle11gR2版本11.2.0.3, Tomcat7.0.65, Maven2
SSH框架其实是指Spring, Struts, Hibernate, SSH框架的整合其实是Spring+Struts的整合以及Spring+Hibernate的整合。
整合步骤如下:
(1) 添加三个框架的jar文件,并创建相关的配置文件。
(2) 为Hibernate添加数据源。
(3) 配置SessionFactory对象
(4) 实现并配置Dao和Service.
(5) 使用Spring简化数据库事务处理,即配置声明式事务管理。
(6) 实现并配置Action。
其中(2)-(5)属于Spring整合Hibernate,步骤(6)属于Spring整合Struts2。
(一)工程环境的搭建
1. 从创建Maven工程开始,archetype选择webapp
2. Group Id & Artifact Id
3. 创建完成后打开工程属性,修改Build Path里面的JRE(默认的Maven工程会使用JRE1.5)
4. 点击Remove后,Add Library选择默认的jre7
5. 创建完成的maven工程会报错,原因是没有将tomcat添加到Build path下,如图所示操作即可。
6. 至此基础工作已经完成。开始添加工程需要的jar文件。
(二)Spring2与Hibernate3的整合
1. 在web容器中配置数据源,数据源中用到了连接池技术(Connection Pool),常用的连接池技术有c3p0, dbcp, proxool, 这里我们使用c3p0
首先,需要c3p0的jar包,可以参考本文最后的pom.xml文件;并且需要将oracle数据库jar文件放在tomcat安装目录下的lib/子目录下。
其次,配置一共要修改三个文件,分别是Tomcat安装目录下的context.xml, web.xml,spring配置文件。代码如下:
context.xml中的配置,
<Resource name="jdbc/ORCL" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@192.168.0.10:1521:ORCL"
username="frank" password="frank" maxActive="20" maxIdle="10"
maxWait="-1"/>
web.xml中的配置,
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/ORCL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
spring配置文件中的配置,
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/ORCL"></property>
</bean>
2. 配置SessionFactory,必须要添加spring-orm和aspectjweaver jar包
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- dataSource用于制定数据源,ref引用上面定义的ID为dataSource的Bean -->
<property name="dataSource" ref="dataSource" />
<!-- 指定seesionFactory查找配置文件的位置 另一种做法如下,如要制定多个配置文件必须手动添加 <property name="mappingResources">
<list> <value>com/example/domain/Student.hbm.xml</value> </list> </property> -->
<property name="mappingLocations">
<list>
<value>classpath:**/*.hbm.xml</value>
</list>
</property>
<!-- 配置方言等属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
3. 配置Dao和Service,为做简化只配置了Dao层,没有写Service层
在Spring中配置Dao如下:
<bean id="studentDao" class="com.example.dao.StudentDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/> </bean>
4. 配置声明式事务(Declarative Transaction),基于Spring的AOP特性
<!-- 事务管理器,Spring为Hibernate提供了事务管理类HibernateTransactionManager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务的AOP切入点 -->
<aop:config>
<aop:pointcut id="productServiceMethods" expression="execution(* com.example.dao.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="productServiceMethods" />
</aop:config>
<!-- 配置事务属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
至此,Spring与Hibernate的整合完成。
(三)Spring2与Struts2的整合
除了spring-context, struts-core jar包外,还需要struts-spring-plugin包
1. 在web.xml中配置监听器并提供spring配置文件的位置参数
<!-- ContextLoaderListener可以在tomcat启动时初始化Spring容器,从而完成Spring的加载 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- contextConfigLocation 提供了读取Spring配置文件的路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
2. 将Action配置在Spring容器中
Spring中对Action的配置如下:
<bean id="studentAction" class="com.example.web.action.StudentAction">
<property name="studentDao" ref="studentDao"></property>
</bean>
struts.xml中Action的配置如下:
<!-- Action对应的class要写成配置在Spring中的 -->
<action name="add" class="studentAction" method="add">
<result>/hello.jsp</result>
</action>
至此,SSH框架的整合过程全部完成。
J2EE SSH框架整合教程的更多相关文章
- dwr与ssh框架整合教程
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJ ...
- J2EE进阶(十)SSH框架整合常见问题汇总(一)
SSH框架整合常见问题汇总(一) 前言 以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决. HTTP Status 404 - No result defined for actio ...
- SSH框架整合
SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...
- ssh框架整合之登录以及增删改查
1.首先阐述一下我用得开发工具,myeclipse2017+oracle,所以我的基本配置步骤可能不一样,下面我用几张图来详解我的开发步骤. ---1先配置structs (Target 选择apac ...
- Spring+Hibernate+Struts(SSH)框架整合
SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成流行框架,需要成本.比如金融IT这一块,数据库dao层还 ...
- MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法
MVC+Spring.NET+NHibernate .NET SSH框架整合 在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MV ...
- SSH框架整合的其它方式
--------------------siwuxie095 SSH 框架整合的其它方式 1.主要是整合 Spring 框架和 Hibernate 框架时,可以不写 Hibernate 核心配置文件: ...
- SSH框架整合过程总结
---------------------siwuxie095 SSH 框架整合过程总结 (一)导入相关 jar 包(共 ...
- SSH框架整合思想
--------------------siwuxie095 SSH 框架整合思想 1.SSH 框架,即 Struts2 ...
随机推荐
- Android Shader 颜色、图像渲染 paint.setXfermode
Shader Shader是一个基类,表示在绘制期间颜色的水平跨度 它的子类被嵌入在Paint中使用,调用paint.setShader(shader). 除Bitmap外的其他对象,使用该Paint ...
- 如何在 Linux 下大量屏蔽恶意 IP 地址
很多情况下,你可能需要在Linux下屏蔽IP地址.比如,作为一个终端用户,你可能想要免受间谍软件或者IP追踪的困扰.或者当你在运行P2P软件时.你可能想要过滤反P2P活动的网络链接.如果你是一名系统管 ...
- 02-1设置第一启动项--电脑怎么进入BIOS的方法集合
电脑怎么进入BIOS的方法集合 很多时候为了对电脑进行相关设置,我们必须进入电脑的bios界面,但是不同的电脑进入bios的方法各不相同,小编今天就在这儿将各种电脑进入bios的方法汇总一下,希望对你 ...
- GDBus
1. https://en.wikipedia.org/wiki/D-Bus In computing, D-Bus (for "Desktop Bus"[4]), a softw ...
- 方法return外部链接
return new ModelAndView(new RedirectView(url));
- Atitit.业务系统的新特性 开发平台 新特性的来源总结
Atitit.业务系统的新特性 开发平台 新特性的来源总结 1.1. 语言新特性(java c# php js python lisp c++ oc swift ruby go dart1 1.2. ...
- [译]GLUT教程 - 位图和正交投影视图
Lighthouse3d.com >> GLUT Tutorial >> Fonts >> Bitmap Fonts and Orthogonal Projecti ...
- Hadoop2.6.0版本MapReudce示例之WordCount(一)
一.准备测试数据 1.在本地Linux系统/var/lib/Hadoop-hdfs/file/路径下准备两个文件file1.txt和file2.txt,文件列表及各自内容如下图所示: 2.在hdfs中 ...
- 详解path和classpath的区别
详解path和classpath的区别 path的作用 path是系统用来指定可执行文件的完整路径,即使不在path中设置JDK的路径也可执行JAVA文件,但必须把完整的路径写出来,如C:\Progr ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的大屏分布式拼接显示系统
其实在接触从12年接触8127系列ipnc 时看到200w和500w的高清像素,我就萌生了视频拼接的兴趣,没想到今年的安博会就有公司推出产品了,它就是上海的环视科技,从他的主页可以看到,明显的有个只能 ...