这章,将要对struts2中的Action作一个简单的介绍。
相对struts1而言,struts2采用了低侵入的设计,struts2中不要求Action继承任何struts2中的基类,或者实现其它接口。在这种设计的方式下,struts2中的Action就相当于一个POJO,从而降低了Action的耦合性以及提高了Action的复用性。
和struts1的又一比较大的区别是,struts2中已经取消了ActionForm,所有用户请求的参数改成都封装在对应的Action中,如:
[color=blue]public class LoginAction {
private String userName;
public String getUserName() {
return userName;
}
…
}[/color]
如上,封装了userName属性,但注意:封装属性的同时,必须要提供set方法struts2是通过对应的set方法来处理这些参数的,而不是通过参数名来处理的
Struts2中的Action不仅可以封装请求的参数,还可以封装处理后的参数。如:
[align=center][color=blue]private String tip;
public void setTip(String tip) {
this.ti= tip;
}[/color][/align]
在Action的处理中,设置tip的值,则在处理后的视图中,则可显示该处理结果,如:
[align=center][color=blue]<s:property value=”tip”/>[/color][/align]
为了让用户的开发更加规范,struts2中提供了Action接口和ActionSupport基类,其中ActionSupport是个Action默认实现类,它提供了许多默认的实现方法。Action是个接口,具体代码如下:
[color=blue]package com.opensymphony.xwork2;
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}[/color]
注意Action中的几个常量,对已后Action更深一步的认识有帮助.
有人也许会问,既然Action中类似一个POJO,那以后要直接用到Servlet API,如HttpServletRequest和ServletContext等这么办呢?
没关系,Struts2中提供了两种解决方法,第一种就是使用struts2提供的工具类-ServletActionContext。它提供了一些列静态方法,可以直接获得Servlet API,如
HttpServletRequest和ServletContext的对象,即:
[color=blue]ServletActionContext .getServletContext()
ServletActionContext. GetResponse()
ServletActionContext.GetRequest()
ServletActionContext. getPageContext()[/color]
第二种方法即是实现struts2中对应的几个接口:
[color=blue]ServletContextAware、ServletResponseAware、ServletRequestAware[/color]等。
如一个Action实现ServletContextAware,则必须实现如下方法:
[color=blue]Public void setServletResponse(HttpServletResponse response);[/color]
其它与此类似
其实,struts2还提供了一个非常实用的类,即跟踪Action的上下文的类ActionContext,具体下章再作详细的解释。
相对struts1而言,struts2采用了低侵入的设计,struts2中不要求Action继承任何struts2中的基类,或者实现其它接口。在这种设计的方式下,struts2中的Action就相当于一个POJO,从而降低了Action的耦合性以及提高了Action的复用性。
和struts1的又一比较大的区别是,struts2中已经取消了ActionForm,所有用户请求的参数改成都封装在对应的Action中,如:
[color=blue]public class LoginAction {
private String userName;
public String getUserName() {
return userName;
}
…
}[/color]
如上,封装了userName属性,但注意:封装属性的同时,必须要提供set方法struts2是通过对应的set方法来处理这些参数的,而不是通过参数名来处理的
Struts2中的Action不仅可以封装请求的参数,还可以封装处理后的参数。如:
[align=center][color=blue]private String tip;
public void setTip(String tip) {
this.ti= tip;
}[/color][/align]
在Action的处理中,设置tip的值,则在处理后的视图中,则可显示该处理结果,如:
[align=center][color=blue]<s:property value=”tip”/>[/color][/align]
为了让用户的开发更加规范,struts2中提供了Action接口和ActionSupport基类,其中ActionSupport是个Action默认实现类,它提供了许多默认的实现方法。Action是个接口,具体代码如下:
[color=blue]package com.opensymphony.xwork2;
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}[/color]
注意Action中的几个常量,对已后Action更深一步的认识有帮助.
有人也许会问,既然Action中类似一个POJO,那以后要直接用到Servlet API,如HttpServletRequest和ServletContext等这么办呢?
没关系,Struts2中提供了两种解决方法,第一种就是使用struts2提供的工具类-ServletActionContext。它提供了一些列静态方法,可以直接获得Servlet API,如
HttpServletRequest和ServletContext的对象,即:
[color=blue]ServletActionContext .getServletContext()
ServletActionContext. GetResponse()
ServletActionContext.GetRequest()
ServletActionContext. getPageContext()[/color]
第二种方法即是实现struts2中对应的几个接口:
[color=blue]ServletContextAware、ServletResponseAware、ServletRequestAware[/color]等。
如一个Action实现ServletContextAware,则必须实现如下方法:
[color=blue]Public void setServletResponse(HttpServletResponse response);[/color]
其它与此类似
其实,struts2还提供了一个非常实用的类,即跟踪Action的上下文的类ActionContext,具体下章再作详细的解释。