您的位置:首页 > 编程语言 > Java开发

有关Struts2的个人总结:

2015-12-25 13:55 477 查看

一、多分发的方法:

1、通过action元素的method属性来指定action调用的方法。

途径:(1)查找与method属性值完全一致的方法;

(2)查找doMethod()形式的方法。(一些方法别名需要,因为有些关键字不能使用,就可以在前面加do)

2、动态方法调用(Dynamic Method Invocation,DMI)

eg:actionName!methodName.action

3、运用通配符:

eg:actionName_*

eg:*_*

设置*参数时,使用 {1} {2} {3}

二、result的结果类型:

1、默认:dispather

2、chain:用于Action链式处理

3、redirect:用于重定向到另外的URL

4、redirctAction:用于重定向到另外的action映射

5、plainText:用于显示某个特定页面的原始内容(即页面的代码)

三、Action中接收客户端输入的方法:

1、使用领域对象接收客户端输入,需提供对象的getter/setter方法

eg:

public class MyAction extends ActionSupport{
private User user = new User(); //property: username和password

@Override
public String execute() throws Exception {
//...
return SUCCESS;
}

public User getUser(){
return user;
}
public void setUser(User user){
this.user=user;
}
}


2、使用ModelDriven接口,该接口中只有一个方法:public T getModel();

eg:

public class MyAction extends ActionSupport implements ModelDriven{
private User user = new User(); //property: username和password

@Override
public String execute() throws Exception {
//...
return SUCCESS;
}

@Override
public User getModel(){
return user;
}
}

3、使用action的属性接收客户端的输入需提供属性的getter/setter方法

eg:

public class MyAction extends ActionSupport {
private String username;
private String password;

@Override
public String execute() throws Exception {
//...
return SUCCESS;
}

public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password=password;
}
}

四、页面对应不同方式填写参数

①、领域对象:user.username/user.password

②、ModelDriven:username/password

③、属性取值:username/password

五、访问request、session和application对象

1、与Servlet API解耦的访问方式:

(1)、使用ActionContext

ActionContext context = ActionContext.getContext();

Map request = (Map)context.get("request");

Map session = context.getSession();

Map application = context.getApplication();

request.put(key,value);

session.put(key,value);

页面参数获取:(使用EL表达式)

${requestScope.key} ${sessionScope.user.username} ${applicationScope.key}

(2)、implements RequestAware、SessionAware、ApplicationAware

eg:

public class MyAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{

private static final long serialVersionUID = 1L;
private Map request;
private Map session;
private Map application;

public String execute(){
return SUCCESS;
}

public void setRequest(Map request) {
this.request = request;
}

public void setSession(Map session) {
this.session = session;
}

public void setApplication(Map application) {
this.application = application;
}

}

说明:Action类实现三个接口,框架在运行时会调用这三个接口中的方法,向Action类中注入request、session和application对象。

2、与Servlet API耦合的访问方式(直接访问)

(1) org.apache.struts2.ServletActionContext extends ActionContext

该类下静态方法:

①、public static HttpServletRequest getRequest(){}

②、public static ServletContext getServletContext(){}

③、public static HttpServletResponse getResponse(){}

此处:HttpSession可以通过HttpServletRequest对象来得到。

(2)、通过ActionContext对象的get()方法:

①、HttpServletRequest request = ActionContext.getContext().get(SerlvetActionContext.HTTP_REQUEST);

②、ServletContext context = ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT);

③、HttpServletResponse response = ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);

(3)、implemets ServletRequestAware和ServletContextAware接口

eg:

public class MyAction extends ActionSupport implements ServletRequestAware,ServletContextAware{

private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private ServletContext context;

public String execute(){
return SUCCESS;
}

public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

public void setServletContext(ServletContext context) {
this.context = context;
}
}
说明:由struts2框架向Action实例注入HttpServletRequest和ServletContext对象,需要重写接口中的方法。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: