关于Struts2框架的学习(四)

来源:互联网 发布:mysql 自增 编辑:程序博客网 时间:2024/06/05 17:21

一、获取ServletAPI

1.strtus2有2种方式获得ServletAPI,一种是解耦,一种是耦合。

解耦使得使用strtus2来进行测试的时候,不需要启动服务器,在一定程度上提高开发效率。

2.使用解耦的方式获得ServletAPI;通过ActionContext对象获取

package com.yaoyao.action;import com.opensymphony.xwork2.ActionContext;import java.util.Map;public class LoginAction {    //表单域的名称和属性值一样即可    private String name;    private String pwd;    //处理方法    public String execute() {        if ("zhangfei".equals(name) && "1111".equals(pwd)) {            //将name放入session中            ActionContext.getContext().getSession().put("user", name);            //获取request---HttpServletRequest对象的attributes            Map<String, Object> request = (Map) ActionContext.getContext().get("request");            //获取Application            Map<String, Object> application = ActionContext.getContext().getApplication();            //获取parameters            Map<String, Object> parameters = ActionContext.getContext().getParameters();            System.out.print(((String[]) parameters.get("name"))[0]);            return "success";        } else {            return "failed";        }    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }}

3、通过ActionContext直接获取HttpServletRequest

package com.yaoyao.action;import com.opensymphony.xwork2.ActionContext;import org.apache.struts2.StrutsStatics;import javax.servlet.http.HttpServletRequest;public class LoginAction {    //表单域的名称和属性值一样即可    private String name;    private String pwd;    //处理方法    public String execute() {        if ("zhangfei".equals(name) && "1111".equals(pwd)) {            HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);            System.out.print(request.getParameter("name"));            request.getSession().setAttribute("user",name);            return "success";        } else {            return "failed";        }    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }}
4.通过耦合的方式获取HttpServlertRequest

package com.yaoyao.action;import org.apache.struts2.interceptor.ServletRequestAware;import javax.servlet.http.HttpServletRequest;public class LoginAction implements ServletRequestAware {    //表单域的名称和属性值一样即可    private String name;    private String pwd;    HttpServletRequest request;    //处理方法    public String execute() {        if ("zhangfei".equals(name) && "1111".equals(pwd)) {            request.getSession().setAttribute("user", name);            return "success";        } else {            return "failed";        }    }    public void setServletRequest(HttpServletRequest httpServletRequest) {        this.request = httpServletRequest;    }        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }}

5.通过ServletActionContext获取HttpServletRequest对象

public String execute() {        if ("zhangfei".equals(name) && "1111".equals(pwd)) {            HttpServletRequest request = (HttpServletRequest) ServletActionContext.getContext();            request.getSession().setAttribute("user", name);            return "success";        } else {            return "failed";        }    }
建议使用第一种和第四种

二、有关ActionContext的学习

1.什么是ActionContext:是map结构的容器,ActionContext是Action的上下文。存放Action执行过程中的数据信息。每次请求时会为当前线程创建一个新的ActionContext,而ActionContext采用了ThreadLocal的方式来存放,所以ActionContext是线程安全的 。

2.获取ActionContext:ActionContext.getContext()获取,由于ActionContext是线程安全的,并且是静态方法获取的,所以在本线程中的非Action类中,也可以直接访问。






0 0
原创粉丝点击