该用户从未签到
|
0 R. J9 X j' r8 N0 U9 w" ^+ r ]) b
SSH分别是指:struts,spring,hibernate
* d8 L3 s0 y% K" P) o& u$ ~
+ ]$ ^8 n4 P2 m0 a6 ^' @下面是SSH三部分简单主要的知识点:1 o+ O* g* ?& v4 A- |7 \6 G
6 W- H- [& q, q8 |# A+ O5 x
Sturts:
; N0 C8 u* A( N+ ~8 D* P
- C( \9 k7 T" h5 ~2 jexecute :
! x' N( y" `3 \ execute()方法相当于main()方法,有三种创建模式 : 7 O2 N3 P3 @% S# c: ^- O/ F7 Z6 y
( ], N1 T$ N4 k8 P; O7 a 1 自定义类,类里面不能写main()方法,写个execute方法,返回值为一个字符串,和struts.xml里面的<result name="字符串">对应就行2 ~! n# r9 _ j9 M( L8 ^+ L- \
public String execute() {3 g- n4 n. p% }8 z6 s1 M
return "success";
1 G. `' S8 ? @1 S" H& s! J) F* M: b }
+ [, H* U' n4 Q5 z$ j A3 `
/ N6 [; C; N% i, h5 F3 y+ A 2 实现Action这个接口,并实现execute方法,这里的返回值可以是action接口里面的预定义的常量,当然,如果struts.xml里面的<result name="字符串">这里设置不是预定义里面的,这里就不能写常量,因为这几个常量是底层实现了的,别的还是要自己写字符串,和xml对应上
, J2 ?, L G. z: g. } public String execute() throws Exception {
/ ]3 C0 K. F7 i! { W6 ]' q return SUCCESS;//写成 SUCCESS常量也可以) A( t$ X1 D9 e# c2 G E& Q
}
4 p. a3 W7 M+ S C1 i5 ]5 S& g6 o5 |+ T) A% [& Y
3 推荐 : 继承ActionSupport这个类,并覆写execute方法,和第一种的写法一样,但是推荐使用这个,因为这个类写了很多方法,方便我们使用
# H& w9 S3 B0 K2 P( W- o4 ~5 h+ t public String execute() throws Exception {
/ g" `) d0 ]" Y( n9 s& B2 w return "success";$ D; z$ p( q: I- |2 P8 h
}5 K7 c7 ?# j, o, [/ T! l
$ R% ~% t& f1 b7 B" G7 N1 X//充血 贫血 模型 :4 c/ J9 A+ ?! e G( |& {+ Q% \
把增删改查的方法写在实体类里面,就是充血模型) l, k1 K5 @' Q+ h! b
不写在这里面,就是贫血模型2 x' t5 ?+ s) D5 _7 {0 b+ O' a
pojo:就是一个实体类
( V F; Q& |( W: H4 C, A0 {3 E( s- R j" R2 w" S& l8 C) c& @& G8 t
N8 q. C4 @% ]% n1 I t1 j. F% _' N; F
: u; \- Y5 N4 X8 N$ l9 ^1 x
1 p5 _/ @5 ~- @
//拦截器调用 : 调用拦截器8 u' a) g& y. s4 u8 Z, c
, K* i2 H& q$ q 先从最近的模块找 模块(包:com.jaovo...xx).xml ---> struts.xml ---> default.xml ---> web.xml;
# K7 l0 Z5 r1 C* ? 一直到找到,都找不到就报错
& X1 n+ N7 }5 A8 h
, x( z2 T1 x, I) S( ?//后台设置的东西,在Action中设置request和httprequest的区别
. @- W6 P# ]+ s" q9 ]( b! K" t9 h
<!-- $ X$ i9 g3 r3 O
后台设置的东西,在Action中设置request和httprequest的区别
6 ^- S- P3 |0 o 在前台通过request,session,aplication可以去得到; ^/ Q0 B7 s! l. l
在后台设置的request全部复制到了HttpRequest中去
- A" g, V/ _* R1 z; y5 Y& I$ O. Q. w jsp页面中的是HttpRequest(request)5 p) A1 u( V$ z) y4 F' Q0 F, Q4 k2 j
-->
/ L; W- l+ _6 y# ]9 H- j" V2 K# b <s:property value="#request.request_"/> | <%=request.getAttribute("request_") %>//前者是获得Action里面的 后者是获得request里面的(原生)
' `& d! \+ T$ i1 J" ^* T; z% E8 @6 \7 y k2 k X9 }
$ {, P& m, g- ^request : //每次请求,都会创建一个新的request对象1 F ]' C; t9 B) Q
# l" }# D7 n6 }5 `session : //只要在同一个浏览器,就只创建一次,作用域是整个浏览器,关闭浏览器,session也随之消失,如果没有,就会创建,如果有,就不会创建
3 O0 I# Y4 {7 r% J/ B i& L9 @2 S, {: f9 e
application : //只创建一次,可以跨浏览器使用,如果没有就会创建,如果有就不会创建+ O3 z, Z* D" s) M2 D H% m
8 |0 S+ N4 ?% N3 z7 @( Y! C/ E3 L, B: z# O
Spring:
4 q/ g' f% x. _0 L5 z) z
( o6 A* D1 A; p5 S& }/ X" x r& \# d1 n+ q; X( v& s& L
1 控制反转 IOC : 控制类的实例化,以及他们的调用关系
. ^) h0 M2 q- f2 e; C 2 动态代理 AOP : 主要是事务机制的控制
* x, E$ q$ ]: y( a: _( p) q7 T' b. P( A6 m1 b: C
四种方式读取属性 四种读取属性的方式:
5 d ~: \' {9 |, m2 T( c+ r; n 1 DOM : //把所有属性都弄到文档对象中,全部读取 一个报错,全部不读取& @) Z: B. v& R9 k; F% G% o6 Q! R
2 JDOM : //把所有属性都弄到文档对象中,全部读取 一个报错,全部不读取: Q7 L# m& e6 K& _+ L
3 DOM4J : //把所有属性都弄到文档对象中,全部读取 一个报错,全部不读取3 a) h" p7 u8 R' |' r
4 SAX : //用IO流,一个一个读取,读取一个,放进去一个 哪里报错,报错处往后就不读取,前面读取7 Y; [: B* g6 j$ x& M& e ]7 L
! x% ]' I. R; R' P, A DOM : == Document Object Model : 文档对象模型
) _/ x* f) B" Y1 g SAX : 基于事件和流的方式解析xml( ?7 k4 A3 g0 Z. R% w
sax,DOM : 这两种已经加入java的核心包,不再需要第三方宝" f8 v7 P0 b. X0 J& J: h
JDOM : 是DOM的一种增强版本" L" [# V/ j' u/ V
DOM4J : JDOM的一个子项目
; q9 }3 Y2 H0 D4 J* r
+ h5 B! I7 H7 g- q//解析XML文件,解析XML文件的方式都大同小异 : D# f J7 f6 Y. D; T( ~. f! f7 j
1 t `, V: y6 I b% Q6 k 1 获得根节点
! ~5 h, f8 \. B# H* W. `% B, T. p 2 遍历根节点里面的子节点
" Q" d3 a* i, K* J' o7 q# a | 3 获取子节点里面的属性
" Z7 i8 H# i2 J; G6 t% d 4 遍历节点里面的内部(子节点)节点6 ^! q1 g' D. X1 N5 Y; d: q0 b
& G# f/ z" y# [+ ]" N
0 q2 c, o: }) t M& J3 p9 X0 T- t/ W3 e0 n: j, [4 z
Hibernate:4 l" t' ?, I9 n6 h% a- o& i) y4 Y: [
9 D' v; V0 `! g7 J B$ j操作数据库7步骤 : , F. C0 @( b: K5 b% ]0 }' |; l
1 创建一个SessionFactory对象
0 e' ^( I0 m7 `$ M+ ~. \ 2 创建Session对象
6 m$ f! B+ S- _3 L 3 开启事务Transaction : hibernate中,然后数据库操作,都必须是事务的,哪怕是查询. s- h6 s+ F! Y9 i H! O
4 执行数据保存操作(必须提交,才会执行对应的操作方法)7 l2 E% J1 w, i
5 提交事务
3 V( `) x# G% B" b: C 6 关闭Session
4 q/ T) L, A) t6 V* {, [ session.close();
. M$ c8 g9 J" x) t- B getCurrentSession();不需要手动关闭,opensession需要手动关闭% K+ E( X, _# Z& `, |$ D- M: H
7 关闭SessionFactory对象
, I U @5 @/ j* y: F6 y! V( c* j//三种状态 : & A# i4 c% q2 ]# L
1 g8 L7 ~6 g/ l% |& M, F
瞬时状态(临时状态)--->持久状态(保存到数据库)--->游离状态(保存完成后关闭session对象 (session.close()))8 C+ ]# Z: W$ _7 Q
4 j) O6 B; r% \4 [1 Q- J( b //三种状态的区分关键在于 s4 s5 M8 _, D1 R$ l* O* m! _2 x
1 有没有ID8 [' c1 @) k3 K. w. r
2 ID在数据库中有没有& A% Y& C) B6 f6 U
3 内存中有没有(session缓存)0 g8 [( L' V# N* A
, o- \" N' j, O7 l3 d J0 @1 [ Transient : # o3 z. S' s6 Z9 f/ c$ A
& a% f1 G' P# c4 O" \ Transient(瞬时状态) : 内存中一个实体类对象,没有ID,缓存中也没有
$ L! [1 B& J5 v" m //实例化实体类的时候,就是瞬时状态
# Y1 \6 c2 }4 H& i$ Z# g* S: G$ l, ~1 V l/ C, i* j
Persistent : ' x+ K. R W. s0 p5 \* K
2 G! ?2 A+ g: V/ Y. N# U* T
Persistent(持久状态) : 内存中有,缓存中有,数据库中有(ID)2 H X+ O& F0 h4 ~! ~
//保存到数据库中,就是持久状态
0 |: m& ~: J$ k* j0 x0 U
& Z. W7 M" x; i7 w5 } Detached :
7 r2 a8 i8 Q5 y( u" `; B: Q0 @& u: Z, ~
Detached(游离状态) : 内存有,缓存没有,数据库有,ID
- ]& H9 J+ E: m3 s) h1 N4 f //关闭session对象之后(session.close()),就是游离状态+ [5 A @8 W r6 _( S. a# ^
A. J% K7 J& a3 I9 T7 H //这三种状态需要关注的问题是在该状态下,如果进行数据库操作会发生什么结果,比如改变属性的值会不会发出update语句( V2 Y2 Y P) x
" ?# a: s* p* {
瞬时状态 : 不会发出update语句
8 Q) z, w4 g; |1 V# Z7 T; Z Q 持久状态 和 游离状态 都会发出update语句
; u" t! X1 G! a$ K% Q% m. S. h2 {0 @2 d, q! r
|
|