struts2响应参数——作用域传值:紧耦、解耦方式;接口注入方式
2017-09-19 11:01
399 查看
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> <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> 标签创建出来的name为doLogin的<action> --> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts> |
<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> |
<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> 标签创建出来的name为doLogin的<action> --> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> |
1.3.接口注入方式
其实是struts2提供的一系列接口,实现该接口后,可以获取Request、session、applicationpublic 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; } } } |
<!-- 配置接口注入 --> <action name="login2" class="com.bjsxt.action.DoLoginAction" method="login2"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> |
相关文章推荐
- spring注入方式、配置项及作用域、生命周期、Aware接口、自动装配
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- Struts2 二、为Action的参数注入值
- Struts2 二、为Action的参数注入值
- Struts2接收参数的几种方式
- vb.net 接口POST方式传参数提交返回值
- struts2提交参数几种方式
- struts2-解耦方式获取Servlet API
- 【Struts2】Action接收参数的三种方式
- Struts2之我见系列总结---- Struts接收参数的方式(2012.12.22)
- struts2 获取"作用域"对象:Request Session Application 与 Aware 接口的使用
- post接口提交参数方式
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)
- Spring学习----------Spring 参数注入方式介绍
- struts2传递参数的三种方式
- Struts2接收参数的几种方式
- Struts2 的 Preparable, ModelDriven 接口方法里无法获得参数,理解 拦截器与责任链
- spring中通过constructor来注入参数的四种方式
- struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式
- Struts2通过ActionContext解耦的方式获取WEB资源