java之struts2之ServletAPI

在之前的学习中struts2已经可以处理大部分问题了。但是如果要将用户登录数据存入session中,可以有两种方式开存入ServletAPI。

一种解耦合方式,一种耦合方式。

1. 解耦合方式


解耦合方式---ActionContext : 解耦合方式获取的都是map对象

 1   //登录
 2     public String login(){
 3         if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
 4             //登录成功  数据存入Session中
 5             //通过ActionContext可以获得Session
 6             Map<String,Object> session = ActionContext.getContext().getSession();
 7             session.put("currentUser", user);
 8             /**
 9              * 通过解耦合的方式还可以获取request,application
10              */
11             Map<String,Object> request = (Map<String, Object>) ActionContext.getContext().get("request");
12             Map<String,Object> application = ActionContext.getContext().getApplication();
13             return Action.SUCCESS;
14         }
15         return Action.LOGIN;
16     }

好处:方便测试,没有侵入性,ActionContext可以不在Servlet容器环境中使用

2.耦合方式获取ServletAPI


下面讲的是耦合方式获取的Servlet对象

2.1 通过ActionContext获取

  //登录
    public String login(){
        if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
            //登录成功  数据存入Session中
            /**
             * 通过ActionContext对象获取HttpServletRequest对象
             */
            HttpServletRequest req = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
            HttpSession session = req.getSession();
            session.setAttribute("currentUser", user);
            /**
             * 在ActionContext中还可以获取HttpServletResponse对象
             * 和ServletContext对象
             */
            HttpServletResponse resp = (HttpServletResponse)ActionContext.getContext().get(StrutsStatics.HTTP_RESPONSE);
            ServletContext sc =(ServletContext)ActionContext.getContext().get(StrutsStatics.SERVLET_CONTEXT);
            return Action.SUCCESS;
        }
        return Action.LOGIN;
    }

2.2 通过ServletActionContext获取

  //登录
    public String login(){
        if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
            //登录成功  数据存入Session中
            //通过ServletActionContext以耦合方式获取ServletAPI对象
            HttpServletRequest req = ServletActionContext.getRequest();
            HttpSession session = req.getSession();
            session.setAttribute("currentUser", user);
            /**
             * 通过ServletActionContext工具类还可以获取到其他的ServletAPI对象
             */
            HttpServletResponse resp = ServletActionContext.getResponse();
            ServletContext sc = ServletActionContext.getServletContext();
            return Action.SUCCESS;
        }
        return Action.LOGIN;
    }

2.3 通过实现接口的方式来获取

public class UserAction4 implements ServletRequestAware{
    private User user;
    private HttpServletRequest req;
    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.req = request;
    }
    //登录
    public String login(){
        if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
            //登录成功  数据存入Session中
            //通过ServletActionContext以耦合方式获取ServletAPI对象
            HttpSession session = this.req.getSession();
            session.setAttribute("currentUser", user);
            return Action.SUCCESS;
        }
        return Action.LOGIN;
    }
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    
}
原文地址:https://www.cnblogs.com/Vincent-yuan/p/10970917.html