Struts2的Action

1. action的name后面可以加一个class,里面有一个execute()方法,这个方法是用来被调用的。

一旦有访问到来,首先会new一个对象出来,服务器能支持几十G的内存,所以,很多人访问问题也不大。然后就会调用对象中的execute()方法,execute有一个返回值,是一个字符串,根据这个返回值,然后来定向到底要访问哪一个。

事实上,在result后面有一个name="xxx",xxx对应的应该就是execute()方法的返回值。

默认情况下,不在action的name后面加class,也不用在result后面加name。


如果要使用action,那么要写一个java类,必须继承ActionSupport类,实现里面的execute()方法,返回一个字符常量,success,none,或者error。


2.先插一句,关于defaultaction的,就是说,如果你访问的时候啥都没有加,只是加了一个工程名+namespace,那么这个时候就没有匹配的action访问,假如你有一个action就叫做index,那么就必须按照xxx/namespace/index才能访问,除非。。。。

你可以在struts.xml文件中添加一句(在action是上面一行)<default-action-refname="index"></default-action-ref>,这样的话,在你输入的路径不正确的时候,就会直接访问default-action-ref里面的action。当然,记住,这个必须是访问了这个namespace,也就是路径应该是 xxx/namespace/才行,但是,后面可有有各种乱七八糟的action,只要没有匹配的,都会调用默认的。

这个东西有什么用呢?假如用户输入错了,还是至少还是会返回一个东西,比如主页,至少不会返回错误。还有,有些人不习惯敲完整的路径。


3.有三种方法来写action相关的类,第一种,就是直接自己写一个类,写一个execute()方法,返回一个字符串。第二种,继承Action类,里面有execute()方法。第三种,继承ActionSupport类,里面有execute()方法。

记住,以后如果要做东西,就继承ActionSupport,因为里面已经有很多实现了的好用的方法。

如果在class后面再加一个method,那么就可以不用使用execute(),如果你写一个method="test"。那么你可以在src下面写一个java类,里面加一个test()方法,就会被调用。但是记住,仍然要继承ActionSupport类,但是这个方法并不被推荐使用,可以直接忘掉,也就是说在class后面加method的方法不太可取。

更合适的一种方法是动态方法调用(DMI),就是不写method,你可以选择在web地址栏里面的输入,或者说,将链接地址更改为namespace/actionName!方法名,比如namespace为/,action名称为hello,方法为add,那么就在地址栏输入http://localhost:8080/Struts2Test/hello!add,或者说将起添加为jsp/html页面的一些链接。



4.通配符-使用通配符可以将配置量降到最低

通配符简单说来就是*的使用。

< constant name ="struts.devMode" value ="true" />

<packagename="default"namespace="/"extends="struts-default">

      <actionname="Students*"class="com.test.StudentAction"  method="{1}">

        <result>/Student{1}_success.jsp</result>

      </action>

</package>

大概的意思就是说,*代表任意的东西,假如用户在请求的时候将path输入为Studentadd,那么{1}就是add,也就是会调用com.test.StudentAction类里面的add方法,如果return"success",那么就将返回Studentadd_success.jsp页面。


更加简单的一种配置为
< constant name ="struts.devMode" value ="true" />

<packagename="default"namespace="/"extends="struts-default">

      <actionname="*_*" class="com.test.{1}Actionmethod="{2}">

        <result>/{1}_{2}_success.jsp</result>

      </action>

</package>


假如用户输入Teacher_add,那么{1}就是Teacher,{2}就是add,所以Tomcat要做的就是调用com.test.TeacherAction这个类中add方法,如果 return"success",那么就将返回Teacher_add_success.jsp页面。

就这么简单,以后,如果整个项目是约定好怎么命名的话,配置甚至可以简化成为就这么几句话。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值