目录
1. SSH
1.1 Struts2
1.2 spring
1.3 hibernate
2 整合
2.1 引入jar文件
2.1.1 Struts2的jar
2.1.2 hibernate5的jar
2.1.3 spring的jar
2.2 引入配置文件
2.2.1 Struts2的配置文件
2.2.2 hibernate的配置文件
2.2.3 spring配置文件
3 struts2与spring整合
3.1 方式一:action由Struts2创建
3.1.1 创建action类
3.1.2 在Struts.xml中配置action
3.1.3 在action中调用service的方法
3.2 方式二:action由spring创建
3.2.1 引入插件包
3.2.2 spring管理action
3.2.3 在Struts.xml中配置action
4. 编写Dao层
4.1 类的编写
4.1.1 接口
4.1.2 实现类
4.2 配置文件的引入
4.2.1 实体与表的映射关系配置
4.2.2 引入hibernate核心配置文件
5. spring整合hibernate
5.1 在spring配置文件中,引入hibernate配置
5.2 让Dao层类继承HibernateDaoSupport
5.2.1 dao层配置
5.2.2 dao层操作
6. spring事务管理
6.1 事务配置
6.2 在service类上加事务注解
SSH就是Struts2、Spring、hibernate的简称,是曾经比较流行的企业级web开发框架,现在仍然占有很大的比重。
是一个we层的开发框架
是EE开发的一站式解决方案开放框架,可以说其是业务层框架
是持久层的开发框架
antlr-2.7.7.jar
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
c3p0-0.9.2.1.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
dom4j-1.6.1.jar
freemarker-2.3.22.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-c3p0-5.0.7.Final.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.0.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.3.0.Final.jar
log4j-1.2.16.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
mchange-commons-java-0.2.3.4.jar
mysql-connector-java-5.1.7-bin.jar
ognl-3.0.6.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.7.2.jar
spring-aop-4.2.4.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
spring-jdbc-4.2.4.RELEASE.jar
spring-orm-4.2.4.RELEASE.jar
spring-test-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
spring-web-4.2.4.RELEASE.jar
struts2-core-2.3.24.jar
struts2-spring-plugin-2.3.24.jar
xwork-core-2.3.24.jar
ssh协议详解?在Struts2的解压包中有一个apps的目录,里面有一个struts2-blank.war的工程,将其放到Tomcat下,运行Tomcat,可以解压该工程(或者直接解压提取出来),然后将该工程下的WEB-INF下的lib下的所有的jar引入即可。
Struts2开发基本包
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.5.jar
struts2-core-2.3.4.1.jar
xwork-core-2.3.4.1.jar
注意:javassist-3.11.0.GA.jar在hibernate中也有一个,二者需要删除一个
Struts2其他比较重要的包
1. Struts2的注解开发包:struts2-convention-plugin-2.3.24.jar
ssh public key?2. Struts2整合ajax的开发包:struts2-json-plugin-2.3.24.jar
3. Struts2整合spring的开发包:struts2-spring-plugin-2.3.24.jar
hibernate开发必须jar
打开hibernate解压文件,在lib下有一个required的目录,其下的jar就是必须包
antlr-2.7.7.jar
dom4j-1.6.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.0.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.3.0.Final.jar
sshd config。mysql驱动
mysql-connector-java-5.1.7-bin.jar
日志记录jar
日志记录的jar,在Struts2中已经存在了,这里引入,struts2就不用引入了,如果Struts2没有引入,这里就需要引入了,但是我们这里需要引入一个日志的接口包slf4j-api-1.6.1.jar和log4j整合的包slf4j-log4j12-1.7.2.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.7.2.jar
log4j-1.2.16.jar
ssh connection closed by。注意:Struts2和hibernate中都引入了javassist,如果两者版本不一致会产生冲突,我们需要删除一个,我们将版本低的删除掉
c3p0连接池
c3p0-0.9.2.1.jar
hibernate整合c3p0jar
hibernate-c3p0-5.0.7.Final.jar
hibernate-commons-annotations-5.0.1.Final.jar
ssh client,IOC开发
com.springsource.org.apache.commons.logging-1.1.1.jar
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
注意:因为前面已经引入了log4j的jar,所以这里不需要引入spring提供的com.springsource.org.apache.log4j-1.2.15.jar了
AOP开发
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aop-4.2.4.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar
ssh协议?JDBC模板开发
spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
事务管理
spring-tx-4.2.4.RELEASE.jar
整合WEB项目的开发
ssh connection closed。spring-web-4.2.4.RELEASE.jar
整合单元测试
spring-test-4.2.4.RELEASE.jar
整合hibernate的开发
spring-orm-4.2.4.RELEASE.jar
ssh_config和sshd_config。web.xml
<!-- Struts2的核心过滤器 -->
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
核心配置文件struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><!-- 配置Struts2的常量 --><constant name="struts.action.extension" value="action"/></struts>
核心配置hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!-- 连接数据库的基本参数 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///ssh1</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">abc</property><!-- 配置Hibernate的方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可选配置================ --><!-- 打印SQL --><property name="hibernate.show_sql">true</property><!-- 格式化SQL --><property name="hibernate.format_sql">true</property><!-- 自动创建表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 配置C3P0连接池 --><property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><!--在连接池中可用的数据库连接的最少数目 --><property name="c3p0.min_size">5</property><!--在连接池中所有数据库连接的最大数目 --><property name="c3p0.max_size">20</property><!--设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 --><property name="c3p0.timeout">120</property><!--每3000秒检查所有连接池中的空闲连接 以秒为单位--><property name="c3p0.idle_test_period">3000</property><!-- 引入映射 --><mapping resource=""/></session-factory>
</hibernate-configuration>
映射文件
<?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.itheima.ssh.domain.Customer" table="cst_customer"><!-- 建立类中的属性与表中的主键对应 --><id name="cust_id" column="cust_id" ><!-- 主键生成策略 --><generator class="native"/></id><!-- 建立类中的普通的属性和表的字段的对应 --><property name="cust_name" column="cust_name" /><property name="cust_source" column="cust_source" /><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class>
</hibernate-mapping>
日志文件
SSH协议、注意:spring也会引入日志文件,这里不用引入。
web.xml
在这里配置spring的核心监听器,让项目启动的时候加载spring配置,创建工厂,将工厂放到ServletContext中
<!-- 配置Spring的核心监听器 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载spring的配置文件的路径,默认加载WEB-INF/applicationContext.xml -->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value>
</context-param>
核心配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"></beans>
日志文件log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###
# error warn info debug trace
log4j.rootLogger= info, stdout
public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{// 模型驱动使用的对象Customer customer = new Customer();public Customer getModel() {return customer;}/**保存客户* @return*/public String save(){System.out.println("save...");return NONE;}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><!-- 配置Struts2的常量 --><constant name="struts.action.extension" value="action"/><!-- 配置Action --><package name="ssh" extends="struts-default"><action name="customer_*" class="com.itcast.ssh.web.action.CustomerAction" method="{1}"></action></package>
</struts>
基于ssh协议的命令,web层获取业务层的通用写法
/**保存客户* @return*/
public String save(){System.out.println("action save...");WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());CustomerService customerService = (CustomerService) webApplicationContext.getBean("customerService");customerService.save();return NONE;
}
使用Struts2的方式获取业务层的方法(Struts2与spring整合)
这里需要使用struts2-spring-plugin-2.3.24.jar插件包
1. 在action中注入service
private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {this.customerService = customerService;
}
2. 在action中调用service
/**保存客户* @return*/
public String save(){System.out.println("action save...");customerService.save();return NONE;
}
ssh项目, 注意:
关于struts2-spring-plugin-2.3.24.jar
在其中有一个常量配置
<constant name="struts.objectFactory" value="spring" />
在Struts2的核心包下,有一个default.properties,其中有该常量的配置
# struts.objectFactory = spring
但是,该常量是注释了的。所以插件为什么可以引入service,是因为它打开了该常量配置,因为只有这个常量开启了,下面的配置才会生效,Action才会按照名称自动注入service
struts.objectFactory.spring.autoWire = name
struts2-spring-plugin-2.3.24.jar
<bean id="customerAction" class="com.itcast.ssh.web.action.CustomerAction" scope="prototype"><property name="customerService" ref="customerService"></property>
</bean>
注意:一定要配置scope="prototype",因为Struts2是多例的。
将class的属性值改成spring配置的action的id的属性值
<!-- 配置Action -->
<package name="ssh" extends="struts-default"><action name="customer_*" class="customerAction" method="{1}"></action>
</package>
public interface CustomerDao {void save();
}
public class CustomerServiceImpl implements CustomerService {private CustomerDao customerDao;public void setCustomerDao(CustomerDao customerDao) {this.customerDao = customerDao;}public void save() {System.out.println("service save...");customerDao.save();}
}
customer.hbm.xml
<?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.itcast.ssh.domain.Customer" table="cst_customer"><!-- 建立类中的属性与表中的主键对应 --><id name="cust_id" column="cust_id" ><!-- 主键生成策略 --><generator class="native"/></id><!-- 建立类中的普通的属性和表的字段的对应 --><property name="cust_name" column="cust_name" /><property name="cust_source" column="cust_source" /><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class>
</hibernate-mapping>
注意:配置文件和实体类在同一个目录下
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!-- 连接数据库的基本参数 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///spring4_day03</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><!-- 配置Hibernate的方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可选配置================ --><!-- 打印SQL --><property name="hibernate.show_sql">true</property><!-- 格式化SQL --><property name="hibernate.format_sql">true</property><!-- 自动创建表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 配置C3P0连接池 --><property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><!--在连接池中可用的数据库连接的最少数目 --><property name="c3p0.min_size">5</property><!--在连接池中所有数据库连接的最大数目 --><property name="c3p0.max_size">20</property><!--设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 --><property name="c3p0.timeout">120</property><!--每3000秒检查所有连接池中的空闲连接 以秒为单位--><property name="c3p0.idle_test_period">3000</property><!-- 引入映射 --><mapping resource="com/itcast/ssh/domain/Customer.hbm.xml"/></session-factory>
</hibernate-configuration>
<!-- spring 整合hibernate -->
<!-- 引入hibernate配置信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 引入hibernate配置文件 --><property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
继承的目的是为了简化开发,因为HibernateDaoSupport类中有一个setSessionFactory方法,当模板为空的时候,就根据sessionFactory创建一个模板对象,所以,我们只需要在dao中注入一个sessionFactory就可以得到模板了。
<bean id="customerDao" class="com.itcast.ssh.dao.impl.CustomerDaoImpl"><property name="sessionFactory" ref="sessionFactory"></property>
</bean>
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {public void save(Customer customer) {System.out.println("dao save ... ");this.getHibernateTemplate().save(customer);}
}
<!-- 配置事务 -->
<!-- 事务管理器配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><!-- 事务管理器需要获得连接,获得连接就需要sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置事务注解扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
@Transactional
public class CustomerServiceImpl implements CustomerService
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态