SSH框架笔记.docx

上传人:b****5 文档编号:12188667 上传时间:2023-04-17 格式:DOCX 页数:31 大小:33.29KB
下载 相关 举报
SSH框架笔记.docx_第1页
第1页 / 共31页
SSH框架笔记.docx_第2页
第2页 / 共31页
SSH框架笔记.docx_第3页
第3页 / 共31页
SSH框架笔记.docx_第4页
第4页 / 共31页
SSH框架笔记.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

SSH框架笔记.docx

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

SSH框架笔记.docx

SSH框架笔记

一.Struts

二.Hibernate

三.Spring

 

一.Struts返回主目录

One.框架和运行环境

Two.Action和Result原理

Three.拦截器

1.MVC模式

M-(Model)模型

职责是负责业务逻辑。

包含两部分:

业务数据和业务外理逻辑,比如实体类,DAO,Service都属于模型层

V-(View)视图

职责是负责显示界面和用户交互(收集用户信息),属于视图的类进不包含业务逻辑和控制逻辑的JSP

C-(Controller)控制器

控制器是模型层M和视图层V之间的桥梁,用于控制流程,比如以前项目中写的ActionServlet

2.什么是框架?

减低开发成本,提升效率

1):

健壮性(工具不能坏,稳定)

2):

扩展性(即插即用)

3):

侵入性

4):

易用性()

3.什么是Struts2?

概念:

解决软件开发过程中问题的半成品,提高了程序员的开发速度,降低了程序

构建过程中的风险

struts2是一个作用在表现层的基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的开源框架

Struts2是Jakarta项目的部分,由Apache软件基金赞助

Struts2是在webwork(体现当前web软件开发的所有的先进思想

依赖注入和AOP面向切面编程)的基础上发展起来的。

Struts2为Strut1注入了WebWork的设计理念,统一了Struts1和WebWork框架,struts1和WebWork将不再有新的版本推出。

4.搭建Struts2运行环境

1)添加jar

上传文件:

commons-fileupload-1.2.1.jar--用于实现文件上传功能的jar包

commons-io-1.3.2.jar

模板语言(替代JSP)

freemarker-2.3.16.jar

freemarker是比jsp更简单好用,功能更加强大的表现层技术,用来替代jsp的。

在Struts2中提倡使用freemarker模板,但实际项目中使用jsp也很多

分析,编辑和创建java字节码的类库

javassist-3.7.ga.jar

Struts核心jar

xwork-core-2.2.1.1.jar--Struts2核心包,是WebWork内核

struts2-core-2.2.1.1.jar--Struts2核心包,是Struts框架的“外衣

ognl-3.0.jar--用来支持ognl表达式的,类似于EL表达式,功能比EL表达式强

大的多

2)添加配置文件

a)修改web.xml

在web.xml中配置struts2的中央控制器(过滤器)

3)配置struts.xml文件

A.作用是为分组,标签下可有多个,下列是对下属性的介绍:

1)name="helloworld"

唯一的标识,表示包名为helloworld

2)extends="struts-default"

继承的包名,一般继承Struts2默认提供的struts-default包,该包中定义了很多Struts2应用必须的组件(比如:

拦截器);该package声明的位置在struts2-core-2.1.8.jar/struts-default.xml文件中

3)namespace用来设置该包中的action的地址的命名空间。

namespace="/"表示根命名空间,Action的访问路径如下即可:

http:

//localhost:

8080/struts01/webaction.action

如果namespace="/day01"之后,Action访问路径为:

http:

//localhost:

8080/struts01_1/day01/welcome.action

B.作用是指明每个请求对应的Action类之间的对应关系,下可有多个

下面是标签的属性介绍:

1)name="welcome"

表示请求的名字为welcome(即welcome.action)

2)class="com.tarena.action.WelcomeAction"

指定了对应的Action类。

3)method="xxx"

用于指定在对应的类中要执行的方法名,该方法的返回值必须是String类型(规定)

publicStringxxx(){......}

标记可以增加method=""属性,用来指定执行哪个方法,如果没有这个属性,默认执行execute()方法。

C.

1)name="success"

该result的名称,Action返回哪一个result的name值,意味着要转发到哪一个result所对应的JSP地址。

OGNL

它是一种功能强大的表达式语言,解析OGNL表达式

基本语法:

OGNL引擎访问对象的格式:

Ognl.getValue(“OGNL表达式”,root对象);

FC(前端控制器)站在最前面,接收所有请求

Action根据输入算输出

Result把输出用适当的格式显示

Interceptor(拦截器)在Action调用之前或之后做点事情

ValueStack各个组件共享数据的容器

Tags特有的页面标签

Action和Result原理返回Struts目录

Result—StreamResult:

功能:

用于输出二进制数据信息

需要注入的参数:

inputName--是个字符串(OGNL表达式),通过该表达式可以在vs中获取一个输入流对象,streamResult就是从这个输入流中读取要四输出的数据

--分页-->

iftest="%{page==1}">已经是第一页

if>

choose>

whentest="${page>1}">

page=1">第一页

page=${page-1}">上一页

when>

otherwise>

上一页

otherwise>

choose>

forEachvar="p"begin="1"end="${page+1}">

choose>

whentest="${ptotalPages}">

when>

whentest="${page==p}">

page=${p}"class="current_page">${p}

when>

otherwise>

page=${p}">${p}

otherwise>

choose>

forEach>

choose>

whentest="${page

page=${page+1}">下一页

page=${totalPages}">最后一页

when>

choose>

iftest="%{page==totalPages}">这是最后一页

if>

propertyvalue="totalRows"/>条记录

propertyvalue="totalPages"/>页

当前第

propertyvalue="page"/>页

拦截器返回Struts目录

1.什么是拦截器组件,拦截器组件的作用

2.拦截器组件原理

3.拦截器组件的使用

1)自定拦截器组件

2)使用struts2框架的拦截器组件

Hibernate返回主目录

Hibernate

第一课

知识点:

hibernate基本原理

为什么使用hibernate?

ahibernate属于M,跟jdbc干同样的事,都是对

数据库的操作

bhibernate是对jdbc的封装,底层依然是jdbc

chibernate是ORM框架,O--->Object(实体类对象)

R--->Relational(表)M--->Mapping(映射)

hibernate就是用面向对象的方式,来操作数据库

简化程序员的开发

dhibernate也叫持久层框架

e市场上能占到40%左右

fhibernate因为底层封装jdbc,性能稍弱

简要介绍一下hibernate3.2文件

doc:

hibernate3.2的说明文档,包含hibernate的

Api(全英文版)

eg:

hibernate官方提供的案例,包含

User.hbm.xml(映射文件:

实体类跟数据库表关联

桥梁)

etc:

hibernate中所有的配置,其中最重要

hibernate.cfg.xml(hibernate核心配置文件,hibernate

运行必要的文件),包括一些缓存文件ehcache.xml

)lib:

跟hibernate有关所有的第3方jar

)src:

hibernate所有的源代码,开源框架

)hibernate3.jar:

hibernate核心jar

归纳hibernate特点:

简单(对于程序员)

开源

orm框架,持久层(M)框架

可以兼容现在所有主流的数据库

完全面向对象

性能不好

3使用hibernate的步骤

导入jar:

hibernate_lib

导入核心配置文件:

hibernate.cfg.xml,连接到数据库

创建Po类以及修改orm映射文件

把orm映射文件,加载到hibernate.cfg.xml中

使用hibernate的Api操作

案例:

使用hibernate来创建一张表

t_user

主键

idnameagepwd

User.hbm.xml(ORM映射文件)

classUser{

privateintid;

privateStringname;

privateintage;

privateStringpwd;

//get、set

}

po类的属性,必须跟要创建的表的列一致

4hibernate核心

hibernate.cfg.xml:

a连接数据库:

Driver,url,用户名,密码

dialect(方言):

通过配置方言可以帮我们操作

任何数据库,底层对数据库的操作的sql语句,

会自动转化对应数据库的sql

bhibernate自身的属性:

show_sql:

把hibernate底层执行jdbc的sql语句,

打印控制台上,使用hibernate必须配置该属性

c配置ORM映射文件:

hibernate执行的时候,会

读取hibernate.cfg.xml文件,只有把orm映射文件

配置到hibernate.cfg.xml,才能加载到hibernate当中

ORM映射文件(注意看提示):

po类跟数据库中表,之间映射的桥梁

//hibernate当中默认主键最重要

//generator:

主键生成策略

identity:

每次添加新的数据,主键自动加1

--配置一般属性信息-->

Configuration

读取配置文件

hibernate.cfg.xml(核心配置文件)

xxx.hbm.xml(映射文件)

hibernate程序只要一启动,立刻就会调用

Configuration读取文件

SessionFactory

重量级对象(资源):

大量侵占内存资源,功能强大

创建Session(SessionFactory是产生

Session的工厂)

b)管理hibernate二级缓存(以后讲)

c)一个项目对应/一个数据库中对应一个

SessionFactory,生命周期很长,跟整个

系统生命周期一致

5)Session:

Hibernate当中最核心的(功能)类,hibernate对

数据库中都依赖Session来实现的

Session:

可以实现增删查改

session的生命周期较短,代表一个用户对

数据库访问的一个连接

c)每次对数据库的操作都要使用session,(最好

能把session跟当前访问用户绑定在一起)

6)Transaction:

hibernate中管理事务:

Hibernate的事务是手动提交的,必须要开启事务,并提交才可以改变表中的数据

jdbc自动的提交事务

4使用hibernate来实现增删查改

load跟get

load去数据库查询一个不存在的数据,会

直接抛出一个异常(ObjectNotFoundException)

get去数据库查询一个不存在的数据,会返回

一个null值

b)load方法支持延迟加载,当访问该对象的

属性,才发出sql对数据库查询

get方法不支持延迟加载,使用get方法立刻

发出sql语句,去数据库中查询

延迟加载:

需要才发出sql,去数据库中查询

hibernate底层怎么实现延迟加载的/load返回对象

是什么类型的?

Empemp=(Emp)session.load(Emp.class,1);

load返回的对象,不是emp对象,没有去数据库中

真实查询,所以没有发出sql语句

b)load返回的是一个代理对象(代替要查询的对象

叫做代理对象),该代理对象来暂时代替emp对象

c)该代理对象是目标对象的子类对象

(该子类对象是hibernate内部自动生成,跟我们无关)

eg:

classStudentextendsPerson{}

Personperson=newStudent();

d)这是代理模式:

cglib动态代理,能提高hibernate

性能,减少对数据库的访问次数

案例:

hibernate_day01Pm

创建一张员工表

t_emp

idnameagebirthdaysalary

实现增删查改,全部使用hibernate

第二课

1.Hibernate映射类型

在hbm.xml中定义字段和属性映射时,type属性用于指定映射类型。

映射类型可以使用Java类型或者Hibernate类型。

映射类型作用是:

实现字段值和属性值相互转化。

1)Java类型(完整包名.类名)

java.lang.Integer,java.lang.String等

2)Hibernate类型(推荐)

*a.字符串string

*b.整数byte,short,integer,long

*c.浮点数float,double

*d.时间日期date,time,timestamp

*e.布尔类型

yes_no:

实现boolean属性和Y|N值的相互转化

true_false:

实现boolean属性和T|F值的相互转化

f.其它例如blob,clob,big_decimal,

big_integer

2.Hibernate主键生成方式

Hibernate在添加操作时,可以自动生成主键值,具体方式预定义了以下几种:

*1)sequence

采用序列方法生成主键值,仅适用Oracle

使用格式如下:

序列名

*2)identity

采用数据库自动增长机制生成主键值。

适用于MySQL,SQLServer数据库。

需要建表时将主键字段设置成自动增长。

*3)native

根据dialect参数自动切换成identity或sequence方式。

4)assigned

hibernate不负责生成id,需要开发者在程序中指定id值。

5)uuid

采用uuid算法生成一个id值,值类型是字符串类型

6)hillo

采用高低位算法生成一个id值,类型是数值

7)increment

先执行selectmax(id)语句获取当前ID最大值,然后加1执行insert操作。

适用于各种数据库

提示:

如果上述生成方式都不能满足需要,可以自定义主键生成器。

(参考MyGeneratorId.java)

===========================

3.Hibernate框架基本特性

1)一级缓存(Session级别)

一级缓存默认开启。

当查询某一个对象时,第一次会查询数据库,取回的对象会默认放入一级缓存,如果再使用当前session查询该对象时,会直接从缓存取出,减少了对数据库的查询。

当Session对象创建后,每个Session都有一个独立的一级缓存区,每个Session只能使用自己的缓存区,不能交叉访问。

在程序中可以利用以下方法清除缓存中的对象,释放空间。

session.evict(obj);//清除指定的obj对象

session.clear();//清除所有缓存对象

session.close();//释放session及其缓存

2)对象持久性

在使用hibernate过程中,实体对象可以具有以下三种状态:

a.临时状态

使用new构造出来的。

*b.持久状态

与session对象关联,受session管理的对象。

例如调用了load,get,save等方法后

持久状态的对象有以下特点:

--持久对象的数据状态可以与数据库同步更新。

--垃圾回收器不能回收持久对象

--持久对象存在于一级缓存中,受Session管理,由Session负责持久化操作的。

--持久对象同步更新是在session.flush时刻执行。

mit()方法在内部先调用flush方法,然后再执行事务提交动作

c.游离状态

原来是持久状态,当调用evict,clear,close后会变成游离状态

================================

Sessionsession=HibernateUtil.getSession();

Transactiontx=session.beginTransaction();

for(inti=1;i<=10000;i++){

Foofoo=newFoo();

//setter

session.save(foo);

if(i%50==0){

session.flush();//同步

session.clear();//释放缓存

}

}

mit;

HibernateUtil.closeSession(session);

==============================

3)延迟加载

a.什么是延迟加载

当使用延迟加载方法时,返回的实体对象并没有数据库数据,而是在使用对象的getter方法获取属性值时才去发送SQL操作,去数据库查询。

*b.什么操作采用加载机制

session.load()

query.iterator()

采用关联映射后,获取关联属性的getter

*c.避免出现以下异常

org.hibernate.LazyInitializationException:

couldnotinitializeproxy-noSession

原因是采用了延迟加载机制的操作,但是在加载数据前关闭了Session导致的。

d.延迟加载的好处

主要优点是降低用户操作的并发率。

e.延迟加载实现原理

hibernate框架采用动态代理技术实现了延迟加载机制。

动态代理技术指的是:

动态在内存中构建一个类型,动态的编译,然后载入类加载器使用。

Java中可以利用asm.jar,

cglib-2.1.3.jar.

asm可以动态生成一个类,动态编译。

cglib可以动态生成一个类的子类。

---------原理的过程如下---------

利用延迟加载方法返回的对象类型,是借助于cglib.jar工具动态生成的一个类型,该类型是原实体类的子类。

在动态生成的子类类型中,重写了属性的getter方法。

在重写的get方法中,会触发SQL查询操作。

publicclassFoo$$CGLIB23423

extendsFoo{

publicStringgetName(){

//检查是否已加载数据,

//没有的话,执行sql加载数据

//有的话,将name值返回

}

}

*f.session中load和get方法区别如下

--load具有延迟加载机制;get没有,是立刻加载数据

--load返回一个动态生成类型的对象;get方法返回的是实体类对象

--load查询如果没有符合条件的记录会抛出ObjectNotFoundException;get没有结果返回的是null

 

--拦截器配置-->

class="com.tarena.action.LoginInterceptorAction">

class="com.tarena.interceptor.OpenS

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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