struts2响应参数——作用域传值:紧耦、解耦方式;接口注入方式

1.     响应参数---作用域传值

1.1.紧耦方式

使用的是servlet的api,在struts2中使用ServletActionContext.getRequest()来获取Request,然后根据Request获取session和application。

Action:

public class LoginAction extends ActionSupport {

       // 通过对象方式取得到前台页面的数据

       private User user;

 

       public User getUser() {

              return user;

       }

 

       public void setUser(User user) {

              this.user = user;

       }

 

       /**

        * 登录方法

        */

       public String login() {

              // 紧藕方式:通过servletAPI

              HttpServletRequest request = ServletActionContext.getRequest();

              request.setAttribute("user", user);

              // session

              HttpSession session = request.getSession();

              session.setAttribute("user", user);

 

              // application

              ServletContext application = request.getServletContext();

              application.setAttribute("user", user);

 

              if ("admin".equals(user.getName())) {

                     return SUCCESS;

              } else {

                     return ERROR;

              }

       }

}

Struts.xml

<struts>

       <package name="default" namespace="/" extends="struts-default">

              <action name="login" class="com.bjsxt.action.LoginAction" method="login">

                     <!-- result

                     name属性表示action中的返回值 

                     type属性表示跳转方式 doLogin表示是一个Action。此时的Action:并不是指的某一个特定方法,

                     而是同<action> 标签创建出来的namedoLogin<action>

                     -->

                     <result name="success">/success.jsp</result>

                     <result name="error">/error.jsp</result>

              </action>

       </package>

</struts>

Login.jsp

<body>

      <center>

           <h1>登录</h1>

           <form action="login.action" method="post">

                 userName: <input type="text" name="user.name"/><br>

                 password: <input type="password" name="user.pwd"><br>

                 <!-- springMVC struts2 一个道理!都是通过对象.调用 -->

                 address: <input type="text" name="user.adr.name"><br>

               <input type="submit" value="login"/>

           </form>

      </center>

</body>

Success.jsp

<body>

      <center>

           <h1 style="color: red"> 登录成功@!</h1>

           <h2 style="color: blue;">request:${requestScope.user.name } </h2>

           <h2 style="color: blue;">session:${sessionScope.user.name } </h2>

           <h2 style="color: blue;">application:${applicationScope.user.name } </h2>

      </center>

</body>

1.2.解耦方式

是struts2的上下文对象,本质是一个容器也是一个map对象,ActionContext对象贯穿整个action的生命周期,每次接收请求后都会创建一个actioncontext对象,将servletAPI存入actionContext对象中,从而实现struts2与servlet解耦。使得测试可以不依赖于容器。而且ActionContext是线程安全的。由于每次访问都创建一个ActionContext对象,所以执行效率比servlet较低,它是一个基于类的请求。

 

Action:

public String login1() {

       // 取得request对象

       Map<String, Object> request = (Map<String, Object>) ActionContext.getContext().get("request");

       request.put("user", user);

       // 解耦方式取得到session 返回一个Map集合。session作用域中就包含request作用域中的值!

       Map<String, Object> session = ActionContext.getContext().getSession();

       session.put("user", user);

       // 使用解耦方式取得application

       Map<String, Object> application = ActionContext.getContext().getApplication();

       application.put("user", user);

       if ("admin".equals(user.getName())) {

           return SUCCESS;

       } else {

           return ERROR;

       }

    }

 

Struts.xml

<action name="login1" class="com.bjsxt.action.LoginAction" method="login1">

                 <!-- result

                 name属性表示action中的返回值 

                 type属性表示跳转方式 doLogin表示是一个Action。此时的Action:并不是指的某一个特定方法,

                 而是同<action> 标签创建出来的namedoLogin<action>

                 -->

                 <result name="success">/success.jsp</result>

                 <result name="error">/error.jsp</result>

           </action>

login.jsp success.jsp 同上!login.jsp中的action修改为login1.action

1.3.接口注入方式

其实是struts2提供的一系列接口,实现该接口后,可以获取Request、session、application

public class LoginAction extends ActionSupport implements ServletRequestAware{}

 

Action:

public class DoLoginAction extends ActionSupport implements ServletRequestAware {

 

    // 声明一个user对象

    private User user;

    // 使用接口注入必须要创建一个HttpServletRequest对象

    private HttpServletRequest request;

 

    public User getUser() {

       return user;

    }

 

    public void setUser(User user) {

       this.user = user;

    }

 

    public HttpServletRequest getRequest() {

       return request;

    }

 

    public void setRequest(HttpServletRequest request) {

       this.request = request;

    }

 

    @Override

    public void setServletRequest(HttpServletRequest request) {

       this.request = request;

    }

 

    public String login2() {

       if ("admin".equals(user.getName())) {

           return SUCCESS;

       } else {

           return ERROR;

       }

    }

}

Struts.xml

<!-- 配置接口注入 -->

       <action name="login2" class="com.bjsxt.action.DoLoginAction" method="login2">

           <result name="success">/success.jsp</result>

           <result name="error">/error.jsp</result>

       </action>

Login.jsp --- 需要修改action为login2.action。其他不变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值