SSH框架笔记文档格式.docx
- 文档编号:4555173
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:31
- 大小:33.29KB
SSH框架笔记文档格式.docx
《SSH框架笔记文档格式.docx》由会员分享,可在线阅读,更多相关《SSH框架笔记文档格式.docx(31页珍藏版)》请在冰点文库上搜索。
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.<
package>
作用是为<
action>
分组,<
struts>
标签下可有多个<
下列是对<
下属性的介绍:
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访问路径为:
8080/struts01_1/day01/welcome.action
B.<
作用是指明每个请求对应的Action类之间的对应关系,<
下可有多个<
。
下面是<
标签的属性介绍:
welcome"
表示请求的名字为welcome(即welcome.action)
2)class="
com.tarena.action.WelcomeAction"
指定了对应的Action类。
3)method="
xxx"
用于指定在对应的类中要执行的方法名,该方法的返回值必须是String类型(规定)
publicStringxxx(){......}
<
标记可以增加method="
"
属性,用来指定执行哪个方法,如果没有这个属性,默认执行execute()方法。
C.<
result>
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就是从这个输入流中读取要四输出的数据
!
--分页-->
<
divid="
pages"
>
s:
iftest="
%{page==1}"
已经是第一页<
/s:
if>
<
c:
choose>
<
whentest="
${page>
1}"
ahref="
costListfs.action?
page=1"
第一页<
/a>
<
page=${page-1}"
上一页<
/c:
when>
otherwise>
上一页
forEachvar="
p"
begin="
1"
end="
${page+1}"
${p<
page-1||p>
totalPages}"
${page==p}"
<
page=${p}"
class="
current_page"
${p}<
forEach>
${page<
page=${page+1}"
下一页<
page=${totalPages}"
最后一页<
%{page==totalPages}"
这是最后一页<
共<
propertyvalue="
totalRows"
/>
条记录
totalPages"
页
当前第<
page"
/div>
拦截器返回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类跟数据库中表,之间映射的桥梁
classname="
com.tarena.po.User"
table="
t_user"
idname="
id"
//hibernate当中默认主键最重要
//generator:
主键生成策略
identity:
每次添加新的数据,主键自动加1
generatorclass="
identity"
/generator>
/id>
--配置一般属性信息-->
propertyname="
name"
/property>
age"
pwd"
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内部自动生成,跟我们无关)
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
使用格式如下:
<
sequence"
paramname="
序列名
/param>
<
*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();
//同步
//释放缓存
}
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
--拦截器配置-->
<
interceptors>
interceptorname="
checkLogin"
class="
com.tarena.action.LoginInterceptorAction"
/interceptor>
openSessionInView"
class="
com.tarena.interceptor.OpenS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH 框架 笔记