个人对于struts有一种复杂的心情,平心而论,struts2是个人最早接触到的的框架,在学校的时候就已经开始学习了,大四毕业设计,无疑用的还是struct,那时候SSH还是很流行的,后来出来实习,直接接触的是springmvc ,此时spring版本已经至少是3.X了,记得那时候,看马士兵老师的ssh视频,连马老师都说springMVC用的人很少,估计当时springmvc还没有现在这么流行,虽然现在基本不怎么用struts2,但是学习一种思想还是蛮好的

Struts2中的action跟struts1中的action不一样,struts1中的request、response对象都是通过参数引入的。而struts2对这些对象跟业务逻辑进行了真正的分离,struts对session、request、response等对象进行了封装,获取这些对象也有了不同的方法,下面为两种获取这些对象的方法:

1、通过ServletActionContext.getRequest(),ServletActionContext.getResponse()方法获取request、response对象,然后可以进行操作,session用 request.getSession()获取。

2、action实现org.apache.struts2.interceptor.SessionAware接口,在实现了该接口之后,session、request、response对象都通过IOC的方式进行注入。

所以根据这两种方式的不同,我们又称第一种方式为非IOC方式,第二种方式为IOC方式。

下面的分别举例来说明:

1、首先我们看一下传统的方式(非IOC方式):

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class NonIoCServlet extends ActionSupport { @Override
public String execute() { //获取Session对象
ActionContext.getContext().getSession().put("msg", "Hello World from Session!");
//获取request对象
HttpServletRequest request = ServletActionContext.getRequest(); //获取response 对象
HttpServletResponse response = ServletActionContext.getResponse(); //获取session的另外一种方式
HttpSession session = request.getSession(); //对这些对象的使用
......
return SUCCESS;
}
}

2、接下来看IOC方式:

 import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; publicclass IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware { private Map session;
private HttpServletRequest request;
private HttpServletResponse response; //set注入Session,struts2把session封装成了一个Map
publicvoid setSession(Map att) {
this.att = att;
}
//set注入request对象
publicvoid setServletRequest(HttpServletRequest request) {
this.request = request;
}
//set注入response对象
publicvoid setServletResponse(HttpServletResponse response) {
this.response = response;
} @Override
public String execute() {
//方法中可以对session、request、response进行操作 ...... return SUCCESS;
}
}

Struts2中的session、request、respsonse获取方法的更多相关文章

  1. Struts2中使用Session的两种方法

    在Struts2里,如果需要在Action中使用到session,可以使用下面两种方式: 通过ActionContext 类中的方法getSession得到 Action实现org.apache.st ...

  2. Struts2中使用Session

    嗯,没错,过了这么长时间我还在做我的注册和登录. 登陆的部分自然是从数据库中查找响应的用户信息,然后把一个user放到session里, Action中代码如下: public String Logi ...

  3. struts2中的session使用

    1.1. 如何获取Session 1.1.1. 获取Session的方式 Struts2中获取Session的方式有3种,大家掌握其中任何一种都可以. 通过ActionContext.getConte ...

  4. struts2中的session、request 、和action往页面中传值的方法

    ActionContext.getContext().put("list", list); ActionContext.getContext().getValueStack().p ...

  5. struts2 中请求转发与请求重定向方法

    本文转自:http://blog.csdn.net/a327736051/article/details/50240491 一.Chain Result:这个result调用另外的一个action,连 ...

  6. struts2 中使用DMI(动态调用方法)方式配置action

    1.使用 "!"方式,即 action名称 ! 方法名称 struts.xml 配置 <package name="user" namespace=&qu ...

  7. Struts2中 radio标签的详细使用方法

    首先在页面中引入struts标签库: <%@ taglib prefix="s" uri="/struts-tags"%> 在JSP页面中创建单选按 ...

  8. 第14.9节 Python中使用urllib.request+BeautifulSoup获取url访问的基本信息

    利用urllib.request读取url文档的内容并使用BeautifulSoup解析后,可以通过一些基本的BeautifulSoup对象输出html文档的基本信息.以博文<第14.6节 使用 ...

  9. 解决在.ashx文件中判断Session 总是NULL的方法

    实现IHttpHandler接口的同时必须继承IRequiresSessionState接口,才能拿到session public class HttpHandler: IHttpHandler, I ...

随机推荐

  1. XMPP聊天客户端环境搭建

    1.服务器选择:ejabberd,具体安装过程请参考:http://blog.csdn.net/linhanmin/article/details/9876819 2.客户端配置: 采用xmppfra ...

  2. CentOS7.1 安装关键步骤 记录下来

    SecureCRT下载地址 https://yunpan.cn/cS9W94kuvhXPb  访问密码 08cd[这里GNOME桌面 下的 要全选,截屏有误]

  3. AOSP

    定义编辑 "Android Open-Source Project"的缩写 中文意为"Android 开放源代码项目" 内容编辑 在Android Open-S ...

  4. github上如何合并别人的pull request

    https://github.com/Epix37/Hearthstone-Deck-Tracker/issues/1391 I fetch the code from your repository ...

  5. 第二部分 MediaPlayer的接口与架构

    第二部分 MediaPlayer的接口与架构 2.1 整体框架图         MediaPlayer的各个库之间的结构比较复杂,可以用下图的表示     在各个库中,libmedia.so位于核心 ...

  6. TreeList 实现多表头

    1. 先上图: 2. 再上代码: 原码

  7. windows ssh RPi 2B

    /************************************************************************* * windows ssh RPi 2B * 声明 ...

  8. Azure HDInsight HBase DR解决方案

    Sun wei  Sat, Feb 28 2015 3:07 AM Apache HBase是目前非常流行的NoSQL数据库,通过HDFS+Zookeep+Master+Region Server的架 ...

  9. Android学习的一些问题

    如何让Service常驻后台? 如何让App自启动? 如何让App自动更新? Handler Adapter Bundle Application getXXX()

  10. 软件测试模型汇总-V模型,W模型,X模型,H模型

    V模型 在软件测试方面,V模型是最广为人知的模型,尽管很多富有实际经验的测试人员还是不太熟悉V模型,或者其它的模型.V模型已存在了很长时间,和瀑布开发模型有着一些共同的特性,由此也和瀑布模型一样地受到 ...