您现在的位置:首页 >> 基础 >> Java编程 >> 内容

Struts2 与Servlet API解耦,耦合的访问方式--Java学习网

时间:2016-9-3 20:25:41

  核心提示:一.与Servlet API解耦的访问方式1.为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts2对HttpServletRequest、HttpSession和S...

一.与Servlet API解耦的访问方式

1.为了避免与Servlet API耦合在一起,方便Action类做单元测试,
  Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,
  构造了三个Map对象来替代这三种对象,在Action中,
  直接使用HttpServletRequest、HttpSession、ServletContext对应的Map对象来保存和读取数据。
  要获得这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类

ActionContext - 请求上下文 。就是struts2封装的request.包含了request,session,application上面这三个都是Map.

public class LoginAction implements Action{
    private String username;
    private String password;
    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;
    }
    
    public String execute() throws Exception {
        if (username.equals("1")&&password.equals("1")) {
            //解耦合 记录session
            Map<String, Object> session = ActionContext.getContext().getSession();
            session.put("uname", username);
            return SUCCESS;
        }else {
            return LOGIN;
        }
    }
}
     

<!--登录

登陆成功后,记录用户名到Session中,登陆失败,跳会登陆页面

 -->
        <action name="loginAction" class="cn.happy.action.LoginAction">
            <result name="success">
            s.jsp
            </result>
            <result name="login">
            login.jsp
            </result>
        </action>

二.与Servlet API耦合的访问方式

直接访问 Servlet API将使Action类与Servlet API耦合在一起,Servlet API对象均由Servlet容器来构造,与这些对象绑定在一起,测试过程中就必须有Servlet容器,这样不便于Action类的测试,但有时候,确实需要访问这些对象,Struts2同样提供了直接访问ServletAPI对象的方式。

要直接获取Servlet API对象可以使用org.apache.struts2.ServletActionContext类,该类是ActionContext类的子类。

2:向Action中注入ServletAPI对象对应的Map对象

public class LoginAction implements Action,SessionAware {
    private String username;
    private String password;
    private Map<String,Object> map;
    public String execute() throws Exception {
        if (username.equals("1")&&password.equals("1")) {
            //注入map集合
            map.put("uname", username);
            return SUCCESS;
        }else {
            return LOGIN;
        }
    }
       
    public void setSession(Map<String, Object> map) {
        
        this.map=map;
    }
}

//通过ActionContext的子类ServletActionContext实现

public class LoginAction implements Action {
    private String username;
    private String password;
    public String execute() throws Exception {
        if (username.equals("1")&&password.equals("1")) {
           HttpSession session = ServletActionContext.getRequest().getSession();
            session.setAttribute("uname", username);
            return SUCCESS;
        }else {
            return LOGIN;
        }
    }

//向Action实例注入Servlet API对象

public class LoginAction implements Action,ServletRequestAware{
    private HttpServletRequest Request;   
     private String username;
    private String password;
    public String execute() throws Exception {
        if (username.equals("1")&&password.equals("1")) {
         //记录session
          HttpSession session=request.getSession();
          session.setAttribute("uname",username);
            return SUCCESS;
        }else {
            return LOGIN;
        }
    }        
public void setServletRequest(HttpServletRequest arg0) {
        this.request=request;
        
    }

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号