SSH框架笔记.docx
- 文档编号:2458729
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:31
- 大小:33.29KB
SSH框架笔记.docx
《SSH框架笔记.docx》由会员分享,可在线阅读,更多相关《SSH框架笔记.docx(31页珍藏版)》请在冰点文库上搜索。
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.
下面是
1)name="welcome"
表示请求的名字为welcome(即welcome.action)
2)class="com.tarena.action.WelcomeAction"
指定了对应的Action类。
3)method="xxx"
用于指定在对应的类中要执行的方法名,该方法的返回值必须是String类型(规定)
publicStringxxx(){......}
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="${p 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类跟数据库中表,之间映射的桥梁
//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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH 框架 笔记