搭建ssh开发环境
Struts2整合spring
spring整合hibernate
整合好之后自己尝试进行一个员工管理系统的案例实践
ssh框架知识点
web层-------业务层-------持久层--(交互)--DB(数据库)
Struts2 spring hibernate
通常web层区调用业务层,业务层调用持久层
在web层怎么获取到service,需要在自己编写一个actiion
Public class BookAction extends Action Support implements MoselDriven<Book>{
//在action里肯定有个执行的方法
//完成图书的保存,需要手动new一个对象
//提供一个get的方法
private Book book = new Book();
Public Book getModel(){
return book;//返回对象
}
Public String saave (){
//需要获得去业务层的类,然后调用业务层的一个save方法,在action里怎么去获取到业务层呢
//学习过spring整合web项目,在整合中有个WebApplicationContext类,怎么获取这个对象呢,通过 WebApplicationContextUtils.getWebApplicationContext();
WebApplicationContext web = WebApplicationContextUtils.getWebApplicationContext(...);
BookService service = web.getBean("bookService");
//通过service调用save方法
service.save(book);
}}
步骤一:需要导入的一些基本包
Struts2的jar包
基本开发在apps里面有Struts2-blank.war打开它,在web-INF\lib里面所有的jar包
Struts2-convention-plugin-2.3.15.3.jar------------Struts2 的注解开发的jar包(不用注解开发不用导进去)
Struts2-spring-plugin-2.3.15.3.jar----------------------struts2用于整合spring的jar包
Hibernate的jar包
Lib里面required里面所有的jar包
Lib里面jpa里面所有的jar包
日志记录:
Slf4j整合log4 j的jar包
数据库驱动包
spring的jar包
1.Spring的IOC开发的包
Spring的基本的开发的包
Spring-beans-3.2.0.RELEASE.jar
Spring-context-3.2.0.RELEASE.jar
Spring -core-3.2.0.RELEASE.jar
Spring-expression-3.2.0.RELEASE.jar
spring日志记录的包
com.springsource.org.apache.log4j-1.2.15.jar
进行日志整合的包
com.qpringsource.org.apache..commons.logging-1.1.1.jar
2.Spring的aop开发的包
Spring-aop-*-RELEASE.jar
Spring-aspects*-.RELEASE.jar
com.springsource.org.aopalliance.*.jar
com.springsource.org.aspectj.weaver-*.RELEASE.jar
3.事务管理的包
spring-tx-*.RELEASE.jar
spring-jdbc-*.RELEASE.jar
整合hibernate的包
spring-orm-*.RELEASE.jar
整合web项目的包
spring-web-*.RELEASE.jar
整合单元测试
Spring-test-*.RELEASE.jar
连接池
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
(查询class文件的快捷键:Ctrl+shift+t
查询已有文件资源的快捷键:Ctrl+shift+r)
步骤二:引入相应的配置文件
1.struts2框架配置文件
web.xml(配置struts核心过滤器)
<!--struts2de 框架的核心过滤器的配置-->
<filter>
<filter-name>struts(你的定的名字,需要跟filtermapping的filter的名字一样)</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter(StrutsPrepareAndExecuteFilter的全路径)</filter-class>
</filter>
<filter-mapping>
<filter-name>struts<filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts.xml(如果使用纯注解开发,也可以省略)(在解压blank压缩包里面有)(放在src目录引入struts.xml)
2、Hibernate配置文件
hibernate.cfg.xml(在SSH整合中该配置文件可以省略)
映射文件(创建实体的时候之后再来创建映射文件)
3、Spring框架的配置文件
web.xml(配置struts2核心过滤器,由于服务器启动首先要加载spring核心配置文件(applicationContext.xml),因此首先要配置spring核心监听器(ContextLoaderListener),(全局初始化参数),如果不配置这个,默认加载WEB-INF下的ApplicationContext.XML,配置了就会加载classes下的ApplicationContext.xml),spring配置文件需要配置上下文参数<context-param> name value)
<!-- Spring框架核心监听器 -->
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener(ContextLoaderListener的全路径)</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml </param-value> </context-param>
(配好之后struts.xml报错,删掉struts.xml里面内容删掉即可)
applicationContext.xml
再引入一个log4j.properties的配置文件即可引入完毕
步骤三:创建包结构
如action包(放action类的内容)、dao包(dao类)、service包、实体类包
Struts2整合spring框架
步骤四:创建页面(如保存商品的页面)
如Jsp页面代码
JSP 页面,<s:form> 表单后Thame="simple"属性是为了不是用Struts默认的样式
<body>
<s:form action="product_save" method="post" namespace="/" theme="simple">
<table width="400" border="1">
<tr>
<td>商品名称</td>
<td><s:textfield name="pname" ></s:textfield></td>
</tr>
<tr>
<td>商品价格</td>
<td><s:textfield name="price" ></s:textfield></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</body>
步骤五:编写action、service和dao的类
在相应的包下创建类
(1)service需要注入dao,提供相应的set的方法;在spring中,只需要有set方法,即可完成注入操作
(2)action需要注入service两种方法
a. WebApplicationContextwap = ........
b. 引入 struts2-spring-plugin.jar后 可直接用 定义 private ProductService productservice 按名称来自动注入
(3)Action需继承ActionSupport并连接模型驱动接口,编写模型驱动;
//商品实体类
public class Product {
private Integer pid;
private String pname;
private Double price;
//省略getter和setter方法
}
//商品管理dao类
public class ProductDAO {
}
//商品Service类
public class ProductService {
//业务层注入dao类
private ProductDAO productDAO;
public void setProductDAO(ProductDAO productDAO) {
this.productDAO = productDAO;
}
}
//商品管理action类
public class ProductAction extends ActionSupport implements ModelDriven<Product>{
//模型驱动所需类
private Product product=new Product();
public Product getModel() {
return product;
}
//Struts和spring整合过程中按照名称注入业务层所需类
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
}
步骤六:配置Action、Service、Dao的类——Struts2整合Spring
重点注意:Struts-Spring-plugin.jar:在不使用ApplicationContext情况下对Action里的productService进行赋值,要保证set方法后的名称和<bean>标签里的id名相同才会按名称自动注入。
【a】Service和Dao可以交给Spring进行管理(配置bean标签)。
copy Qualified Name:复制类的全路径。
<!--配置业务层的类-->
<bean id="productService" class="com.service.ProductService">
<property name="productDao" ref="productDao"></property>
</bean>
<!--配置dao的类-->
<bean id="productDao" class="com.dao.ProductDao"></bean>
</beans>
【b】Struts2和Spring整合的两种方式:(针对Action对象的创建方式)。
- Action的类由Struts2去创建。
Action的配置:Struts.xml配置
(struts.xml中的action中的name与jsp中的name相对应,product_*对应了product中的一个product_save)
<package name="ssh" namespace="/" extends="struts-default">
<action name="product_*" class="com.action.ProductAction" method="{1}">
</action>
</package>
Service和dao的配置:applicationContext.xml
<!--配置业务层的类-->
<bean id="productService" class="com.service.ProductService">
<property name="productDao" ref="productDao"></property>
</bean>
<!--配置dao的类-->
<bean id="productDao" class="com.dao.ProductDao"></bean>
</beans>
servce和dao是怎么配置的?直接在applicationContext.xml中进行配置
配置两个bean标签就行了,然后就会applicationContext.xml的name自动注入,就是action的类里面提供了 一个productservice方法自动注入过去
如save方法的执行过程:事件触发后save方法执行过程:
在action中写的save方法 调用 service 中的 save方法 并传入参数 product【service中创建了save方法】。在service中调用 dao中的save方法 ,并传入参数 product。dao中的save方法 ,得到product这个参数,会和数据库打交道,比如,用sql语句向数据库中插入值,(这里用hibernate)
2、Action的类由 Spring去创建
Action、Service和dao的配置:applicationContext.xml
Action类交给Spring创建(建议使用这种方式创建Action,因为可以使用Spring的AOP进行管理)(action创建的实例是多例模式,所以Action类bean标签要使用scope=“prototype”属性,其次struts.xml中的action标签的class属性不再写类的全路径,而是Action<bean>标签的id)
<!--配置action的类-->
<bean id="productAction" class="com.ssh.action.ProductAction" scope="prototype">
<!-- 手动注入service类 -->
<property name="productService" ref="productService">
</property> </bean>
<!--配置业务层的类-->
<bean id="productService" class="com.imooc.service.ProductService">
<property name="productDao" ref="productDao"></property>
</bean>
<!--配置dao的类-->
<bean id="productDao" class="com.imooc.dao.ProductDao"></bean>
</beans>
action的配置:struts.xml
<package name="ssh" namespace="/" extends="struts-default">
<action name="product_*" class="productAction" method="{1}">
</action>
</package>
spring整合hibernate
步骤七:创建数据库
在数据库中输入create datebase ssms;//创建数据库的语句
创建数据库,引入hibernate之后可以根据映射文件自动创建数据库表
步骤八:创建映射文件
在实体包下创建一个xml文件叫做product.hbm.xml
首先引入映射的约束,,这个约束在hibernate的核心包下面的hibernate-mapping-3.0.dtd里面的头部信息就是了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE
hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
<class name="com.ssh.domain.Product" table="product">
<id name="pid" column="pid">
<generator class="native"/><!-- native表示自增 -->
</id>
<property name="pname" column="pname" length="20"/>
<property name="price" column="price"/>
</class>
</hibernate-mapping>
步骤九:spring整合hibernate
在实体包下创建一个xml文件叫做product.hbm.xml
配置c3p0连接池和Hibernate的一些属性
(1)在applicationContext.xml中加入以下内容:
<!-- 启动服务器,自动加载配置文件,将自动创建表 -->
<!-- 引入外部的属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 配置Hibernate的相关属性 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 配置Hibernate的属性 -->
<property name="hibernateProperties">
<props>
<!-- 这里注意我们使用的是Hibernate5,所以要用MySQL5Dialect方言,否则会报错 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.fromat_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 加载Hibernate的映射文件 -->
<property name="mappingResources">
<list>
<!-- 这里注意是/而不是. -->
<value>cn/gdedu/ssh/domain/Product.hbm.xml</value>
</list>
</property>
</bean>
步骤十:编写dao代码
在dao中注入sessionfactory
(1)productDao类继承HibernateDaoSupport类;
(2)在applicationContext.xml中配置Dao时加入:
<!-- 配置DAO的类 -->
<bean id="productDao" class="cn.gdedu.ssh.dao.ProductDao">
<!-- 注入HibernateDaoSupport模板,只需要注入sessionFactory,然后通过getHibernateTemplate方法即可 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
(3)在productDao中调用模板完成保存操作:
//DAO中的保存商品的方法
public void save(Product product) {
//调用sessionFactory中的getHibernateTemplate的方法.
this.getHibernateTemplate().save(product);
System.out.println("DAO中的save方法执行了...");
}
步骤十一:事务管理
(1)在applicationContext.xml中加入以下内容:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启注解事务,在Service类上面写上transational注解,注意导对包即可 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
(2)在ProductService类上加上@Transactional注解
----------------------完成--------------------------------
参考网址:https://blog.csdn.net/qq441568267/article/details/78269794
来源:https://blog.csdn.net/starry1948/article/details/102692010