SSH框架整合-慕课课程

SSH框架整合-慕课课程

学习时间:2018年12月3日
慕课链接:基于SSH实现员工管理系统之框架整合篇
内容:Struts2+Hibernate+Spring框架整合,分为Struts2整合Spring和Spring整合Hibernate两步进行
源码:Github:SSH_Base

一、开发环境搭建

1. jar 包导入

2. 引入相关配置文件

  • web.xml–>Struts2 过滤器配置

    <!-- Struts2 过滤器的配置-->
    	  <filter>
    	  	<filter-name>struts</filter-name>
    	  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    	  </filter>
    	  <filter-mapping>
    	  	<filter-name>struts</filter-name>
    	  	<url-pattern>/*</url-pattern>
     </filter-mapping>	
    
  • struts2.xml -->src
    >struts-2.3.36-all.zip\struts-2.3.36\apps\struts2-blank-2.3.36.war\WEB-INF\classes\struts2.xml

  • web.xml -->Spring 核心监听器
    > ContextLoaderListener–> ContextLoader --> 105:contextConfigLocation

    <!-- Spring 核心监听器 -->
      <listener>
      		<listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <context-param>
    	  	<param-name>contextConfigLocation</param-name>
    	  	<param-value>classpath:applicationContext.xml</param-value>
      </context-param>
    
  • applicationContext.xml

3. 创建包结构和实体
- 包结构:
	- com.ssh.action
	- com.ssh.dao-
	- com.ssh.domain - 实体 product
	- com.ssh.service

二、Struts2整合Spring

1. 页面创建

  • 使用struts2标签 布局页面
<s:form action="" method="post" namespace="/" theme="simple">
	<table border="1" width="400">
		<tr>
			<td>商品名称:</td>
			<td><s:textfield name="pname"/></td>
		</tr>
		<tr>
			<td>商品价格:</td>
			<td><s:textfield name="price"/></td>
		</tr>
		<tr>
			<td colspan="2"><input type="submit" value="添加" /></td>
		</tr>
	</table>
</s:form>

2. 编写Action,Service,Dao的类

  • com.ssh.action

    ProductAction //商品管理的Action

    public class ProductAction extends ActionSupport implements ModelDriven<Product>{
    	//^extends ActionSupport implements ModelDriven<Product> (模型驱动的接口)
    	//模型驱动使用的类
    	private Product product = new Product();
    	@Override
    	public Product getModel() {
    		// TODO Auto-generated method stub
    		return product;
    	}
    	/*注入Service  struts2-spring-plugin-2.3.36.jar > struts-plugin.xml > struts.objectFactory
    			>struts.objectFactory.spring.autoWire = name 自动装配*/	
    	/*Struts 和Spring 整合过程中按名字自动注入业务层的类*/
    	private ProductService productService;
    
    	public void setProductService(ProductService productService) {
    		this.productService = productService;
    	}
    }
    
  • com.ssh.dao

    ProductDao //商品管理的DAO

  • com.ssh.domain

    实体 product

  • com.ssh.service

    ProductService //商品管理的业务层

    //业务层 注入Dao的类
    private ProductDao productDao;
    
    public void setProductDao(ProductDao productDao) {
    	this.productDao = productDao;
    }	
    

3. 配置Action,Service,Dao的类

  • aplicationContext.xml 配置业务层的类 *

    <!-- 配置业务层的类 -->
    <bean id="productService" class="com.epoint.ssh.service.ProductService">
    	<property name="productDao" ref="productDao"/>
    </bean>
    
    <!-- 配置DAO的类 -->
    <bean id="productDao" class="com.epoint.ssh.dao.ProductDao">
    </bean>
    
  • Struts2和Spring整合的两种方式

    • (1) Action 类由Struts2 自身创建

      • struts2.xml————><s:form action="product_save" method="post" namespace="/" theme="simple">
        • 在applicationContext.xml中配置Service DAO 两个标签(上一步*)
    • (2)actio 类交给Spring创建

      <!--配置action类  -->
      <bean id="productAction" class="com.epoint.ssh.action.ProductAction" scope="prototype">  
      		<!--手动注入service  -->
      		<property name="productService" ref="productService"></property>
      </bean>
      <package name="ssh" extends="struts-default" namespace="/">
      	<action name="product_*" class="productAction" method="{1}" >
      	</action>
      </package>
      
  • Action中执行的方法

三、Sprinng整合 Hibernate

1. 创建数据库

  • create database myssh

2. 创建映射文件 以及Spring中的配置

  • /ssh/src/com/epoint/ssh/domain/Product.hbm.xml
    –> /org/hibernate/hibernate-mapping-3.0.dtd

    <hibernate-mapping>
    		<class name="com.epoint.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>
    
  • applicationContext.xml

    <!-- 引入外部配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/> 
    <!-- 配置连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    	<property name="driverClass" value="com.mysql.jdbc.Driver"/>
    	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/myssh?useSSL=false"/>
    	<property name="user" value="root"/>
    	<property name="password" value="Gepoint"/>
    </bean>
    <!-- 配置Hibernate -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    	<!--注入连接池  -->
    	<property name="dataSource" ref="dataSource"></property>
    	<!--配置Hibernate属性  -->
    	<property name="hibernateProperties">
    		<props>
    			<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><!--方言  -->
    			<prop key="hibernate.show_sql">true</prop>
    			<prop key="hibernate.format_sql">true</prop>
    			<prop key="hibernate.hbm2ddl.auto">update</prop>	
    		</props>
    	</property>
    	<!--加载Hibernate配置文件  -->
    	<property name="mappingResources">
    		<list>
    			<value>com/epoint/ssh/domain/Product.hbm.xml</value>
    		</list>
    	</property>
    </bean>
    

3. 编写DAO的代码

  • 注入SessionFactory:

    • 在 Dao 上extends HibernateDaoSupport
    • 配置applicationContext中的Dao
    <bean id="productDao" class="com.epoint.ssh.dao.ProductDao">
    	<property name="sessionFactory" ref="sessionFactory"></property>
    </bean>		
    
  • 在Dao中调用模板完成保存操作
    this.getHibernateTemplate().save(product)

4. 添加事务管理

<!-- 配置事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>	

5.问题

  • 错误1: Causedby:java.lang.ClassNotFoundException:com.mchange.v2.c3p0.ComboPooledDataSource

    解决:
    1.导入c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar(有的导入就解决,有的还会报错,报错的看第二步)
    2.对于 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><bean> 中的class不能直接复制粘贴,要通过“提示”敲出来,如果直接复制或者不按提示敲出来可能还会继续报同样的错误

  • 错误2:Loading class 'com.mysql.jdbc.Driver'. This is deprecated.

    解决:
    com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver

  • 错误3:MYSQL:WARN: Establishing SSL connection without server's identity verification is not recommended.

    解决:
    jdbc:mysql://localhost:3306/test?useSSL=false

  • 错误4: java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)

    解决:
    参考:java.sql.SQLException

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值