struts2中耦合访问servlet- API

struts2中耦合访问servlet- API有三种,推荐使用第二种。当然,尽量用解耦合的方式访问,解耦合方式访问内容在上一篇文章中有解释,需要者请查看。

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



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;
        }
    }
}

方法二:强烈推荐使用

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

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

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

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

//实现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;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值