SSH框架整合-慕课课程

SSH框架整合-慕课课程

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

文章目录

  • SSH框架整合-慕课课程
    • 一、开发环境搭建
      • 1. jar 包导入
      • 2. 引入相关配置文件
        • 3. 创建包结构和实体
    • 二、Struts2整合Spring
      • 1. 页面创建
      • 2. 编写Action,Service,Dao的类
      • 3. 配置Action,Service,Dao的类
    • 三、Sprinng整合 Hibernate
      • 1. 创建数据库
      • 2. 创建映射文件 以及Spring中的配置
      • 3. 编写DAO的代码
      • 4. 添加事务管理
      • 5.问题

一、开发环境搭建

1. jar 包导入

2. 引入相关配置文件

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

    
    	  <filter>
    	  	<filter-name>strutsfilter-name>
    	  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
    	  filter>
    	  <filter-mapping>
    	  	<filter-name>strutsfilter-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

    
      <listener>
      		<listener-class> org.springframework.web.context.ContextLoaderListenerlistener-class>
      listener>
      <context-param>
    	  	<param-name>contextConfigLocationparam-name>
    	  	<param-value>classpath:applicationContext.xmlparam-value>
      context-param>
    
  • applicationContext.xml

3. 创建包结构和实体

- 包结构:
	- com.ssh.action
	- com.ssh.dao-
	- com.ssh.domain - 实体 product
	- com.ssh.service

二、Struts2整合Spring

1. 页面创建

  • 使用struts2标签 布局页面

	
商品名称:
商品价格:

2. 编写Action,Service,Dao的类

  • com.ssh.action

    ProductAction //商品管理的Action

    public class ProductAction extends ActionSupport implements ModelDriven<Product>{
    	//^extends ActionSupport implements ModelDriven (模型驱动的接口)
    	//模型驱动使用的类
    	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>
    
    
    <bean id="productDao" class="com.epoint.ssh.dao.ProductDao">
    bean>
    
  • Struts2和Spring整合的两种方式

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

      • struts2.xml————>
        • 在applicationContext.xml中配置Service DAO 两个标签(上一步*)
    • (2)actio 类交给Spring创建

      
      <bean id="productAction" class="com.epoint.ssh.action.ProductAction" scope="prototype">  
      		
      		<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"/>
    			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>
    
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    	
    	<property name="dataSource" ref="dataSource">property>
    	
    	<property name="hibernateProperties">
    		<props>
    			<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialectprop>
    			<prop key="hibernate.show_sql">trueprop>
    			<prop key="hibernate.format_sql">trueprop>
    			<prop key="hibernate.hbm2ddl.auto">updateprop>	
    		props>
    	property>
    	
    	<property name="mappingResources">
    		<list>
    			<value>com/epoint/ssh/domain/Product.hbm.xmlvalue>
    		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.对于 中的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

你可能感兴趣的:(SSH框架整合-慕课课程)