个人对于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. [原]捉虫记3:_ConectionPtr指针调用open失败

    背景 产品使用MySQL来存储报警服务产生的报警.在报警服务的组件中使用ADO接口 客户方有两台计算机,一台计算机A用来组态,且可以对设备进行调试,操作系统是Win7 64bit 专业版,安装了VS2 ...

  2. WPF 中如何使用第三方控件 ,可以使用WindowsFormsHost 类

    允许在 WPF 页面上承载 Windows Forms控件的元素. 命名空间:   System.Windows.Forms.Integration 程序集:   WindowsFormsIntegr ...

  3. ExtJs双ActionResult共用同一Js文件ID冲突解决方案

    项目使用MVC+ExtJs实现,权限控制是基于Controller下的ActionResult的,有一个页面因参数不同就需要新建两个ActionResult. 不要问我为何是基于页面级,而不是数据级, ...

  4. CodeForces Round #285 Div.2

    C.Misha and Forest (图论 BFS) 比赛进行了一半才想起来有场CF没打,=_=|| 前两道题快速切掉,C题一直卡没什么好的思路 憋了几天,忍不住偷偷瞄了一下别人AC的代码,发现我题 ...

  5. UVa 101 (模拟) The Blocks Problem

    题意: 有n个木块及n个木块堆,初始状态是第i个木块在第i个木块堆上.对应有四种操作,然后输出最终状态. 分析: 用一个vector<int>模拟一个木块堆,进行相应操作即可. #incl ...

  6. UVa 1639 (期望) Candy

    题意: 两个盒子里各有n颗糖,每天有p的概率从第一个盒子里取一颗糖,1-p的概率从第二个盒子里去一颗糖.直到某一天打开某个盒子忽然发现没糖了,求另一个盒子里剩余糖果数的期望. 分析: 紫书上面已经分析 ...

  7. ichartjs

    ichartjs-基于html5的图表组件 不适合桌面端

  8. shell编程——if语句 if -z -n -f -eq -ne -lt

    if  条件then Commandelse Commandfi                              别忘了这个结尾 If语句忘了结尾fitest.sh: line 14: sy ...

  9. 【转】COCOS2D-X之不断变化的数字效果Demo

    我们在玩"天天爱消除"或"天天连萌"的时候,每玩一盘后会有一个游戏结果界面,上面有一个显示所得分数的效果.今天我们这个Demo就是要实现与之相近的效果. 一.我 ...

  10. android中常用的弹出提示框

    转自:http://blog.csdn.net/centralperk/article/details/7493731 我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的 ...