我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > Struts2框架基本使用、分享一个小demo
总共48086条微博

动态微博

查看: 1895|回复: 1

Struts2框架基本使用、分享一个小demo

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-05-17 10:45:10 |只看该作者 |倒序浏览
1. 前言
" Z  s( o/ r& A% c) N. J  1)为什么要学习struts框架
' B1 ^% C, N- m5 Y/ t* H3 w     Struts框架是MVC设计模式的实现,基于Struts开发可以简化开发难度,提高开发效率。
9 ?) y$ u) L* h% b5 J; d) ^7 Z  2)如何学习Struts框架( }+ p- \9 q3 {4 R( v. z
     先掌握Struts框架的使用,有余力可以了解下实现原理。
, h) H& {4 r* \  ~: w2. MVC在javaWeb程序的使用9 a" ]) m, j* Z+ h
   * 1) 什么是MVC?( W7 O# n7 A3 B+ k
       MVC是一种设计思想,根据职责不同将程序中的组件分成以下3个部分。8 B, n5 T5 |& ^; ?# c  S
       V(View视图):负责与用户交互。将数据展现,或者是接收数据
8 d( V4 T& }; z" z( W       M(Model模型):负责业务处理。业务模型,数据模型! r6 G3 {  u6 S/ y( ?
       C(Controller控制器):负责协同模型和视图工作。视图有请求调用模型处理,模型处理完毕调用视图响应。4 V/ P# X- w3 a4 E$ `
     2)为什么使用MVC?
  M4 l# z0 n$ n. a7 o  H- Q7 t) B      MVC是一个非常优秀的设计思想,基于该思想架构程序,可以提高程序的结构灵活性,便于日后维护、扩展和升级。
. y7 ^, Q7 M4 @! ]0 Q: q     3)MVC在JavaWeb中的实现8 ~% R$ ^$ L4 Y1 \9 S4 u
       Servlet,JSP,Filter,JDBC
* v1 R1 V3 K. y4 u: g       a.原ShoppingCart程序就是一个MVC结构实现
- z3 F( ^6 v4 {# M: s View实现部分:采用JSP组件实现9 |! q* y% z3 w9 g0 N0 o% y' Y
Model实现部分:采用DAO、Entity等组件实现
$ l' k! t7 b5 ~8 F Controller实现部分:采用ActionServlet组件实现
9 G# o' }. A/ a5 X$ v+ b' _* U1 X" z       b.ShoppingCart程序虽然基于MVC,但结构还有一些问题
* Y+ _. W6 p; l2 G1 O           当请求数量比较多时,需要在Servlet中编写大量的if...else分支语句,而且Servlet代码量非常多。
+ h9 G) `/ a1 d- U           改造方案:为Servlet提供一个XML配置文件,用于定义请求和Action组件的对应关系。然后将if...else分支中的代码提取到对应的Action组件中。: M. X4 ~3 g3 A# @; e
     *4) Struts2的主要工作流程- Q5 c) B3 e( S
          a.首先客户端浏览器发送一个请求,请求到达控制器。$ L1 v% ^, u6 g0 F, H# }! z5 y
          b.控制器根据xml配置信息调用相应的Action组件! h, _  V0 ]$ I% r  w9 b: B; G, d* }
             (XML配置了请求和Action对应关系)+ o& T8 W9 h: A+ g9 Y
          c.执行Action组件业务处理,该组件可以调用DAO,Cart,Entity等组件。' \# {+ y& g2 k9 F1 n
          d.控制器调用JSP视图组件生成一个响应界面给浏览器
- }/ C8 V) C# C, w; x3.Struts2框架的历史
7 Y- R* h4 L' q$ p- ]9 W    Struts2框架和Struts1没有必然联系,它是将原来的WebWork框架核心部分Xwork提取,进行封装后发布为Struts2。0 ^$ y; b0 c0 `$ b
*4.Struts2框架基本使用$ {2 o) f' o$ T* p% s7 y
    *1)Struts2使用步骤2 ]( J7 k9 w% V; A) n) q8 [
        *a.下载发布包,将核心包导入web工程
" \* b5 i  Y% @( s* A4 ?               struts2-core-2.1.8.jar:Struts2核心包7 f& N8 |  ^+ S% _8 T2 o: k* t
               xwork-core-2.1.6.jar : Xwork核心包6 Z' M# J* B# {. g8 V
               ognl-2.7.3.jar :OGNL技术工具包,与EL相似,但比EL强大。+ T8 {; {$ A4 ]+ j) u. g
               freemarker-2.3.15.jar:界面模板技术,与JSP相似。
' J1 v% E' W/ Z( |               commons-fileupload-1.2.1.jar :文件上传包。' C- Q; X8 V5 o& O1 E! _" Y4 i( X4 ~
        *b.配置Struts2控制器,在src下添加struts.xml、
+ R/ `: O: `8 k2 C5 M* C0 i* I          Struts2控制器采用的是StrutsPrepareAndExecuteFilter组件实现。. s- @1 n1 A3 o3 n9 m
          在web.xml文件中配置该Filter组件。1 j7 E' m! s' F1 `
          c.根据请求编写Action,DAO,Entity等组件* i, }+ e4 ^( m/ z7 V& ?
    *2)HelloWord示例
) ~0 W4 a* k7 e8 z8 k) L         welcome.action-->struts2控制器-->WelcomeAction-->welcome.jsp& i& D  A/ I* k$ r" S
----------------------Struts2详细工作流程---------------------------# j% A: H8 c7 g# R
         a.浏览器发出welcome.action请求
4 n0 A( S% N% c& |, i% L! B         b.请求到达Struts的Filter控制器(由于web.xml配置)
5 R2 d! }3 E, q# O6 O& N         c.Struts控制器判断请求类型,如果是/welcome.action或/welcome格式请求,将调用struts.xml配置,寻找对应的Action组件
+ N% _; F! i5 [6 L         d.调用Action组件的execute方法处理请求,最后返回一个String视图标识
2 w+ N) o4 q" y0 N$ Y& I6 i$ E         e.Struts控制器根据视图标识寻找相应的JSP(struts.xml中result配置)
6 r3 K, x& S! K8 w, q1 Q$ [         f.调用JSP视图生成响应界面给浏览器显示。: ]" s  P: J( y6 T/ p2 Z6 O

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


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

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

沙发
发表于 2014-05-17 10:49:18 |只看该作者
  1. package tarena.action;
    $ G: L: P- z; c) F' p

  2. 1 @% {* A% }1 D4 `. T& J
  3. public class WelcomeAction {! d2 o3 W% F8 k* D8 P7 o9 f) H
  4.         private String name;//可以向JSP传值
    & M. v  T/ \' E7 Q$ X7 ~, C4 o) b
  5.         private String user;//可以自动接收请求参数
    ) {8 {/ \/ [, j0 Z
  6.         6 x, |( [0 p6 M* _- a$ V
  7.         public String getUser() {
      V1 D2 D# S6 O/ F5 ?& D8 ]8 e
  8.                 return user;
    * R/ u! y, q4 u: w8 x5 e
  9.         }3 ^4 G' f& h# J7 E0 J
  10. 8 Y3 w0 r8 T, s& S/ J* U) q& G

  11. 3 x: C! Q. P2 Q3 }8 T
  12.         public void setUser(String user) {
    5 v& d) G, b; H, D' c
  13.                 this.user = user;6 ]+ \/ F. |- Q% |
  14.         }! E$ ~+ \0 X, M) t, v6 b: n- p
  15. $ c/ C7 y4 F# S, g  W4 N5 R; z5 U
  16. 8 W7 O4 ?6 \! x- p; h( z
  17.         public String getName() {+ \  k+ d' R+ @# \. j, x
  18.                 return name;7 h% m" s2 ?$ }+ Q9 Y
  19.         }  ?4 [( W& G. j) V: ?$ M
  20. $ m+ ?. v% _0 A2 `; I" i

  21. 4 O$ c6 {; W' n9 Z% S
  22.         public void setName(String name) {& r- o% a$ q/ K. O' M
  23.                 this.name = name;
    * v' k; Y% p- L, F
  24.         }
    / l" Z9 ^* L" l
  25. - o1 V# m1 H* q

  26. 6 j% u% W/ k% H- D  h
  27.         /**2 C& I' }* }8 j& z( H, {6 c( D# v
  28.          * 控制器默认执行该方法
    $ H/ p0 j: M$ ^$ \0 Y+ I
  29.          * @return 视图标识符# a6 g+ \8 f; s- Q; K! ?
  30.          */
    % }; |# Q8 D7 U) [+ y
  31.         public String execute(){  @, D+ u6 D" T! n6 p
  32.                 if("monster".equals(user)){
    ! p7 u. Q& y4 [$ B% a" j5 T
  33.                         //返回到nameform.jsp
    ; d+ A2 @) ]2 H6 F1 o$ c
  34.                         return "self";+ C# U) O2 l% F$ r) V  p& f  s
  35.                 }else{
    + Z. `; v$ n1 G( L3 N# V
  36.                         name = "张三丰";
    $ t9 M4 U  u6 K- c5 ]
  37.                         return "success";//进入welcome.jsp1 c8 L% e, M# ]
  38.                 }7 a/ P& `4 T" t% D( m
  39.         }/ W2 J! F9 ]/ u; K1 G9 ~, d
  40. }
    ) P+ k- ~. o8 U% j8 \0 r/ _
复制代码
0 p: K5 Z- \1 z, ?  u' g0 w" P1 V
struts.xml 配置文件:
; z* A+ j' f5 Q% I

  1. " e  j0 u' u9 }, _5 Z
  2. <p> </p><p><struts>
    " \8 D* A  y) U: r+ T
  3. <!-- name属性指定一个package名,$ D0 L  F, E, D; s7 Z8 b. d
  4. extends属性指定从哪个package继承过来 -->& J) M0 h' n, Z1 Z& }0 r- j
  5. <package name="demo1" extends="struts-default">
    5 S7 o8 v, {: r+ _6 T; T& r
  6.   <!-- name属性指定请求名
    + `) Q# J( b8 ]" D. h; D
  7.    class属性指定Action类 -->
      u& V4 @4 t- K7 H; W( L% y
  8.   <action name="welcome" # ]6 c& f" H# n  g
  9.    class="action.WelcomeAction">
    4 V- Q2 |2 p9 q! _8 w! F
  10.    <!-- 根据action返回的视图标识调用JSP视图响应 -->! t% ~+ y7 O2 r! [  ~4 Q5 d
  11.    <result name="success">/WEB-INF/welcome.jsp</result># B$ h/ W* n' S( y: k
  12.    <result name="self">/WEB-INF/nameform.jsp</result>  j. m4 u& z$ Z: b* n% K
  13.   </action>7 l* G. ]3 ?, b/ b  Q% w; ~
  14.   <!-- 进入nameform.jsp,9 F* f5 P( T# N1 a4 d
  15.    不指定class属性时,调用默认Action,: L' @* n0 z" a. L& m. [
  16.    返回"success"标识 -->
    5 c* u: m: p) K7 ^* r3 L% E
  17.   <action name="nameform" >
    4 O  \7 n- O! S# ]$ u. Y- B
  18.    <!-- name属性不写,默认值为success -->+ u# @$ {2 i% q. p
  19.    <result>/WEB-INF/nameform.jsp</result>
    + F6 b* I* z7 V; E! F; c
  20.   </action>
    : Y$ Q! D3 g% t5 c
  21. </package>
    & t& P2 Q+ X' P: K. ], K0 l
  22. </struts></p>
复制代码
- {$ a$ z& \2 P# d
1 m7 @+ F& p9 Y. g8 M
回复

使用道具 举报

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

   

关闭

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

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