我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > SSH架构图及各部分知识点
总共48087条微博

动态微博

查看: 1204|回复: 2

SSH架构图及各部分知识点

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2016-01-12 15:19:57 |只看该作者 |倒序浏览

; p! _+ D/ Z% h6 c/ j/ J. q, O! k
% @/ O, @3 U; b6 Q- tSSH分别是指:struts,spring,hibernate
1 @2 F8 Y. z5 Y- k$ {3 |1 l1 [
  {' R0 s4 `  ~, @& v: m3 J# B下面是SSH三部分简单主要的知识点:) j! s- t) b2 @4 J% I/ o: ]

0 f' k% R( w$ i0 ?2 j0 ZSturts:
" L  A" J/ N3 Q# \( `% F8 T& u' ]/ w* M2 t5 Y! K
execute :
& L; \* D' @9 ~' L3 R    execute()方法相当于main()方法,有三种创建模式 : + F, @6 T9 P" u6 ~# U
! W7 ?) h& C* Y" t
    1 自定义类,类里面不能写main()方法,写个execute方法,返回值为一个字符串,和struts.xml里面的<result name="字符串">对应就行
! ?' g0 s: s5 j: ~     public String execute() {
- T1 N& O% C! O6 q1 L7 B& u            return "success";2 M" u! v! {- h
        }
0 Z8 c& T4 ^$ [1 |7 P4 V$ z$ l6 s0 a; n# U6 s
    2 实现Action这个接口,并实现execute方法,这里的返回值可以是action接口里面的预定义的常量,当然,如果struts.xml里面的<result name="字符串">这里设置不是预定义里面的,这里就不能写常量,因为这几个常量是底层实现了的,别的还是要自己写字符串,和xml对应上- R# y  I' y9 ?, G2 V& I+ ^0 `
        public String execute() throws Exception {
1 C( G9 V/ @  x+ s, z' i            return SUCCESS;//写成 SUCCESS常量也可以& }# Z9 q8 s. [' O7 b* N$ S
    }2 o. U# F4 A  W! f$ b

- v* ]+ t5 o5 V! z( S' z- @    3 推荐 : 继承ActionSupport这个类,并覆写execute方法,和第一种的写法一样,但是推荐使用这个,因为这个类写了很多方法,方便我们使用
3 E3 a$ V4 c$ h: M2 n( {8 f        public String execute() throws Exception {* C" ]7 U, r' S: ^1 n
            return "success";) P- s0 r! E5 n1 U! \% o6 y" _/ P; `
    }! v" S$ ^$ j  P' a
3 C! E" Y0 e4 z9 ^! h& c# V
//充血 贫血 模型 :0 z8 x; N& ]8 T
     把增删改查的方法写在实体类里面,就是充血模型
& L1 D- R& W4 p9 ^  不写在这里面,就是贫血模型
; x5 V  S- s. i3 R! Q  pojo:就是一个实体类& F! `3 I) L+ O+ K( h. d# n3 t% k

) E% Y& X* n9 F" x$ @  U% S$ j6 b; `% W/ P) a

% \& B* o# K1 H. g" l! F! }5 _# v/ X) L2 |
//拦截器调用 : 调用拦截器
/ X0 A. Z4 N$ W" E9 S8 K
/ g6 I9 p! X: l' s2 h0 v    先从最近的模块找  模块(包:com.jaovo...xx).xml ---> struts.xml ---> default.xml ---> web.xml;2 G. O# G6 V3 \, `
    一直到找到,都找不到就报错$ n. Z/ ~% j8 k

. t; y. J# H" T5 K3 q; Q//后台设置的东西,在Action中设置request和httprequest的区别 * E# @8 i7 w( Y7 V' V# A  O
3 ~/ N, I4 I4 m1 a3 d. Y/ b
    <!--
3 T# ?3 i9 P, y$ |% k    后台设置的东西,在Action中设置request和httprequest的区别1 N+ a% W: L. ~% e, B; f
    在前台通过request,session,aplication可以去得到
" g( D' C9 w$ ]    在后台设置的request全部复制到了HttpRequest中去' {, O' _/ F: M- I; ~
    jsp页面中的是HttpRequest(request), O, R: j1 ?' ^' P' p! m
     -->$ Q7 m3 _2 I% r7 _7 U4 ^% q9 L# w
    <s:property value="#request.request_"/> | <%=request.getAttribute("request_") %>//前者是获得Action里面的  后者是获得request里面的(原生)
  r$ F7 \7 o6 W+ x3 O) q5 s/ e* S+ p
* K; Z, y$ G3 i: }- q* k4 b) ]1 t- X/ Q4 o9 K1 g' s' ^3 \1 }: w
request : //每次请求,都会创建一个新的request对象
. ~! g3 P* F; b, h6 O' c# O2 [0 u& D9 O  I) U: c# X5 W2 `
session : //只要在同一个浏览器,就只创建一次,作用域是整个浏览器,关闭浏览器,session也随之消失,如果没有,就会创建,如果有,就不会创建7 P. U1 N4 A" t4 {2 g
2 v" |; J0 n0 M* H3 u
application : //只创建一次,可以跨浏览器使用,如果没有就会创建,如果有就不会创建
% ]7 u+ H0 U* G3 F* C" B7 a0 d2 q+ g! q$ f' K# Q2 p% x

/ D/ ~4 U3 Y1 e) v! kSpring:
( Z! i. g6 ]; H
* ?# j( Y3 E5 A6 f. Y0 p
; X( b* k* Z) N( P( i% A& h    1 控制反转 IOC : 控制类的实例化,以及他们的调用关系5 e8 B( U7 K5 i: ~1 j
    2 动态代理 AOP : 主要是事务机制的控制
4 @6 Z0 a# y* Q6 ^: Q. K0 M' k; N: e- {- Z/ t
    四种方式读取属性 四种读取属性的方式:" u9 y/ a+ I7 R2 u3 `
    1 DOM : //把所有属性都弄到文档对象中,全部读取  一个报错,全部不读取$ M4 e) b4 u1 H0 N
    2 JDOM : //把所有属性都弄到文档对象中,全部读取  一个报错,全部不读取5 K. O8 n* K/ F) X* v
    3 DOM4J : //把所有属性都弄到文档对象中,全部读取  一个报错,全部不读取4 f% h+ y% j+ Y2 }/ ~3 z' Q! B
    4 SAX : //用IO流,一个一个读取,读取一个,放进去一个 哪里报错,报错处往后就不读取,前面读取
+ c0 {- a9 y4 s- o  x9 N1 Y7 O7 j- P4 W  Q2 I1 I
        DOM :  == Document Object Model : 文档对象模型6 \, V. [3 U! }
        SAX : 基于事件和流的方式解析xml. m! a- l1 ~9 [
        sax,DOM : 这两种已经加入java的核心包,不再需要第三方宝9 e, U1 d* R0 F5 v3 c( R
        JDOM : 是DOM的一种增强版本
6 n; C& Y7 @3 [! G        DOM4J : JDOM的一个子项目2 c3 s4 q4 ^& S: v& c9 @+ O

! }- ^4 ~6 v4 P//解析XML文件,解析XML文件的方式都大同小异 : $ u  v& }7 }. o; j+ P" @- ]7 j3 o
- U& ?6 H: u) L2 [  W: ~/ J: `6 ~1 P, L
        1 获得根节点
. a6 `% k5 T$ X2 A2 R) {6 j        2 遍历根节点里面的子节点) T- u; }& Z! [  K0 o3 j
        3 获取子节点里面的属性; i+ ]) j$ Z" W4 s- N' p
        4 遍历节点里面的内部(子节点)节点
* o9 Q% j$ ~7 Y# p1 x
) _( b8 H7 z4 S1 Q! S) c
/ J( Q0 l, r' N6 {6 X. p1 L
: n' p6 N1 H; G2 s! Y3 o- @: cHibernate:
3 ]. Y" }5 z: V( ~  T8 f% @1 O
. v  W- Y' Q& @' w/ [操作数据库7步骤 : & O7 W. c& |1 Z/ M4 K
        1 创建一个SessionFactory对象
6 L) d) _3 k) }& |7 F        2 创建Session对象" [, X" @8 N; `" P% U: o" r
        3 开启事务Transaction : hibernate中,然后数据库操作,都必须是事务的,哪怕是查询, ^5 o% f0 L' e% ?: T( R3 ?/ g
        4 执行数据保存操作(必须提交,才会执行对应的操作方法)
, n; h. ^0 v# W! P+ g2 f3 S2 a        5 提交事务/ i4 W. |9 J+ r& Y
        6 关闭Session
8 J5 E3 q7 Z5 {4 \* n; W# H" t$ \% M                session.close();
8 M# }% _! k/ ]) Q( M7 n$ }- ?7 J                getCurrentSession();不需要手动关闭,opensession需要手动关闭
" I0 B' |+ z1 X; o1 o+ O        7 关闭SessionFactory对象
6 b4 J  ]( N% z7 _//三种状态 :
; l% T, x9 C1 L0 s
9 a1 K$ C  ?0 U/ @5 T2 ^3 k+ F        瞬时状态(临时状态)--->持久状态(保存到数据库)--->游离状态(保存完成后关闭session对象 (session.close()))
; \, F$ u- o( `4 h& r2 B
  l0 ]; v2 t2 G" A    //三种状态的区分关键在于
5 a4 _6 i5 n. U7 d4 S        1 有没有ID
5 A5 a( L, z( w  p+ N        2 ID在数据库中有没有( n. `6 ?$ H7 n7 ?
        3 内存中有没有(session缓存)
1 X- \& ?) _- c2 ?( _0 z% T0 O( i) N. M7 ]
Transient :
! ], ]8 n+ u0 ^& r2 a4 _0 X, e* g$ o1 Q# a7 b* `0 ^
    Transient(瞬时状态) : 内存中一个实体类对象,没有ID,缓存中也没有' A4 {' p/ V& L. L8 |# u( z; w5 h: T
    //实例化实体类的时候,就是瞬时状态* X% _6 `" t& z0 s1 W1 g
- \3 n8 C/ T& O" X' I" M: l
Persistent :
- q/ n4 z  m0 ^/ B% _+ i0 m  F1 R& G1 p# t3 X
    Persistent(持久状态) : 内存中有,缓存中有,数据库中有(ID)
' u% i! ?# [* y    //保存到数据库中,就是持久状态
; p. n8 _+ P! d6 o" L6 v- t; }, }  r8 k4 I- h" g, s
Detached : % m5 `" q( R, H& c3 c
# ^& f- r" s9 `( m( ~  q9 D
    Detached(游离状态) : 内存有,缓存没有,数据库有,ID
% D: D# L4 C0 B- F, Q    //关闭session对象之后(session.close()),就是游离状态
; F2 w1 B/ B  P! R: z; G- v7 O
: R% Q! [7 ]9 H; p: b" x' a# q8 J    //这三种状态需要关注的问题是在该状态下,如果进行数据库操作会发生什么结果,比如改变属性的值会不会发出update语句
) \0 w/ f5 p. [; w4 Z# q, S5 k5 g
! V* U0 j7 k4 y1 R8 a1 u9 a9 N        瞬时状态 : 不会发出update语句! ]; j8 {8 m6 c# V. H
        持久状态 和 游离状态 都会发出update语句
2 ?; K* \& l! J3 L) ^4 e! W
( A* ^3 `+ @) K

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

10

主题

3

听众

1289

金钱

五袋长老

该用户从未签到

沙发
发表于 2016-03-17 00:22:53 |只看该作者
很不错,讲得清晰,
回复

使用道具 举报

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表