我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > STRUTS2新手基础学习day01
总共48086条微博

动态微博

查看: 1551|回复: 0

STRUTS2新手基础学习day01

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-03-24 10:37:35 |只看该作者 |倒序浏览
struts2% E; d4 S/ A9 ?: A2 \
1.了解Struts2发展史,与webwork框架关系1 V( U4 @2 ~3 \4 }) L& \
2.Struts2体系结构
' J. v' m. h9 @$ W+ Y+ S9 l        C控制器:FilterDisptacher(2.0,2.1版本),StrutsPrepareAndExecuteFilter(2.1.8,2.2版本)  t5 q7 y, |$ e6 d1 h" F" g. v, [
        M模型:Action:用于业务处理。(可以不用必须继承父类和实现框架接口)/ v" O$ c& j; b( a% w, u. `
                                拦截器:用于封装通用业务逻辑。8 v2 H9 x  ]$ V0 c7 J9 I. `
        V视图:Result(提供了各种类型的Result组件,用于实现不同类型的响应信息)、标签+OGNL
- M! Q2 `2 G/ q1 d  {, J3 X3.Struts2框架的配置
  Z9 i: ?) l1 I# Z        (1) struts-default.xml(jar包中自带的默认配置)
$ Z4 A9 a) n# A8 p9 g3 c8 [                配置了一些拦截器、Result组件的定义。
3 ]( w! F5 B8 s; f% d* Q* v        (2) default.properties(jar包中自带的默认配置)% {! j" K5 o& ], r( v
                配置了框架的一些系统参数,例如请求扩展名、字符编码等。
( I! L) b6 S! \7 Y7 z        (3) struts.xml(开发者创建,默认在src下创建)
6 M% L4 D& y) K5 D% i* k# T( m                用于配置Action组件、自定义拦截器组件、自定义的Result组件。
7 e/ K7 F1 G& j3 E: F        (4) struts.properties(开发者创建,默认在src下创建)
3 o1 A+ ?6 C4 I9 d8 w8 G# p                用于修改default.properties中的配置参数。# X' o2 o6 f/ B, a" v& L( K& w
4.Struts2开发入门% G2 ^: k. e/ _4 G: `
        (1)创建Web工程,引入开发包
  r8 k+ E' V4 L( {                struts2-core-2.1.8.jar
, d3 P* h' F0 }                xwork-core-2.1.6.jar% u. V0 \6 A* z& ^2 ?/ G, `
                freemarker-2.3.15.jar2 U8 F1 E2 x1 P* i9 |4 x8 W
                ognl-2.7.3.jar3 T$ I6 g( ~; Y2 }: m
                commons-fileupload-1.2.1.jar! k7 S! v3 B1 ]3 V
        (2)配置控制器,并添加struts.xml配置文件# {, r- l* v4 {% s+ K5 \5 B9 q4 i/ z
        (3)根据JSP请求编写Action组件
/ h# \, U( P( j+ D# U. d( j        (4)编写struts.xml配置
5 P5 L. g* \4 x( r% l& ?. n: g1 k5.Struts2特点( m0 ^+ ?, I# C) ?
        (1)Action摆脱了对框架API依赖,也摆脱了对ServletAPI
+ t1 e, J$ Z* ^        (2)Action可测性增强
- t. N+ N% R" k  J6 G5 M        (3)提供了各种类型的Result,可以完成各种形式的响应& |  U9 M# w3 {! f) E" `% P* b
        (4)易于扩展和整合其他技术
/ I3 }  c% t! M+ s6 K# K        (5)提供了拦截器和拦截器栈机制
- f6 x8 n6 _/ {0 ]  k* ^4 i# a) b        (6)Struts1中的Action使用了单例,Struts2是一个请求一个Action对象% E4 |; K9 q, W0 K
6.如何使用Session、Request、Application等对象6 i2 f4 U. @( x3 G& B: A5 v
        (1)Struts2对原有session、request、application做了封装,可以通过Map结构使用。使用方式如下
& s/ }+ h. B3 d" w        Map session =        ActionContext.getContext().getSession();
, ^7 ]. H+ S2 m5 @. O! I        Map application =        ActionContext.getContext().getApplication();$ {8 O+ K' M$ G/ ^1 Z/ b! o. W
        Map request =        (Map)ActionContext.getContext().get("request");
' F, n/ t  q- y' f        (2)封装原理
1 \3 o9 y2 c! e' v" C        public class SessionMap extends AbstractMap{
, Y( T6 S+ ]) @, t                HttpSession session;
, m; C0 S; y' m; ]                public SessionMap(HttpSession session){
: B" |% e% U: k- K                        this.session = session;  d4 ~6 H- k# d; Q' ^- f
                }
2 `+ a! s$ }3 _0 u. j        " k1 ]) o0 U5 \2 X6 _" S, L1 ]
                public void put(Object key,Object value){
. M! o& \5 w/ {; }. W2 k                        session.setAttribute(key.toString,value);% H# e; L  ?' m, q
                }, d. D6 x0 y; s0 o1 k
               
) z. \( ^% F3 u, Z* U                public Object get(Object key){
% x2 R) ]/ c* K9 K( A  g                        return session.getAttribute(key.toString());, L( d' o* a1 t& ~9 m9 X5 b4 u
                }2 H" X+ L* D1 L% P& b# i! V
        }
6 a6 e/ m5 O9 T+ ?       
3 q7 c( {6 _2 H. Y1 ?! c        (3)如果需要使用原有Servlet API类型,可以通过ServletActionContext获取: W3 _0 e. D: M$ ^- P8 }
        ( A3 \: [) t0 h2 {0 ]* d% D
        7.Action相关配置# H; Y- F* N* A" L) i+ T
                (1)<package>元素的namespace属性,命名空间,默认值为/
4 F: D+ U: Z! _' A- ~8 [1 R  ~                        对应请求是/工程/namespace/请求名.action% k7 v; M* S1 W, y0 I8 i2 I
                (2)<action>元素的method属性,业务方法名,默认execute4 ^- d1 g) p) O! {/ h
                        可以指定Action方法名当做业务方法。4 s) c/ }6 `7 t" W! l8 a$ Q
                (3)<param>元素
7 g' ~& ]6 N- z/ y3 O+ r7 ?                        可以为父元素对象指定属性值。: @1 z2 J+ m5 K% h$ J5 Z' N5 U
                (4)通配符*的使用4 E9 Y" L+ c  X' G$ O/ ?: H
                        在<action>元素的name属性中可以使用*,*表示任意字符+ V+ \- H) c6 o# x9 U! }4 c
                        在<action>元素的其他属性中可以使用{1}、{2}等引用通配符代表的值$ q; s" s8 i; V" x: E& p7 i3 X
        8.ValueStack作用及结构- y3 \2 {, f; l: |$ }) x
                ValueStack存储了和请求处理相关的数据。包括session、request、action等。6 o) N1 L, V. N4 Z5 {% |; @
                ValueStack包含root区和context区
5 h. |3 D* w; w1 x4 s                root区类型为CompoundRoot继承了ArrayList(栈结构),存储于请求对应的Action对象。
( M  L4 A2 M3 @7 G7 O                context区类型为Map,用于存储session、request、appliation、action、parameters等变量信息.
# x1 E  m0 W' i6 a9 W        9.ValueStack与OGNL关系
. |! l; [) F7 C9 c2 l& L: I$ o                OGNL:Object Graphic Navigation Language,对象图导航语言。
1 h2 P( f# k- A8 @                Struts2使用OGNL访问ValueStack数据,即对属性值设置和获取。
  ~% V3 Y" ~* [6 \4 u1 Q4 C1 t) A                OGNL访问ValueStack数据的方法如下:
  c" y0 F9 D2 j                访问root区属性:表达式为"属性名"
1 c& D# x# |1 W- i9 q9 N                访问context区变量:表达式为"#key",例如"#session.user"
% h+ }  W. K& {0 h% z1 T        10.Struts2提供了标签+OGNL表达式,用于访问ValueStack数据7 O  x% T$ G/ d8 J
                7 B: s: e7 |6 V  P* X$ _

$ [7 J& J; `- Y- P5 K% U

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


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

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

   

关闭

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

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