ssh协议详解,SSH整合方式1——无障碍整合

 2023-09-23 阅读 333 评论 0

摘要:目录 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 方式一

目录

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类上加事务注解


1. SSH

SSH就是Struts2、Spring、hibernate的简称,是曾经比较流行的企业级web开发框架,现在仍然占有很大的比重。

1.1 Struts2

是一个we层的开发框架

1.2 spring

是EE开发的一站式解决方案开放框架,可以说其是业务层框架

1.3 hibernate

是持久层的开发框架

2 整合

2.1 引入jar文件

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

2.1.1 Struts2的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

2.1.2 hibernate5的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

2.1.3 spring的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

2.2 引入配置文件

2.2.1 Struts2的配置文件

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>

2.2.2 hibernate的配置文件

核心配置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也会引入日志文件,这里不用引入。

2.2.3 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

3 struts2与spring整合

3.1 方式一:action由Struts2创建

3.1.1 创建action类

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;}
}

3.1.2 在Struts.xml中配置action

<?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>

3.1.3 在action中调用service的方法

基于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

3.2 方式二:action由spring创建

3.2.1 引入插件包

struts2-spring-plugin-2.3.24.jar

3.2.2 spring管理action

<bean id="customerAction" class="com.itcast.ssh.web.action.CustomerAction" scope="prototype"><property name="customerService" ref="customerService"></property>
</bean>

注意:一定要配置scope="prototype",因为Struts2是多例的。 

3.2.3 在Struts.xml中配置action

将class的属性值改成spring配置的action的id的属性值

<!-- 配置Action -->
<package name="ssh" extends="struts-default"><action name="customer_*" class="customerAction" method="{1}"></action>
</package>

4. 编写Dao层

4.1 类的编写

4.1.1 接口

public interface CustomerDao {void save();
}

4.1.2 实现类

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();}
}

4.2 配置文件的引入

4.2.1 实体与表的映射关系配置

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>

注意:配置文件和实体类在同一个目录下

4.2.2 引入hibernate核心配置文件

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>

5. spring整合hibernate

5.1 在spring配置文件中,引入hibernate配置

<!-- spring 整合hibernate -->
<!-- 引入hibernate配置信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 引入hibernate配置文件 --><property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>

5.2 让Dao层类继承HibernateDaoSupport

继承的目的是为了简化开发,因为HibernateDaoSupport类中有一个setSessionFactory方法,当模板为空的时候,就根据sessionFactory创建一个模板对象,所以,我们只需要在dao中注入一个sessionFactory就可以得到模板了。

5.2.1 dao层配置

<bean id="customerDao" class="com.itcast.ssh.dao.impl.CustomerDaoImpl"><property name="sessionFactory" ref="sessionFactory"></property>
</bean>

5.2.2 dao层操作

public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {public void save(Customer customer) {System.out.println("dao  save  ... ");this.getHibernateTemplate().save(customer);}
}

6. spring事务管理

6.1 事务配置

<!-- 配置事务 -->
<!-- 事务管理器配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><!-- 事务管理器需要获得连接,获得连接就需要sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置事务注解扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

6.2 在service类上加事务注解

@Transactional
public class CustomerServiceImpl implements CustomerService

 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/93751.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息