Struts2基础(二):Struts2的配置文件,package,action,result

1.Struts2的配置文件

           Struts2启动的时候加载了3个配置文件:struts.xml     struts-default.xml      struts-plugin.xml

           (1).struts.xml和struts-default.xml用的是同一个DTD,且这两个都在classpath下面

           (2).struts-default.xml很重要,涵盖了Struts2的所有基本用法

           (3).前两者只有一份,struts-plugin.xml有很多份,有的在WEB-INF/classes,有的在lib/下面

 

2.packege

           <package name="aa" namespace="/bb" extends="struts-default">

           (1).namespace:命名空间

                      ^1.命名空间的意义:程序员开发的时候用到<package>时,通过name来定位。

                                                    用户进入时,则是通过namespcae来定位<package>,使用户操作更方便

                      ^2.如果命名空间不写,默认为"/"

           (2).extends

                      Struts2中的包具有继承机制,而struts-default.xml中基本涵盖了所有用法,所以只要继承struts-default就可以使用Struts2中定义好的很多东西,很方便

                      其中最显著的一个方便点是,struts-default.xml中的定义好的结果集我们的包就可以直接用了,结果集有:

                      dispatcher,redirect,redirectAction,httpheader,stream,chain,xslt,plainText,celocity,freemarker

 

3.action:用来处理用户请求,并且返回数据

           (1).action的写法有四种

                      ^1.最普通写法:<action name="aa" method="bb" class="XXX"></action>

                                 name:给客户用的,客户输入url通过name来查找对应的action

                                 class:action既然是处理用户请求的,肯定有逻辑在里面,写逻辑就需要一个类,这个类就在class下

                                 method:调用类中的哪个方法用这个控制

                     很多时候,我们一个action就是专门解决一个问题,其中并没有很多方法,每次写method麻烦,所以又有两种写法

                      ^2.实现Action:<action name="aa" class="XXX"></action>

                                 因为implements Action,所以自带了execute方法,所以不需要method

                      ^3.基础ActionSupport:<action name="aa" class="XXX"></action>

                                 因为继承了ActionSupport,所以只需要重写execute方法即可,所以不需要method

                      

                      ^2和^3都可以不用method,当我们不需要自定义method的时候该用什么好呢?

                                 建议用^3,因为ActionSupport里自带了很多操作,如验证器,国际化等,很方便

 

                      ^2和^3是省掉了method,因为name是要给客户查找用的,不能省,那么class可以省嘛?答案是可以的“”

                      ^4:若连class属性都没有,Struts2会根据struts-default.xml中的<default-class-ref class="XXXX.ActionSupport">去查找

           (2).总而言之,<action>的意义在于,根据用户输入的url中的内容查找对应的action标签,根据标签查找需要的class和method,运行找到的method。

                 但是运行完之后,一般method会有返回值,返回值可能需要跳转其他的action去处理其他的逻辑,或者直接跳到jsp页面展示新的东西,那么怎么处理这些返回值呢,就用到了下面的Result结果集

           (3).请求几次action就会创建几次对象,所以action创建的是原型模式,也叫多例模式

 

4.Result:结果集

           <result name="dis" type="dispatcher" >aa!bb.action</result>

           (1).name属性

                      我们知道,action处理完逻辑之后可能会返回一些结果集,而且很多时候一个action会根据不同的逻辑判断返回不同的结果集,我们怎么知道谁是谁呢?result中的name属性可以帮助我们。name里的内容就是action返回的值,如果两个一样,就配对成功。

           (2).type属性

                      既然根据name属性我们知道了对应action的哪一种返回值,一般不同返回值会有不同的后续操作。比如如果返回SUCCESS,跳转成功页面;如果返回ERROR,跳转失败页面;如果是一些自定义的可能还需要跳转其他action进行其他逻辑操作。因此,接下来怎么做,type属性可以帮助我们。type属性说明了我们应该如何操作这些action的返回值,是跳转,还是重定向,还是其他等等,而具体有哪些操作其实struts-default.xml也帮我们写好了:

                      dispatcher,redirect,redirectAction,httpheader,stream,chain,xslt,plainText,celocity,freemarker

           (3).跳转的地方

                      aa!bb.action对应<action>标签里name为aa,method为bb的action

 

至此,一套基本的输入url,然后根据其中命名空间查找对应包,根据对应name查找action标签,然后根据action标签里的class和method找到对应的方法,执行完方法,根据result中的name和返回值的比较找到对应的result,然后根据type的知道该怎么处置操作这些result,并进行操作

 

5.通配符

           <package name="pattern" namespace="/" extends="struts-default">

                      <action name="TeacherAction_*" method="{1}" class="TeacherAction">

                      </action>

           </package>

           第一个*对应{1},第二个*对应{2}

 

6.全局结果集

           当很多action都返回同一个值跳到同一个页面,则将其设为全局结果集,放在package最上面

           <global-results>

                      <result name="SUCCESS">index.jsp</result>

           </global-results>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏哥哥啊Aaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值