首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2中Action访问Servlet API的两种步骤

2013-11-08 
Struts2中Action访问Servlet API的两种方法Struts2的Action并未直接与任何ServletAPI偶合,这也是Struts2的

Struts2中Action访问Servlet API的两种方法
Struts2的Action并未直接与任何Servlet  API偶合,这也是Struts2的一个改良的地方。但如何进行访问?


方法一:.[一般推荐使用](只能获得request,而response则得不到)
Struts2提供了一个ActionContext类,Struts2中的Action可以通过它进行访问。
其方法有:get(),getApplication(),getContext(),getParameters(),getSession(),setApplication(),setSession()


/**
* @作者 Jcuckoo
* @创建日期 2008-12-02
* @版本 V 1.0
*/


public class LoginAction implements Action
{
    private String username;
    private String password;
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password = password;
    }
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username = username;
    }
    public String execute() throws Exception
    {
        //获取静态方法,获取系统的ActionContext实例
            ActionContext ctx = ActionContext.getContext();
        //获取servletContext里的counter属性
        Integer counter = (Integer)ctx.getApplication().get("counter");
        if (counter == null)
        {
            counter = 1;
        }
        else
        {
            counter = counter + 1;
        }
        //将增加1后的counter值设置成counter属性
        ctx.getApplication().put("counter" , counter);
        ctx.getSession().put("user" , getUsername());
        if (getUsername().equals("scott")&& getPassword().equals("tiger") )
        {
        //直接设置HttpServletRequest属性
            ctx.put("tip" , "服务器提示:您已经成功的登陆");
                    return SUCCESS;
        }else{
        //直接设置HttpServletRequest属性
            ctx.put("tip" , "服务器提示:登陆失败");
                 return ERROR;
        }
    }
}

方法二:[不推荐](麻烦,与servlet API 耦合大).

虽然Struts2提供了ActionContext来访问Servlet API,但这种访问毕竟不能直接获得Servlet API,为了在Action中直接访问Servlet API,Struts2还提供了一下接口:ServletContextAware,ServletRequestAware,ServletResponseAware
下面以ServletResponseAware为例。

/**
* @作者 Jcuckoo
* @创建日期 2008-12-02
* @版本 V 1.0
*/

//实现ServletResponseAware
public class LoginAction implements Action , ServletResponseAware
{
//需要访问的HttpServletResponse对象
    private HttpServletResponse response;
    private String username;
    private String password;
    public String getPassword(){
        return password;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getUsername(){
        return username;
    }
    public void setUsername(String username){
        this.username = username;
    }
//实现ServletResponseAware接口必须实现的方法
    public void setServletResponse(HttpServletResponse response) {
    this.response = response;
  }
    public String execute() throws Exception{
        Cookie c = new Cookie("user" , getUsername());
        c.setMaxAge(60 * 60);
        response.addCookie(c);
        return SUCCESS;
    }
}
方法三:强烈推荐使用

Struts2还提供了一个ServletActionContext,其静态方法有:getPageContext(),getRequest(),getResponse(),getServletContext()

HttpServletRequest request = ServletActionContext.getRequest(); 
HttpServletResponse response = ServletActionContext.getResponse(); 
request.getSession().setAttribute("username","admin"); 
request.setAttribute("password", "1234");


文章转自Java中文网:http://www.javaweb.cc/architecture/struts/06374.shtml

热点排行