webwork 可以处理多个请求的Action
程序员文章站
2022-07-14 17:36:10
...
可以处理多个请求的Action
默认情况下,对Action的调用请求将执行Action的execute()方法,Webwork支持一个Action处理多个请求。我们可以在Action中自定义其他方法调用,例如:
ActionClass定义为一个Web Action,通过增加 "!method"的方式支持多个请求
xwork的配置片断
当我们使用 /test.action URL的时候,调用TestAction的execute方法,当我们使用 /test!login.action URL的时候,将调用TestAction的login方法,即 actionName!method.action 这样的URL映射方式。此外login()方法也可以命名为 doLogin() 方法,即 doActionName()方法签名(do后面的第一个字母大写),调用的时候仍然是 /test!login.action URL。
特别的是,ActionSupport已经预定义了两个方法调用:
因此,我们甚至可以直接拿来使用,例如,对于很多页面来说,我们往往要提供两个Action,一个是进入该页面,一个是提交该页面,利用这种方法,我们可以只定义一个Action,进入页面的时候请求 /test!input.action, 提交页面的时候请求 /test.action,唯一需要做的就是在xwork配置里面增加一行result:
这种方式比较方便,但是有一些限制:
只有默认的DefaultActionMapper才支持“actionName!method”方式的调用,扩展的RestfulActionMapper尚不支持
验证文件采用的是 ActionClass-actionName-validation.xml的命名规则寻找验证规则定义,并不支持分别针对不同的method单独定义验证文件。
ActionClass定义为多个Web Action
我们也可以改变默认的映射规则,使得 /test.action 去不调用默认的 execute()方法,而是我们自己指定的方法:
这种方式则是将一个Action类的每个不同方法调用定义为不同的Web Action请求。但是从架构上而言,如果逻辑关系紧密的几个请求处理放入同一个Action类,那么定义为一个Web Action会比定义为多个Web Action更加能够表达出他们的逻辑关系。
不创建ActionClass直接使用Action
在Web MVC框架下面,我们应该完全屏蔽浏览器直接发起对View的请求,让浏览器只能够通过Action访问,这样才可以充分利用Action带来的种种好处,例如登陆验证,权限检查等等。对于某些特定的View页面来说,没有任何业务逻辑需要处理,这个时候仅仅为了防止浏览器直接访问View页面,也需要新建一个Action,这样未免有些浪费,因此我们可以直接使用ActionSupport:
默认情况下,对Action的调用请求将执行Action的execute()方法,Webwork支持一个Action处理多个请求。我们可以在Action中自定义其他方法调用,例如:
public class TestAction extends ActionSupport { public String execute() throws Exception { return SUCCESS; } public String login() throws Exception { return LOGIN; } }
ActionClass定义为一个Web Action,通过增加 "!method"的方式支持多个请求
xwork的配置片断
<action name="test" class="com.javaeye.action.TestAction"> <result name="success" type="freemarker">...</result> <result name="login" type="freemarker">...</result> </action>
当我们使用 /test.action URL的时候,调用TestAction的execute方法,当我们使用 /test!login.action URL的时候,将调用TestAction的login方法,即 actionName!method.action 这样的URL映射方式。此外login()方法也可以命名为 doLogin() 方法,即 doActionName()方法签名(do后面的第一个字母大写),调用的时候仍然是 /test!login.action URL。
特别的是,ActionSupport已经预定义了两个方法调用:
public String doInput() throws Exception { return INPUT; } public String doDefault() throws Exception { return SUCCESS; }
因此,我们甚至可以直接拿来使用,例如,对于很多页面来说,我们往往要提供两个Action,一个是进入该页面,一个是提交该页面,利用这种方法,我们可以只定义一个Action,进入页面的时候请求 /test!input.action, 提交页面的时候请求 /test.action,唯一需要做的就是在xwork配置里面增加一行result:
<action name="addUser" class="com.javaeye.action.AddUserAction"> <result name="success" type="chain">listUsers</result> <result name="input" type="freemarker">/addUser.ftl</result> </action>
这种方式比较方便,但是有一些限制:
只有默认的DefaultActionMapper才支持“actionName!method”方式的调用,扩展的RestfulActionMapper尚不支持
验证文件采用的是 ActionClass-actionName-validation.xml的命名规则寻找验证规则定义,并不支持分别针对不同的method单独定义验证文件。
ActionClass定义为多个Web Action
我们也可以改变默认的映射规则,使得 /test.action 去不调用默认的 execute()方法,而是我们自己指定的方法:
<action name="test" class="com.javaeye.action.TestAction"> <result name="success" type="freemarker">...</result> </action> <action name="login" class="com.javaeye.action.TestAction" method="login"> <result name="success" type="freemarker">...</result> </action>
这种方式则是将一个Action类的每个不同方法调用定义为不同的Web Action请求。但是从架构上而言,如果逻辑关系紧密的几个请求处理放入同一个Action类,那么定义为一个Web Action会比定义为多个Web Action更加能够表达出他们的逻辑关系。
不创建ActionClass直接使用Action
在Web MVC框架下面,我们应该完全屏蔽浏览器直接发起对View的请求,让浏览器只能够通过Action访问,这样才可以充分利用Action带来的种种好处,例如登陆验证,权限检查等等。对于某些特定的View页面来说,没有任何业务逻辑需要处理,这个时候仅仅为了防止浏览器直接访问View页面,也需要新建一个Action,这样未免有些浪费,因此我们可以直接使用ActionSupport:
推荐阅读
-
详解AngularJS中$http缓存以及处理多个$http请求的方法
-
promise处理多个相互依赖的异步请求(实例讲解)
-
可以使用多个jsp定制标签在JSP中达到接近servelt的处理效果
-
HTTP的GET请求RUL保留字处理方式(多个解决方案)
-
webwork 可以处理多个请求的Action
-
webwork 可以处理多个请求的Action
-
axios API 可以通过向axios传递相关配置来创建请求以及并发处理多个请求和别名请求的方式
-
《ASP.NET Core In Action》读书笔记系列三 ASP.NET Core如何处理请求的?
-
详解AngularJS中$http缓存以及处理多个$http请求的方法
-
iOS学习笔记 -- 多个网络请求的处理