该用户从未签到
3 g3 Y' T% {7 A* C; ^ 0 E. N' R$ n% W% _4 B
SSH分别是指:struts ,spring ,hibernate
! C* |5 }7 R! j
4 Y p/ u# B# }. t 下面是SSH三部分简单主要的知识点:
: \+ O/ d4 f1 R% ?: { o 8 {, P' e) T: E }
Sturts:( i3 o1 f$ X3 p2 N( T5 d1 Z; q
+ J9 c9 Z: F+ v+ t, A# n+ ] execute :
' N4 V3 B$ v) Y$ A execute()方法相当于main()方法,有三种创建模式 : : O/ m; a+ [: |
4 a3 |. K2 N4 A1 Z% s x 1 自定义类,类里面不能写main()方法,写个execute方法,返回值为一个字符串,和struts.xml里面的<result name="字符串">对应就行8 V+ O' n2 G; N! U8 U
public String execute() {
% H. y# m" c g5 r8 w return "success";
9 w" ^3 c$ } b: |3 Z }3 f. ]5 f- k+ q
' g p. j' i0 _) F 2 实现Action这个接口,并实现execute方法,这里的返回值可以是action接口里面的预定义的常量,当然,如果struts.xml里面的<result name="字符串">这里设置不是预定义里面的,这里就不能写常量,因为这几个常量是底层实现了的,别的还是要自己写字符串,和xml对应上( z! K# B0 d) i( U1 X1 {8 B
public String execute() throws Exception {
2 q ?' T) h- a! y! R5 i5 F return SUCCESS;//写成 SUCCESS常量也可以- H0 Q3 G% `2 }' i
}
* C: Y6 F* z- K! c 4 U5 g# Y1 h! @% j$ ?- D
3 推荐 : 继承ActionSupport这个类,并覆写execute方法,和第一种的写法一样,但是推荐使用这个,因为这个类写了很多方法,方便我们使用
) E) ^# t- n) `+ Z* ~ public String execute() throws Exception {( Y8 x$ N* w2 k
return "success";
8 L) N! Y) k; h. ~2 J1 [ }
/ V! i! b! T( F! @$ ]) v0 z$ ` : w7 m% ^8 y6 w- b# I, z
//充血 贫血 模型 :
7 |. O# s4 y/ }4 `" J* n K6 \ 把增删改查的方法写在实体类里面,就是充血模型
+ M9 P0 H7 }/ z# N# P& p/ f) z 不写在这里面,就是贫血模型5 C3 `3 d" Y+ U+ \$ m% U0 \+ z% [
pojo:就是一个实体类( G/ |6 ]( b/ @
/ U6 `. U% F0 m0 L
( g7 R1 \" Z# ?
. m9 D/ m( i1 b W : _* {: @% R# t8 K
//拦截器调用 : 调用拦截器' y* Z( Q1 [. M+ J. Y
( y6 W2 c& g. U# W3 B6 ^
先从最近的模块找 模块(包:com.jaovo...xx).xml ---> struts.xml ---> default.xml ---> web.xml;
. F C9 K% e3 G6 d( c4 \8 h 一直到找到,都找不到就报错
5 h% J: w3 d( f 0 |: ?. j M# S* S7 C- Z
//后台设置的东西,在Action中设置request和httprequest的区别
; L3 B9 ` i+ P' ?
) X4 P- C% s6 m# V* E) R <!--
% V$ u/ G" Z1 J+ a1 T' N, n* u 后台设置的东西,在Action中设置request和httprequest的区别. c9 S: s4 L: P2 l s
在前台通过request,session,aplication可以去得到- k2 \* c# ~2 S6 a% x
在后台设置的request全部复制到了HttpRequest中去
6 h+ I% p7 f8 x, h0 K jsp页面中的是HttpRequest(request)/ V& q" p, q& I2 E4 G
-->
" K i) q' d. Z/ W: V. H <s:property value="#request.request_"/> | <%=request.getAttribute("request_") %>//前者是获得Action里面的 后者是获得request里面的(原生)1 x2 F2 C: f; z3 \- T
5 ^( l9 J' u* n3 R% m E) b
4 {/ M& C# M' C, E request : //每次请求,都会创建一个新的request对象5 l+ t5 q+ A1 q4 d6 V" v
$ j. S0 P8 X# Q7 W+ u; a' D0 [ session : //只要在同一个浏览器,就只创建一次,作用域是整个浏览器,关闭浏览器,session也随之消失,如果没有,就会创建,如果有,就不会创建
& K* v4 N p* x0 t: _9 E
6 h7 j# l* |8 @ K" N application : //只创建一次,可以跨浏览器使用,如果没有就会创建,如果有就不会创建
( O" I) Q9 ~8 H3 N - R+ s& \8 n' X, t7 g$ i, D
3 ?8 P' n5 c$ A4 |( h5 \ Spring:
( V( k- k$ V/ o8 [) \
. g4 X2 f9 T% y M! b + p6 F$ V9 Q6 K
1 控制反转 IOC : 控制类的实例化,以及他们的调用关系
- Q. [, Z. r F; k* A& G. { 2 动态代理 AOP : 主要是事务机制的控制" h; g; [$ q) n
/ _3 Z1 B0 H) k
四种方式读取属性 四种读取属性的方式:
( w5 t3 y/ h9 y- l, ~; c 1 DOM : //把所有属性都弄到文档对象中,全部读取 一个报错,全部不读取
1 C0 X3 q8 ~( x# w3 {; [: j. R 2 JDOM : //把所有属性都弄到文档对象中,全部读取 一个报错,全部不读取 R2 H/ G7 J0 X6 c! u
3 DOM4J : //把所有属性都弄到文档对象中,全部读取 一个报错,全部不读取8 M: n+ E5 C! }
4 SAX : //用IO流,一个一个读取,读取一个,放进去一个 哪里报错,报错处往后就不读取,前面读取2 |' [* P* F1 N1 S, i( l( g- Y/ G; U
. Q" h& v; S; `6 V
DOM : == Document Object Model : 文档对象模型
% a# |8 b; X F% H; k7 O; O0 n SAX : 基于事件和流的方式解析xml; J' K' x# y1 }0 h% z& i
sax,DOM : 这两种已经加入java 的核心包,不再需要第三方宝. W0 S/ J" j3 I+ x$ v* t
JDOM : 是DOM的一种增强版本; B6 k9 o/ a9 ^$ ?& O) A1 M: J
DOM4J : JDOM的一个子项目
- N' W9 h9 h. |" u 9 @& P" i# c& X
//解析XML文件,解析XML文件的方式都大同小异 :
: A, |0 I+ U. _7 G9 x f+ b$ |8 A# P & V* e* o: z3 s; d e. Y
1 获得根节点
% e. P+ c1 c& M6 V1 x" b9 I1 Z( j 2 遍历根节点里面的子节点9 v, F4 c* q- Y U9 q, D& {
3 获取子节点里面的属性0 n9 d% Z1 h) G
4 遍历节点里面的内部(子节点)节点
' e1 C9 C/ l0 e' A0 o3 h $ r2 I# d _( U. [7 p
# ]$ B( ~! v- d4 ~6 x+ e/ Y
* S* @+ i' L+ a# z N7 n6 B Hibernate:
4 T0 \$ Y7 }9 D& N5 c, U" l 5 r+ D' X. o2 i+ l% X% |
操作数据库7步骤 : 8 t$ E. f+ l7 z+ V! M y. N5 }* K0 |
1 创建一个SessionFactory对象2 v/ ^: ^( r; X! I4 j5 u
2 创建Session对象
$ B+ w6 P. e! U 3 开启事务Transaction : hibernate中,然后数据库操作,都必须是事务的,哪怕是查询
@; ?/ U9 h& r; G# M. S% i 4 执行数据保存操作(必须提交,才会执行对应的操作方法)
. \! I: T K0 p' b8 i% ?( |% h' _ 5 提交事务9 V& r$ \7 s# u( D; T4 w
6 关闭Session7 r% f) ]6 V) b2 N1 g. k
session.close(); D" U# ?! l$ n8 l# d. U: i7 r
getCurrentSession();不需要手动关闭,opensession需要手动关闭; Y W! s. C# j) V. M) ?
7 关闭SessionFactory对象
. J! W4 U/ U! ~8 w' x //三种状态 : 2 ^, j( C! ?5 G: y2 W
% ]' S: Z6 l" g! V
瞬时状态(临时状态)--->持久状态(保存到数据库)--->游离状态(保存完成后关闭session对象 (session.close()))
b/ q% q( Z* O
0 K# l$ D$ M5 |! u //三种状态的区分关键在于
9 y$ E7 m( |# p& Z5 K1 k3 E/ V 1 有没有ID
1 u2 O) T" S2 `# p 2 ID在数据库中有没有
6 U$ Q8 [2 b# S- _; v" t 3 内存中有没有(session缓存)$ v: f' k2 r2 o, q7 a
$ K l* N Y2 Q$ N* z. ] Transient : 3 h/ y) b. @- }+ g" H( X3 O' F# q
' e% B: M$ N, y$ W. B9 P% ] Transient(瞬时状态) : 内存中一个实体类对象,没有ID,缓存中也没有
8 d$ z* D1 B( d" [ //实例化实体类的时候,就是瞬时状态
8 t& `. Y& B$ V) d 9 A8 v& Z% T# I
Persistent :
# N# }8 K6 E- I" J0 y, G9 P# ~$ D . z8 a# ^' O; l0 J5 `
Persistent(持久状态) : 内存中有,缓存中有,数据库中有(ID)
) }7 v3 B% G$ H' Y, {; A //保存到数据库中,就是持久状态( I- h: E7 Q- s6 X+ T
4 Q7 z% X0 h4 K" h. Q' c, t1 T3 ` Detached : / s9 l6 Q1 h- y( b; Y+ H2 O
% y1 K2 H, Z$ r9 o3 z Detached(游离状态) : 内存有,缓存没有,数据库有,ID
; ^* B4 A9 D$ i2 t! d& G //关闭session对象之后(session.close()),就是游离状态7 i6 N% L- e: \6 W8 C$ ?' C
4 K) _; T6 E+ g) P
//这三种状态需要关注的问题是在该状态下,如果进行数据库操作会发生什么结果,比如改变属性的值会不会发出update语句
* c$ M) p. [1 b `7 f% a
/ P) f/ [* H! b& a 瞬时状态 : 不会发出update语句; D# e. N1 l |- D4 F: L0 f
持久状态 和 游离状态 都会发出update语句
. b' r I0 `/ ?. k( k2 J, R! m1 G! U 2 L! w$ l3 G. {
科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关2、本站所有主题由该帖子作者发表,该帖子作者与科帮网 享有帖子相关版权3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网 的同意4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意7、科帮网 管理员和版主有权不事先通知发贴者而删除本文
JAVA爱好者①群:
JAVA爱好者②群:
JAVA爱好者③ :