Action的实现
意义:用来对用户请求进行处理,称为业务逻辑器,在struts.xml里面进行配置
用法:
1、首先对用户进行的请求变量(即Http请求参数),都有相应的Setter和getter方法
2、需要实现无参方法 public String execute ()
3、同时可以封装处理结果,private String tip;
对于封装的变量的输出方式,可以用
<s:property value="tip" />
Action接口和ActionSupport基类
五个标准返回字符串 ERROR LOGIN SUCCESS INPUT NONE
Action访问ServletAPI
1、Servlet API的三个接口 HttpServletRequest HttpServletResponse 和ServletContext
2、提供一个ActionContext类来访问 Servlet API
3、ServletActionContext
配置Action
package的配置
<package name="default" extends="struts-default">
这个包里面有两个属性:
name:定义这个包的名字,即如果其他的包需要用这个包,则可以用该名字来指定
extends:指定继承的包,该包为struts自己所带的包
<package name="skills" extends="default" namespace="/skill" >
该包里面指定namespace的空间,该空间的用处主要处理在同一个Web应用里面有同名的Action,则在
调用同名Action时,需要添加namespace 来限定区别
abstract属性用来定义是否为抽象包
Action的基本配置
<package>
<action name="login" class="lee.LoginAction">
</package>
Action所需要的属性,
1、name必须
2、class一般必须,
Action只是一个逻辑控制器,需要将逻辑视图和物理视图之间进行映射,通过<result .../>
进行映射
片段如下所示
<action name="login" class="lee.LoginAction">
<result/>
<result/>
</action>
<action name="login" class="lee.LoginAction">
<result/>
<result/>
</action>
使用Action的动态方法调用DMI
处理多个逻辑的Action,比如登陆和注册,两个逻辑,则需要用DMI来进行处理
DMI方法是指,表单元素的action并不是直接等于某个Action的名字,而是以如下方式来指定表单的action属性。
action="actionName!methodName"
用注册按钮为例,jsp页面中的代码
<input type="submit" value="regist" onclick="regist()">
即单机该按钮,则跳转到函数regist
functon regist()
{
//获取页面的第一个表单
targetForm = document.forms[0];
//动态修改表单的action属性
targetForm.action = "login!regist"
}
则需要在login.java里面添加regist方法即可,而登陆时则用默认的方法execute()方法。
同时,调用动态方法时,需要在配置常量时,设置struts.enable.DynamicMethodInvocation为true。