ssh的整合笔记整理

大城市里の小女人 提交于 2019-12-02 06:12:25

搭建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对象的创建方式)。

  1. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!