SSH架构详解

3
Java EE应用的分层模型 EE应用的分层模型
框架(Framework):框架是整个系统或系统的一 框架(Framework):框架是整个系统或系统的一 部分的可重用设计,由一组抽象的类及其实例间 的相互作用方式组成。 基于J2EE四层架构应用模型同传统的C/S模型相 基于J2EE四层架构应用模型同传统的C/S模型相 比,提高了系统的可扩展性、安全性和可重用性。
22
Spring优缺点 Spring优缺点
优点: 1.令人称赞的是IOC、AOP和数据库事务的自动管理,集成对各种 其他框架的良好支持。 2.配置过程中高度动态化,低耦合和低侵入性,在应用中起一个小 型容器(container)的作用。 3.可以管理在容器中的框架、Servlet、bean,管理他们的生命周 期和内存分配,具“一站式架构”的特点。 缺点: 1.配置文件众多、繁杂,对框架的依赖程度过高。
Struts的优点 Struts的优点
优点: 1、提高软件的设计效率,严格基于MVC,是软件结构清晰、易维 护、易扩展,使开发者只关注业务逻辑的实现; 2、Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件, 这是它的一大优点。使开发者能更深入的了解其内部实现机制; 3、Taglib:Taglib是Struts的标记库,灵活动用,能大大提高开发效 率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用 标记外,很少开发自己的标记,或许Struts是一个很好的起点。 4、页面导航:将是今后的一个发展方向,事实上,这样做,使系统 的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之 间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开 发者接手这个项目时,这种优势体现得更加明显。 5、其他的功能:数据校验和软件国际化等。
21
Struts的缺点 Struts的缺点
缺点: 1、Taglib是Struts的一大优势,但对于初学者而言,却需要一个持 续学习的过程,甚至还会打乱你网页编写的习惯; 2、Struts将MVC的Controller一分为三,在获得结构更加清晰的同时, 也增加了系统的复杂度; 3、层面太多,做小应用不适合,远不如jsp+JavaBean的方式简洁 快速;
6
MVC设计模式概述 MVC设计模式概述
SSH(Struts+Spring+Hibernate)架构:作为一 SSH(Struts+Spring+Hibernate)架构:作为一 种轻量级的Java EE平台,也是基于MVC设计模 种轻量级的Java EE平台,也是基于MVC设计模 式的。 Model 1:以JSP为中心,表示逻辑与业务处理 1:以JSP为中心,表示逻辑与业务处理 混合在JSP中。 混合在JSP中。 Model 2:基于MVC(Model-View-Controller) 2:基于MVC(Model-View-Controller) 模式 MVC设计思想:即由模型、视图、控制器三种部 MVC设计思想:即由模型、视图、控制器三种部 件组成。
5
Java EE应用的组件 EE应用的组件
表现层组件:JSP、Velocity和FreeMarker等。 表现层组件:JSP、Velocity和FreeMarker等。 控制器组件:控制器负责拦截用户请求,并将请 求转发给用户实现的控制器组件。 业务逻辑组件:系统的核心组件,实现系统的业 务逻辑。 DAO组件:Data DAO组件:Data Access Object,也被称为数据 Object,也被称为数据 访问对象。 领域对象组件:领域对象(Domain Object)抽 领域对象组件:领域对象(Domain Object)抽 象了系统的对象模型。
24
SSH框架应用与展望 SSH框架应用与展望
4
Java EE应用的分层模型 EE应用的分层模型
J2EE四层架构将应用逻辑与用户界面和数据访问相剥离,这样便使 J2EE四层架构将应用逻辑与用户界面和数据访问相剥离,这样便使 系统的维护变得简单,同时可以通过采用组件技术,降低数据库服 务器的负担,从而提高系统的性能。
图1 J2EE四层架构示意图 J2EE四层架构示意图
23
Hibernate优缺点 Hibernate优缺点
优点: 1、提高开发效率,节省编码时间; 2、Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透 明性; 3、Hibernate 的性能非常好,因为它是个轻量级框架, 映射的灵活 性很出色; 4、提供了很多功能性的特点; 缺点: 1、配置太灵活,使编程人员需要考虑的事项很多; 2、Hibernate做为ORM有一些固有的缺陷,比如批量Insert、 Update和Delete的效率问题; 3.直接从xml文件里面读取数据库联接参数,这样就无法给数据库密 码加密; 4.由于使用了映射文件,处理多态检索复杂;
MVC(Model-View-Controller),即由模型、视图、 MVC(Model-View-Controller),即由模型、视图、 控制器三种部件组成。
图4 MVC部件类型的关系和功能 MVC部件类型的关系和功能
10
struts 2技术概述 2技术概述
Struts是全世界最早的MVC框架,从诞生起,就 Struts是全世界最早的MVC框架,从诞生起,就 备受Java EE应用开发者的青睐。 备受Java EE应用开发者的青睐。 Struts分为: Struts分为: struts1——框架老化,很多设计上的硬伤使得该 struts1——框架老化,很多设计上的硬伤使得该 框架难以胜任更复杂的需求。 struts2——吸收了传统Struts WebWork两者的 struts2——吸收了传统Struts 和WebWork两者的 精华,迅速成为MVC框架中新的主流框架。 精华,迅速成为MVC框架中新的主流框架。
轻量级Java EE应用 轻量级Java EE应用
MVC设计模式下SSH(Struts+Spring+Hibernate)架构 MVC设计模式下SSH(Struts+Spring+Hibernate)架构
小组成员:周盛,范鹏飞,曹瑾怡 班级:计研1101班 班级:计研1101班
1
大纲(outline) 大纲(outline)
● Java EE 技术概述 ● Java EE应用介绍 EE应用介绍 ● Java EE应用的分层模型 EE应用的分层模型 ● Java EE应用的组件 EE应用的组件 ●MVC(Model-View-Controller)设计模式 MVC(Model-View-Controller)设计模式 ● Model 1 模型 ● Model 2 模型 ● MVC设计思想 MVC设计思想 ●SSH(Struts+Spring+Hibernate)架构概述 SSH(Struts+Spring+Hibernate)架构概述 ● Struts 技术概述 ● spring 技术概述 ● Hibernate 技术概述 ● SSH框架(Struts、Spring、Hibernate)的整合 SSH框架(Struts、Spring、Hibernate)的整合 ●基于SSH框架的设计开发实例分析 ●基于SSH框架的设计开发实例分析 ● SSH(Struts+Spring+Hibernate)的优缺点 SSH(Struts+Spring+Hibernate)的优缺点 ●SSH框架的应用与展望 SSH框架的应用与展望
图 6 Spring框架结构图 Spring框架结构图
13
Hibernate是目前最为流行的ORM (对象/关系 Hibernate是目前最为流行的ORM (对象/关系 映射)框架。ORM也称为对象关系映射, 映射)框架。ORM也称为对象关系映射,是面向 对象语言的对象持久化技术。 有了ORM框架,在关系型数据库和Java 有了ORM框架,在关系型数据库和Java 对象之 间进行自动映射,就使得程序员可以非常简单 的方式实现对数据库的操作。
15
SSH框架(Struts、Spring、Hibernate)的整合 SSH框架(Struts、Spring、Hibernate)的整合 根据上面的分析,集成Struts,Spring, 根据上面的分析,集成Struts,Spring, Hibernate 的架构的总体结构如下图所示:
16
图 8 SSH架构总体结构 SSH架构总体结构
11
struts 2技术概述 2技术概述
Struts2.0框架的体系结构在响应客户请求时,各个部分 Struts2.0框架的体系结构在响应客户请求时,各个部分 工作的原理如图所示。
图 5 Struts 2 工作原理
12
Spring 技术概述
Spring 是一个解决了许多J2EE 开发中常见问题并能够 是一个解决了许多J2EE 替代EJB 替代EJB 技术的强大的轻量级框架。 Spring 框架的核心是控制翻转IoC(Inversion of Control) 框架的核心是控制翻转IoC(Inversion 依赖注入DI 依赖注入DI (Dependence Injection)机制。 Injection)机制。 Spring 框架的结构如图所示。
2
Java EE应用介绍 EE应用介绍
J2EE,即 JAVA2 企业版,是美国 SUN 公司为 2EE,即
了开发具有高可用性、安全性、易维护性的企业 级应用所提出的一整套技术规范。
Java EE平台在企业级开发中占有很大的优势, EE平台在企业级开发中占有很大的优势, Java EE应用以其稳定的性能、良好的开放性及 EE应用以其稳定的性能、良好的开放性及 严格的安全性,深受企业及应用开发者的喜爱。 Java EE应用提供的跨平台性、开放性及各种远 EE应用提供的跨平台性、开放性及各种远 程访问的技术,为异构系统的良好整合提供了保 证。
合集下载

ssh 的连接原理

ssh 的连接原理

ssh 的连接原理
SSH(Secure Shell)是一种用于远程登录和安全数据传输的网络协议。

它通过加密通信,提供了一种安全的方式来访问远程计算机,并在客户端和服务器之间传输数据。

下面是SSH连接的工作原理:
一、客户端发起连接:用户在本地计算机上使用SSH客户端(例如OpenSSH、PuTTY等)发起连接请求。

客户端向远程计算机发送连接请求,并提供身份验证信息(通常是用户名和密码)以验证身份。

二、服务器响应:远程计算机(SSH服务器)收到连接请求后,会进行身份验证。

服务器根据提供的身份验证信息(用户名和密码),或者使用其他身份验证方法(如SSH密钥)验证客户端的身份。

三、建立安全通道:一旦客户端的身份验证成功,服务器就会与客户端建立安全通道。

在这个过程中,SSH使用加密技术(通常是对称加密和非对称加密)来保护数据在网络上的传输,从而确保通信的机密性和完整性。

四、交换密钥:在建立安全通道时,客户端和服务器还会交换密钥用于加密和解密数据。

这些密钥是在连接期间动态生成的,并且只有客户端和服务器知道。

五、安全通信:一旦安全通道建立完成,客户端和服务器之间的所有通信都会在该安全通道上进行。

数据经过加密后发送到远程计算机,远程计算机解密数据并处理请求,然后将响应数据加密后发送回客户端。

六、终止连接:当用户完成操作后,可以关闭SSH客户端,终止
与远程计算机的连接。

远程计算机也可以主动断开连接。

总的来说,SSH连接的原理是通过建立安全的加密通道,确保数据在网络上的安全传输,并且在连接期间进行身份验证,以确保通信的安全性和可靠性。

ssh架构打印sql语句及参数

ssh架构打印sql语句及参数

ssh架构打印sql语句及参数在ssh架构中打印SQL语句及参数,可以使用MyBatis提供的日志功能来完成。

1. 配置LoggingInterceptor在MyBatis配置文件中,配置LoggingInterceptor,代码如下:```<configuration><plugins><plugin interceptor="org.apache.ibatis.logging.log4j.Log4jImpl"><property name="LOGGING_LEVEL" value="TRACE"/></plugins></configuration>```其中,`Log4jImpl`是一个MyBatis提供的LoggingInterceptor实现类,会将日志输出到log4j中。

2. 在log4j.properties中配置日志输出在log4j.properties中配置输出MyBatis的日志,代码如下:```.apache.ibatis=TRACE```3. 打印SQL语句及参数在Mapper.xml文件中,使用`${}`语法获取SQL语句中的参数,并在日志中输出SQL语句及参数,代码如下:```<select id="selectUserById" resultMap="userResultMap" parameterType="ng.Integer">select *from userwhere id = ${id}</select>```通过以上配置,可以方便地打印SQL语句及参数,方便调试和排错。

ssh详解

ssh详解

SSH框架整合步骤详解SSH框架 2009-04-09 10:47:00 阅读611 评论0 字号:大中小订阅更系统地学习Struts1.x/Struts2.x+Hibernate+Spring,请学习该开源项目Appfuse终于,终于将SSH整合成功了,弄了几个小时,可以休息了(有的朋友弄了半个月,甚至重装了系统也没弄好,哎,庆幸啊)。

碰到问题千万不要放弃,要相信没有解决不了的问题!项目结构图:jsp部分为:index.jsp;success.jsp;fail.jspUserDAO.java,User.hbm.xml自动生成,HibernateSessionFactory 是多余的。

相关的配置文件、类文件详细信息,请参看Struts+Spring+Hibernate/SSH整合开发详细二以前是整过这三个框架的,可是工作期间都不曾用过,不知不觉之中,学的东西全忘了。

这次又要开始找工作了,看着招聘启事上都写着:要求熟练掌握Struts,Hibernate或Spring框架……,没得办法,重新学呗。

Spring in Action中文版下载地址(ftp协议)ftp://222.214.218.61/book5/20080228/cf8b35cc-5bcd-497 3-b6b7-37ae3ec78391.rar如果无法下载,可以在里重新搜索首先开始搭建项目环境,步骤如下:使用平台:MyEclipse 6.0框架版本:Struts 1.2 Hibernate 3.0 Spring 2.01>添加过程:<1> 新建项目。

Package Explorer视图下,右键单击 New -> Web Project;<2> 添加Struts框架。

菜单栏MyEclipse -> Capabilities,或者右键单击新建的项目名,选择快捷菜单中的"MyEclipse"下的二级菜单;设置相关的包名后,请写一个Struts的小例子,用来测试Struts是否可用;<3> 添加Spring。

SSH框架说明文档

SSH框架说明文档

一、SSH整体介绍1. 简介本Demo程序采用的是SSH(Struts+Spring+Hibernate)三层架构。

(1)Struts用于表现层,负责页面数据提取,页面动作响应。

(2)Spring是一种轻量级的框架模型,主要负责业务逻辑层的对象创建,表现层的Action 的创建,以及持久层的DAO的创建。

(3)Hibernate负责把内存中的数据对象保存到数据库中。

2. 框架集成说明在SSH三层架构中,主要用Struts来实现对页面的响应及页面跳转。

当用户向服务器发送某一个请求,这个请求会被服务器(Tomcat)接收到,服务器会根据请求的内容,将这个请求发送给相应的Servlet实例进行处理。

Servlet会根据其内容,去生成相应的Action实例。

本程序中,Struts将Action的创建工作交给了Spring的代理类来完成,创建这个实例后,将这个实例注入,由Struts调用Action中的相应方法。

Action中可以配置一个或多个Service对象,Action调用Service中的方法进行业务处理。

Service中通常会有一个或多个DAO的对象,DAO 继承了Hibernate的接口,用来处理数据库的操作。

而Action,Service,DAO的创建与注入,都是由Spring的Bean工厂来实现的。

(1)Struts与Spring的集成✧在Web.xml中配置Struts的配置文件✧在Web.xml中配置Spring的配置文件,Bean工厂及过滤器✧在Struts配置文件中集成Spring的代理类✧在Spring配置文件中配置Action(2)Spring与Hibernate的集成✧在Web.xml中配置Hibernate延迟过滤器配置✧在Web.xml中配置Spring的配置文件,Bean工厂及过滤器✧在Spring配置文件中配置DAO✧在Hibernate配置文件中配置数据库信息✧在DAO的实现类中继承HibernateDaoSupport类3. 程序的包结构(1)表现层的类包,分别用来存放表现层的Form与Action。

SSH工作原理

SSH工作原理

SSH工作原理
SSH分为两部分:客户端部分和服务端部分。

服务端是一个守护进程(demon),他在后台运行并响应来自客户端的连接请求。

服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。

刚才所讲的只是SSH连接的大致过程,SSH 1.x和SSH 2.x在连接协议上还有着一些差异。

SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。

启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。

当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。

但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。

OpenSSH是SSH的替代软件,而且是免费的,。

SSH协议远程安全登录协议的加密机制

SSH协议远程安全登录协议的加密机制

SSH协议远程安全登录协议的加密机制SSH(Secure Shell)协议是一种用于网络服务的安全协议,广泛用于远程登录和文件传输。

它通过加密技术保障数据传输的安全性,本文将详细介绍SSH协议的加密机制。

一、SSH的基本原理SSH协议基于非对称加密和对称加密两种加密方法,通过公钥加密和私钥解密实现安全通信。

非对称加密使用了公钥和私钥两个密钥进行加密和解密。

公钥可以任意分发给他人,但私钥必须妥善保管。

在SSH协议中,远程服务器生成一对密钥,将公钥发送给客户端。

客户端将自己的数据使用远程服务器的公钥进行加密,并发送给服务器。

服务器收到客户端加密后的数据后,使用私钥进行解密。

这样,数据在传输过程中得到了保护。

对称加密使用相同的密钥进行加密和解密,加密和解密过程相对较快。

为了确保密钥的安全,SSH协议通过交换密钥的方式,在通信双方之间建立一个共享密钥。

这个密钥只有在建立连接的过程中才会传输,之后的数据传输都使用该密钥进行加密和解密。

二、SSH协议的加密算法SSH协议采用了多种加密算法,包括对称加密算法和非对称加密算法。

1. 对称加密算法对称加密算法在SSH协议中扮演着重要的角色,因为它能够提供更高的加解密速度。

常用的对称加密算法包括DES、3DES、AES等。

DES(Data Encryption Standard)是一种对称加密算法,它使用56位密钥对数据进行加密。

由于DES的密钥较短,现在已经不再被广泛使用。

3DES(Triple Data Encryption Standard)是DES的一种改进版本,它使用三个56位密钥,对数据进行三次加密。

3DES目前仍然被广泛使用,但相对于AES而言,它的效率较低。

AES(Advanced Encryption Standard)是目前最常用的对称加密算法之一。

它使用128、192或256位的密钥,并以块加密的方式对数据进行处理。

AES由于其高效性和安全性,成为SSH协议中主要使用的对称加密算法。

ssh协议

SSH原理及工作过程一、SSH简介SSH全称是Secure Shell,SSH协议是基于应用层的协议,为远程登录会话和其他网络服务提供安全性的协议。

SSH使用最多的是远程登录和传输文件,实现此功能的传统协议都不安全(ftp,telnet等),因为它们使用明文传输数据。

而SSH在传输过程中的数据是加密的,安全性更高。

SSH协议具有以下一些优点:数据传输采用密文的方式,保证信息交互的机密性;用户的认证信息以密文的方式传输,可以有效地防止用户信息被窃听;除了传统的密码认证,SSH服务器还可以采用多种方式对用户进行认证(如安全性级别更高的公钥认证),提高了用户认证的强度;客户端和服务器端之间通信使用的加解密密钥,都是通过密钥交互过程动态生成的,可以防止对加解密密钥的暴力猜测,安全性级别比手工配置密钥的方式高;为客户端提供了认证服务器的功能,可以防止“伪服务器欺骗”。

SSH协议采用客户端/服务器架构,分为传输层、认证层和连接层。

二、ssh工作过程SSH的报文交互主要有以下几个阶段:1、连接建立SSH服务器端在22端口侦听客户端的连接请求,接收到客户端的连接建立请求后,与客户端进行三次握手,建立起一条TCP连接,后续的所有报文交互都在这个TCP连接之上进行。

2、版本协商TCP连接建立之后,服务器和客户端都会向对端发送自己支持的版本号。

服务器端和客户端收到对端发送过来的版本后,与本端的版本号进行比较,双方都支持的最高版本号即为协商出的版本号。

版本协商成功后,进入下一个阶段,即算法协商阶段。

否则,中断连接。

3、算法协商SSH协议报文交互需要使用多种算法:用于产生会话密钥的密钥交换算法,包括diffie-hellman-group-exchangesha1、diffie-hellman-group1-sha1 和diffie-hellman-group14-sha1 算法等。

用于数据信息加密的加密算法,包括3des-cbc、aes128-cbc 和des-cbc 加密算法等。

ssh协议详解

ssh协议详解SSH协议详解。

SSH(Secure Shell)是一种网络协议,用于在网络中提供安全的远程登录会话。

它可以加密会话数据,并通过公共网络安全地传输。

SSH协议使用了加密技术来保护网络通信的安全性,因此在网络安全领域有着广泛的应用。

首先,SSH协议采用了非对称加密算法来进行身份验证和密钥交换。

在SSH连接建立时,客户端和服务器会交换各自的公钥,并使用对方的公钥来加密通信数据。

这样,即使在公共网络中传输的数据被截获,也无法被解密,从而保护了通信的安全性。

其次,SSH协议还使用了对称加密算法来保护通信数据的机密性。

在身份验证和密钥交换完成后,客户端和服务器会使用协商好的对称加密算法来加密通信数据。

这样,即使数据被截获,也无法被解密,从而保护了通信数据的机密性。

此外,SSH协议还提供了完整性保护机制,用于检测通信数据是否被篡改。

在通信数据传输过程中,SSH会对数据进行哈希运算,并将哈希值附加到数据上。

接收方在接收到数据后会重新计算哈希值,并与附加的哈希值进行比对,以确保数据的完整性。

另外,SSH协议还支持端口转发和X11转发等功能,用于在安全的通信通道中传输其他协议的数据。

这些功能使得SSH协议不仅可以用于远程登录,还可以用于安全地传输其他协议的数据,从而提高了网络通信的安全性。

总的来说,SSH协议通过使用非对称加密算法、对称加密算法和完整性保护机制,以及支持端口转发和X11转发等功能,来保护网络通信的安全性。

它在网络安全领域有着广泛的应用,可以有效地保护网络通信的安全性,防止数据被篡改和窃取,从而保障了网络通信的安全性。

综上所述,SSH协议在网络安全领域有着重要的地位,它通过使用各种加密算法和完整性保护机制,来保护网络通信的安全性。

在实际应用中,我们应该充分利用SSH协议的各种功能,来保障网络通信的安全性,防止数据被篡改和窃取,从而确保网络通信的安全性。

ssh三大框架整合

ssh三⼤框架整合Hibernate框架 1 hibernate核⼼配置⽂件 (0)orm思想 - 对象关系映射 (1)数据库信息 (2)hibernate信息 (3)映射配置 (4)hibernate核⼼配置⽂件 - 如果单纯使⽤hibernate框架,核⼼配置⽂件名称 hibernate.cfg.xml和位置 src下⾯固定的 - hibernate和spring整合时候,hibernate核⼼配置⽂件名称和位置没有固定要求的 2 hibernate映射配置⽂件 (1)实体类和数据库表映射关系—使⽤orm思想 3 hibernate操作的步骤 (1)在spring框架对hibernate框架进⾏封装,使⽤hibernateTemplateStruts2框架 1 Action操作 (1)action创建三种⽅式 - 继承类 ActionSupport (2)配置action访问路径 - 创建struts.xml配置⽂件,这个⽂件名称和位置固定 src下⾯的 (3)配置访问action的多个⽅法 - 使⽤通配符⽅式配置 (4)在action获取表单提交数据 - 获取request对象 ** 使⽤ServletActionContext类获取 - 属性封装 - 模型驱动(重点) - 表达式封装 (5)在action操作域对象 - 使⽤ServletActionContext获取域对象 (6)配置struts2的过滤器 2 值栈 (1)向值栈放数据 - set⽅法 - push⽅法 - 定义变量,⽣成get⽅法 (2)从值栈获取数据 - 在jsp中使⽤struts2标签+ognl获取 - <s:property> - <s:iterator> 3 拦截器 (1)aop和责任链模式 (2)⾃定义拦截器 - 继承MethodFilterInterceptor - 重写类⾥⾯的⽅法 - 配置拦截器和action关联Spring框架 1 spring核⼼配置⽂件 (1)名称和位置没有固定要求 (2)在spring核⼼配置⽂件中引⼊schema约束 2 创建对象 (1)xml配置⽅式:<bean id=”” class=”” scope=””/> (2)注解⽅式:四个注解 3 注⼊属性(对象类型属性) (1)xml配置⽅式: (2)注解⽅式:两个注解 - autowired - resource 3 使⽤ServletContext对象和监听器实现 (1)在服务器启动时候,加载spring配置⽂件,创建对象 (2)配置spring的监听器 (3)指定spring配置⽂件位置 4 jdbcTemplate 5 spring事务配置 (1)xml⽅式 (2)注解⽅式SSH框架整合思想 1 三⼤框架应⽤在javaee三层结构 2 struts2框架和spring整合 (1)struts2的action在spring配置 3 spring框架和hibernate框架整合 (1)hibernate的sessionFactory交给spring配置 (2)把hibernate数据库配置交给spring配置整合struts2和spring框架 1 把struts2的action交给spring管理 2 实现过程 第⼀步导⼊struts2的jar包 (1)导⼊⽤于整合的jar包 (log4j.properties为log4j的⽇志输出格式,放⼊src下⾯) (2)Spring为了整合Struts还需要额外再导⼊⼀个jar包:(该包在struts的lib⽬录下) (3)导⼊Struts2的jar包(struts2版本为2.3.24): (4)创建Actionpublic class UserAction extends ActionSupport {public String execute() throws Exception {System.out.println("Success....");return NONE;}} (5)创建Strut2的核⼼配置⽂件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><package name="demo" extends="struts-default" namespace="/"><action name="userAction" class="erAction"></action></package></struts> (6)在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> (7)导⼊Spring整合Web项⽬的jar包,也就是监控项⽬启动的监听器所在的jar包 (8)创建Spring的核⼼配置⽂件并在其中引⼊约束<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"></beans> (9)把action交给Spring进⾏配置1 <!-- 配置action的对象 -->2 <!-- 注意action是多实例的,因此我们这⾥把scope配置为prototype的 -->3 <bean id="userAction" class="erAction" scope="prototype"></bean> ①在spring配置action对象,在struts.xml中也配置action对象 ②解决: 只需要在spring⾥⾯配置action对象,不要在struts.xml中配置<struts><package name="demo1" extends="struts-default" namespace="/"><!-- class属性⾥⾯不写action全路径了,因为写,action对象创建两次写spring配置的action的bean的id值--><action name="userAction" class="userAction"></action></package></struts> 可以这样写的原因是我们导⼊了⼀个Spring整合Struts2的jar包:struts2-spring-plugin-2.3.24.jar (10)web.xml中Spring监听器的配置<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean.xml</param-value></context-param> (11)测试准备 ①所需的为Struts2的核⼼配置⽂件:struts.xml ②Spring的配置⽂件:bean.xml ③项⽬的配置⽂件:web.xml ④Struts2的UserAction类 ⑤在UserAction中对UserService的调⽤ ⑥UserService中对UserDao的调⽤ ⑦UserDao类的编写struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><package name="demo1" extends="struts-default" namespace="/"><!-- class属性⾥⾯不写action全路径了,因为写,action对象创建两次写spring配置的action的bean的id值--><action name="userAction" class="userAction"></action></package></struts>bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"><bean id="userAction" class="erAction"><property name="userService" ref="userService"></property></bean><bean id="userService" class="erService"><property name="userDao" ref="userDaoImp"></property></bean><bean id="userDaoImp" class="erDaoImp"></bean></beans>web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" <display-name>spring-day4-ssh</display-name><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean.xml</param-value></context-param><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><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>UserAction.javaimport com.opensymphony.xwork2.ActionSupport;import erService;public class UserAction extends ActionSupport {private UserService userService;public void setUserService(UserService userService) {erService = userService;}public String execute() throws Exception {userService.add();return NONE;}}UserService.javapublic class UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {erDao = userDao;}public void add() {userDao.add();}}UserDao.java 其实现类public class UserDaoImp implements UserDao {public void add() {System.out.println("UserDaoImp....");}} (12)测试结果: 可以在后台观察到如下测试结果:image ⾄此,Spring和Struts2的整合已经完毕,然后是Spring对Hibernate的整合了。

SSH架构的搭建过程(lhl)

SSH架构的搭建过程1准备工作a)安装Oracl数据库建立Collecting_S 空间建立Collecting_U用户创建用户数据表B_Userb)安装javac)安装Tomcatd)安装Myeclipse2绑定Tomcat和Java2.1设定字符集a)点击Window菜单,选择Preferences进行参数设置b)选择Myeclipse 的Files and JSP选择Encoding:ISO 10646 (UTF-8)c)选择Myeclipse 的Files and PHP选择Encoding:ISO 10646 (UTF-8)d)设置当前工程中的字符集当工程建立后,选中工程,点击右键,选择2.2绑定Javaa)点击Window菜单,选择Preferences进行参数设置b)先择Java的Installed JREsc)点击Addd)选择Standard VMe)点击Directoryf)选择路径C:\Program Files\Java\jdk1.7.0_04g)移除原来的Java包2.3绑定Tomcata)点击服务器图标,选择Configure Serverb)选择Servers的Tomcat 7.xc)选择Enable,浏览Tomcat home Directory:C:\apache-tomcat-7.0.23d)点击Apply,查看Tomcat的JDK是否正常3建立数据源a)点击Window的Show View的Otherb)选择Myeclipse Database下的DB Browserc)在DB Browser 窗口下点击鼠标右键,选择New项d)填写Driver Template :Oracl (Thin Driver)e)填写Driver Name :如ORCL_123f)填写Connection URL :jdbc:oracle:thin:@10.255.8.123:1521:ORCLg)填写User Name :Collecting_Uh)填写Password : Collecting_Pi)点击Add JARs:E:\app\Legend8045dfeo\product\11.2.0\client_1\jdbc\lib\ ojdbc6.jar j)Driver Name:oracle.jdbc.OracleDriver4添加调试显示在工程的初始包src路径下创建一个文件log4j.properties内容为:# Configure logging for testing: optionally with log filelog4j.rootLogger=Debug, stdout# log4j.rootLogger=WARN, stdout, logfile#print to screenlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%n#write to log filelog4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=target/spring.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%n5清除Tomcat中无用的工程(加快速度)6建立工程,搭建HHS1框架a)点击File的New的Web Projectb)填写Project Name:pCollectingS1c)选择use Defeat JRE(Currently’JDK1.7.0_04)d)发布测试点击发布图标点击Add按钮选择Server为Tomcat 7.X打开IE浏览,输入http://localhost:8080/pCollectingS1/显示This is my JSP page6.1添加Spring 框架a)选中工程pCollecting 点击鼠标右键,选择Myeclipse 的Add Spring Capabilitiesb)选择Spring 3.0c)选择数据包Spring 3.0 AOP LibrariesSpring 3.0 Core LibrariesSpring 3.0 Persistence Core LibrariesSpring 3.0 Persistence JDBC LibrariesSpring 3.0 WEB Librariesd)选择copy checked Liberty Contents to Project Folder:/WebRoot/WEB-INF/Lib7添加Hibernate框架8添加Struts 框架9反向工程:根据数据库中的表来生成POJO类、DAO接口和实现类、hibernate 配置文件等a)进入Database Browserb)连接到数据库c)找到Table 的U_User数据表d)点击右键选择Hibernate Reverse Engineering10创建工作路径包a)创建接口er.Service在该包下创建接口IUserLogin修改为public interface IUserLogin {Object Login(String strUserNo, String strPassword);}创建对象(实现)包com.pCollecting.DB.U_User.Service.Impl创建是实现类UserLoginImplmport java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.pCollecting.DB.U_User.POJO.UUserDAO;import com.pCollecting.DB.U_User.Service.IU_UserLogin;public class U_UserLogin extends UUserDAO implements IU_UserLogin {private static final Logger log =LoggerFactory.getLogger(UUserDAO.class);// 为了输出日志文件public Object Login(String userNo, String strPWD) {log.debug("finding the UUser for login");String queryString = "from UUser where userNo = '" + userNo + "' and pwd = '" + strPWD + "'";List<?> lst = (List<?>)getHibernateTemplate().find(queryString);if (lst.size() != 0) {return lst.get(0);}return null;}}修改ApplicationContext.xml将dao改为接口<bean id="UUserDAO"class="er.POJO.UUserDAO"> <property name="sessionFactory"><ref bean ="sessionFactory" /></</bean ></ <bean id="class="er.修改public class UserLoginImpl 类public class UserLoginImpl extends UUserDAO implements IUserLogin {private static final Logger log = LoggerFactory.getLogger (UUserDAO.class );// 为了输出日志文件public Object Login(String userNo, String strPWD) {log .debug("finding the UUser for login");try {String queryString = "from UUser where userNo = '" + userNo+ "' and pwd = '" + strPWD + "'";List<?> lst = (List<?>) getHibernateTemplate().find(queryString);if (lst.size() != 0) {return lst.get(0);}} catch (RuntimeException re) {log .error("find the UUser for login failed", re);throw re;}return null ; } 11 配置侦听在Web.XML 文件中添加侦听(前面)<!-- 根据实际spring 配置文件目录进行配置--><!-- 如果spring 配置文件被命名为applicationContext.xml ,并且放在WEB-INF 目录下,则不需要配置<context-param>--><!-- 因为ContextLoaderListener 默认在WEB-INF 目录下寻找名为applicationContext.xml 的文件--><context-param ><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/application*.xml</param-value> </context-param><!-- 载入Spring ApplicationContext --><listener><listener-class>org.springframework.web.context.ContextLoaderList ener</listener-class></listener><!-- 支持session scope的Spring bean --><listener><listener-class>org.springframework.web.context.request.RequestContextListener</l istener-class></listener>测试建立main类进行测试public class Test {/*** @param args*/public static void main(String[] args) {ApplicationContext acx = new FileSystemXmlApplicationContext( "/WebRoot/WEB-INF/applicationContext.xml");IUserLolgin ul = (IUserLolgin) acx.getBean("userlogin");BUser bUser = (BUser) erLogin("1001", "123456");if (bUser == null) {System.out.println("error");return;}System.out.println("Success UserNo=" + bUser.getUserNo());}添加添加登录jsp添加登录正确jsp添加登录错误jsp添加类package com.pCollecting.struts.action;import org.apache.struts.actions.DispatchAction;import org.springframework.web.context.WebApplicationContext;importorg.springframework.web.context.support.WebApplicationContextUtils;public class SuperAction extends DispatchAction {protected Object getBean(String id) {WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.servlet.getServletContext());return ctx.getBean(id);}}修改UserLoginActionpublic class UserLoginAction extends SuperAction {/** Generated Methods*//*** Method execute* @param mapping* @param form* @param request* @param response* @return ActionForward*/public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { UserLoginForm userLoginForm = (UserLoginForm) form;IUserLolgin userLogin = (IUserLolgin)getBean("userlogin");BUser user = (BUser)erLogin(userLoginForm.getUserno(),userLoginForm.getPassword());if (user == null){// forward to errorrequest.setAttribute("errorInfo", userLoginForm.getUserno() + ";" + userLoginForm.getPassword());return mapping.findForward("err");} else {// forward to successrequest.setAttribute("LoginInfo", userLoginForm.getUserno() + ";" + userLoginForm.getPassword());request.setAttribute("message", "亲爱的"+ user.getName() + ":欢迎您!");return mapping.findForward("succ");}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档