SSH框架教程.docx

上传人:b****6 文档编号:9048772 上传时间:2023-02-02 格式:DOCX 页数:46 大小:2MB
下载 相关 举报
SSH框架教程.docx_第1页
第1页 / 共46页
SSH框架教程.docx_第2页
第2页 / 共46页
SSH框架教程.docx_第3页
第3页 / 共46页
SSH框架教程.docx_第4页
第4页 / 共46页
SSH框架教程.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

SSH框架教程.docx

《SSH框架教程.docx》由会员分享,可在线阅读,更多相关《SSH框架教程.docx(46页珍藏版)》请在冰豆网上搜索。

SSH框架教程.docx

SSH框架教程

SSH框架的学习

一,Struts2

1为什么要学习Struts框架?

1>Struts框架的好处:

简化开发工作量,提高开发效率;采用了优秀的MVC思想

2>如何学习:

先掌握框架的使用,在了解内涵

2MVC模式在javaWeb中的应用

1>MVC思想是根据组件职责不同,将系统分为三部分组成

--M(Model)负责业务处理

--V(View)负责与用户交互

--C(Controller)负责协调试图部分和模型部分协同工作

2>为什么使用MVC:

易于扩展和升级

3Struts框架的处理流程

浏览器发出struts请求—>请求进入struts控制器—>struts控制器解析XML配置文件—>控制器根据不同请求,调用不同的Action—>Action调用DAO处理请求返回结果—>控制器根据结果调用试图组件,响应给用户

4Struts历史

Struts框架分为Struts1和Struts2两者没有必然联系,Struts2是以WebWork框架核心(Xwork)为基础构建起来的

5Struts基本使用

1>引入核心开发包五个:

commons-logging-1.0.4.jar(主要用于日志处理)

struts2-spring-plugin-2.0.14.jar(struts2整合spring需要的包)

2>在web.xml中配置struts控制器

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExcuteFilter

3>根据要求编写Action和JSPAction要继承ActionSupport

4>在struts.xml定义Action和请求对应关系

6struts.xml基本配置可以放在src下面

1>根元素里面包含多个元素

2>主要是为了将Action分组定义name用于指定包名;extends一般指定struts-default(在struts-default.xml中定义),里面包括struts2运行所需的必要组件

3>

4>一个可以包括多个主要用于试图响应

5>下面一个例子:

7为列表添加分页功能例如每页2个

page=1;

pageSize=2;

intbegin=(page-1)*pageSize+1;

intend=page*pageSize;

eg:

select*from(selectrownumrn,c.*formCOSTc)wherernbetween1and6;

8利用Struts2标签+OGNL技术

1>OGNL:

(Object-GraphNavigationLanguage)对象图导航语言,主要用于访问对象的数据和方法。

2>OGNL主要由三部分组成

--OGNL引擎:

负责解析OGNL表达式,定位数据;

--Root根存储区:

负责存储要访问的目标对象;

--Context变量存储区(Map类型)负责存放多个要访问的目标对象;

3>OGNL基本语法:

A,访问Root区域对象基本语法:

--访问简单数据:

属性—>“name”;

--访问数组和List集合:

属性[index]—>“list[2]”;

--访问Map集合:

属性.Key—>“map.sex”;

--访问方法:

属性.方法()—>“list.size()”;

--创建List对象:

”{element1,element2}”;

--创建Map对象:

”#{key1:

value1,key2:

value2}”;

--创建对象:

“new包名.构造方法”—>“newint(totalPages)”

B,访问Context区域对象基本语法:

采用”#key”即可

4>OGNL技术在Struts上面的应用

在Struts中有一个ValueStack()值栈数据对象,该对象存储了请求相关的所有的数据信息。

例如requestsessionapplicationaction等,struts采用OGNL工具对ValueStack进行操作。

---xwork对OGNL进行了部分改造:

答:

将Root存储区改造成一个栈结构(CompoundRoot),当利用”属性”表达式访问时。

优先对栈顶对象查找,没有再去次栈顶查找,以此类推

5>Struts标签的使用

利用Struts2标签显示数据,需要为标签指定OGNL表达式,标签利用表达式定位ValueStack中的数据,进行相应的操作

---:

显示valueStack状态

Eg:

debug>

debug>

---:

循环集合元素

Eg:

iteratorvalue=”newint(totalPages)”status=”i”/>分页中用到了;

iteratorvalue=”pageRows”var=”cost”/>

注:

value:

指定循环集合或数组

var:

指定循环变量,会被存放到ValueStack的Context中。

status:

指定循环状态变量,会被存放到ValueStack的Context中,该

变量有count属性表示循环了多少个元素(1开始),index表示当前循环元素的索引(0开始)。

---if…else…标签判断分支:

iftest=””>

if>test指定ognl判断表达式

Eg:

iftest=”#cost.status==0”>暂停

if>

else>开通

else>

---

propertyvalue=””/>显示数据标签value指定ognl表达式

Eg:

propertyvalue=”#cost.id”/>

---

datename=””format=””/>将数据date格式化输出

Eg:

datename=”#cost.startTime”format=”yyyy/MM/ddHH:

mm:

ss”/>

9Action组件的相关使用

1>Action组件的原理

客户发出action请求给struts控制器—>struts控制器会创建ValueStack对

象—>struts控制器根据请求创建Action对象,并将Action压入ValueStack

的root栈顶(线程安全,不用考虑并发问题)—>struts控制器将请求相关的

Request,Session对象放入到ValueStack的Context区域—>struts控制器执

行Action对象的execute方法处理请求—>struts控制器根据execute结果

生成响应信息输出—>请求处理完毕,销毁ValueStack和Action对象。

2>Action属性注入

配置中,为Action对象的属性指定初始值,使用格式如下

属性值

注意:

type类型如果你想再见跳转的页面需要Action的数据的话要用

dispatcher,如果用redirect时候,将所有的数据删除了,jsp页面中

也不能获取到应有的值了。

10Result组件的相关使用

1>作用:

负责生成响应试图内容。

Struts2框架提供了多种不同的Result组件类型,用于做不同形式响应,例

如json数据响应,流数据响应,jsp页面响应等。

2>Result组件相关配置---声明定义

3>Result组件相关配置---使用定义

4>掌握经常使用的Result组件

--Jsp试图

--dispatcher:

以转发方式调用Jsp页面

--redirect:

以重定向方式调用Jsp页面

Jsp页面

--Action试图

--chain:

以转发方式调用下一个Action

--redirectAction:

以重定向方式调用下一个Action

相同命名空间的调用:

请求名

跨命名空间的调用:

请求名

/命名空间名

5>JSONResult组件

主要负责Action的属性以JSON字符串格式输出,JSONResult的使用步骤:

---引入struts2-json-plugin.jar。

---将元素的extends继承”json-default”;

---使用配置

---只返回Action中一个属性:

属性名

---返回Action中多个属性:

属性名1,属性名2,属性名3

---返回Action中的所以属性值

11拦截器组件

Struts2组件提供了大量的拦截器组件,如果不能满足开发者需求,可以自行

定义,一般利用拦截器封装一些通用性的功能,例如请求参数给action赋值,文件上传,权限检查等;

1>拦截器的作用:

拦截器可以在Action和Result组件调用之前执行,也可以在其之后执行。

2>拦截器的原理:

---所有的拦截器组件实现类都必须实现接口Interceptor此接口必须实现三个方法init,destory,intercept。

或者抽象类AbstractInterceptor此抽象类只需要实现intercept即可,

ai.invoke()拦截器如果只有一个拦截器执行完这个方法后,会返回给试图,

如果多个拦截器,它只有执行完所有的拦截器,才会返回给试图

3>所有拦截器都具有下列注册配置

也可以在使用拦截器的时候给它设置参数,就在下面用

12Struts表单标签

界面封装了界面显示逻辑,用于简化JSP,以后需要时候再进行查找标签库

例如:

 

二,Hibernate

1Hibernate框架作用,

1>优点:

----Hibernate框架主要用于对数据库的操作,使用该框架可以简化数据操作代码,这样程序员可以将更多经历放在业务编写上。

----免费开源。

----完全面向对象。

2>缺点:

----性能比较差,尤其是批处理方面,大数据量开发的时候,最好使用JDBC

----HQL的功能相对薄弱

3>本质:

对JDBC技术的封装。

4>原有JDBC技术的缺点:

----需要编写大量复杂的SQL语句。

----需要做大量的对象和记录的转换。

----数据库移植时,需要修改SQL语句。

例如:

分页语句,不同数据库写法不同

5>Hibernate设计原理

----Hibernate框架是一款ORM工具,基于ORM设计思想开发出来的

----ORM:

对象关系映射。

Mapping映射

Object:

对象------Relation关系

对象:

Java中Entity实体类。

关系:

关系型数据库。

思想:

将程序中的对象与关系型数据库中的数据自动映射转化。

-----这样在查询时候,可以自动将记录封装成对象返回。

在更新和插入时候,

可以将对象自动写入数据表中,像中间得SQL+JDBC的操作一样,完全封装在工具的底层。

基于这种思想的框架还有HibernateIbatis等

2Hibernate主要结构

1>Hibernate主要包括以下几个部分构成。

----java实体类(n个):

用于封装数据表记录的Java对象类型。

例如:

Person.java。

----实体类名.hbm.xml(n个):

映射描述文件,里面定义了实体类与数据库之

间的对应关系。

例如:

Person.hbm.xml。

----hibernate.cfg.xml(1个):

主配置文件,里面主要定义链接数据库的参数。

----Hibernate主要API:

在使用时候,需要使用Hibernate提供的API,他们将

SQL+JDBC封装起来了

2>hibernate开发需要导入的jar包

----Hibernate3.jar和hibernate-core-3.3.1.GA.jar(hibernate核心jar包)

----antlr.jar(AnotherToolforLanuageRecognition可构造语言识别器,

将HQL解析为SQL的需要)

----commons-collections.jar(包含了一些Apache开发的集合类,功能比

java.util.*强大)

----dom4j.jar(越来越多的java软件都在使用dom4j来操作xml,Hibernate也

不例外)

----javassist.jar(代码生成工具,Hibernate用它在运行时扩展java类实现,同

cglib包)

----jta.jar(标准的java事务处理接口)

----cglib(cglib字节码解释器)

----slf4-api.jar和slf4j-log4j12.jar(hibernate使用的日志系统)

----asm.jar(ASM字节码库,如果使用”cglib”则必要)

----asm-attrs.jar(ASM字节码库,如果使用”cglib”则必要)

----ehcache.jar(EHCache缓存,如果想使用时候加入)

----log4j.jar(必须加入的)

3>hibernate常用的API

----Configuration:

加载hibernate核心的配置文件hibernate.cfg.xml

----SessionFactory:

hibernate中重量级对象(重量级:

消耗资源最多,功能最强

大的对象),主要是用于创建创建Hibernate中Session对象

控制对数据库的链接,建议一个项目中,最好只有一个

SessionFactory,利用单例模式即可;

-----Session:

hibernate中所有的增删改查操作都是依赖session对象实现其功

能的,代表java程序与数据库的一次链接,是最常用的工具对象。

-----Transaction事务提交:

对表的改变必须依赖程序员开启事务,并且提交

事务

4>Hibernate使用步骤

----创建工程,引入hibernate的jar包。

----在src下追加hibernate.cfg.xml主配置。

----根据数据表创建实体类Entity。

----编辑实体类和数据库表的映射文件hbm.xml。

----利用HibernateAPI实现增删改查操作。

如果想自动生成表则需要以下代码:

//代表控制台输出的sql语句,我们能看到。

3Hibernate映射类型

在***.hbm.xml中,描述属性和字段之间映射的时候,可以使用type属性指定映射类型

1>Hibernate映射类型主要有:

---整数类型:

byte,short,integer,long。

---浮点数类型:

float,double。

---字符串类型:

string。

---事件日期类型:

date,time,timestamp。

---boolean类型:

yes_no(将true/false转换成Y/N),

true_false(将true/false转换成T/F)。

---其他:

big_decimal,big_integer,clob,blob。

4主键的生成策略

1>在***.hbm.xml中,可以主键指定生成方式。

----uuid:

每次插入新的数据时候,hibernate自动生成不重复的32位字符串,hibernate独有的。

----sequence:

采用指定序列生成,适用于Oracle这样需要使用序列自增的DB。

用oracle创建序列:

----identity:

采用数据库自增长机制,适用于mysql和sqlserver数据库。

----native:

根据方言自动选择identity或者sequence生成方式。

----increment:

首先获取最大主键值将其+1,在执行插入操作,适用各种DB。

----assigned:

忽略主键生成,需要程序员自己指定主键值。

2>中配置方法:

5Hibernate框架的基本特性

1>一级缓存(Session级别的,默认开启):

每次创建一个Session时会为这个session

对象提供一个缓冲区,用于缓存Session查询出来的单个对象,当使用Session

再次查询同一个对象时候,就从缓存里面直接查出,避免对数据库进行二次

查询,从而提高效率。

2>一级缓存区管理办法:

evict()---驱逐,clear()—清理等方法,

flush()将session缓存中的数据跟数据库同步。

6Hibernate对象的持久性

Hibernate是一个持久层框架,实体对象可以具有下面三种状态:

----临时态:

采用new方式构建的对象,执行完毕后被垃圾回收掉。

session.save()可将临时态变为持久态;

----持久态:

1>采用Session对象查询出来的,受到了Session对象所管理的对象,

例如:

调用load,get,save,update方法之后的对象,

2>处于持久态的对象特点:

---对象变为持久态对象之后,在调用对象的set方法后,当事务提交

mit()/执行session.flush()方法时,对象的数据状态可以

更新到数据库。

---对象不能被垃圾回收器回收。

---对象存储在一级缓存里面,由Session负责管理。

----托管态/游离态:

脱离Session管理的对象,

例如:

用到了session.evict()/session.clear();

session.update()可将游离态变为持久态。

注意:

我们用saveOrUpdate()方法代替save()和update()。

7Hibernate的延迟加载

Hibernate提供一些方法,利用这些方法所返回的对象,并没有立刻发生sql语句加载数据库中的数据,而是在调用对象的getter方法时候才触发数据库的查询,加载数据记录。

例如session.load()就是延迟加载的一个方法。

-----使用延迟加载方法时需要注意:

要避免出现LazyInitializationException:

couldnotinitializeproxy–notSession

原因是关闭过早了。

-----解析get()和load()的区别:

1>相同点:

都是根据主键Id当条件查询某个对象。

2>不同点:

---load()是采用延迟加载机制,

get采用立即加载机制。

---load()没有符合的记录会抛出异常ObjectNotFoundException,

get()会返回null,而不会抛出异常。

---load()返回的是动态生成一个类型(动态代理),

get()则返回是实体类型。

8Hibernate延迟加载实现原理--------cglib动态代理。

---Hibernate采用了cglib.jar和asm.jar两个开发包,实现了动态新类和动态编

译成class,这是hibernate内部临时生成一个暂时替代的查找对象。

9update()方法

1>先查询出要修改的对象,再调用update()方法

好处:

稳定,不出现空值。

2>直接创建对象,添加id,修改属性

坏处:

容易出现空值。

10Hibernate关系映射的作用

1>一对多关系映射(单向):

(例如:

一个部门有多个员工)由一的一端来维护关联关系,外键字段由一

的一端创建,多的一端不维护关联关系。

----需求:

由一方对象查询n方记录,可以采取一对多的关系映射。

----首先在一方实体实体类中添加集合属性Set。

----然后在一方的***.hbm.xml中定义一对多关系映射的描述。

----使用时,通过一方对象的关系属性,获取n方数据

----语法:

2>多对一关系映射(双向):

(例如:

多个员工可以查询他们同属一个公司的信息)

-----需求:

由多方对象查询一方对象的信息。

-----在多方实体类中添加属性,该属性为一方类型

(例如:

privateDeptdept其中Dept是一方的class类)。

-----在多方的***.hbm.xml中,添加属性描述信息。

column=”关联条件的外键字段”

class=”一的一端的类名路径”/>

-----使用时,通过多方对象的关联属性获取相关一方的记录信息。

11关联操作

1>关联查询:

----默认情况下,关联属性的加载采用了延迟加载机制,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1