在Struts2里,如果需要在Action中使用到session,可以使用下面两种方式:

  1. 通过ActionContext 类中的方法getSession得到
  2. Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作
 
下面先看一个采用第一种方式,在action中得到session的例子
public class SessionTestAction extends ActionSupport {
    public String execute() {
       ActionContext actionContext = ActionContext.getContext();
       Map session = actionContext.getSession();
       session.put("user", "Test User");
       return SUCCESS;
    }
}
在这个例子中,通过ActionContext得到session,并往session里放置一个key为user,值为Test User的内容。
 
下面是一个实现org.apache.struts2.interceptor.SessionAware接口来对session操作的例子
public class SessionTest1Action extends ActionSupport implements SessionAware {
    private Map session;
    public void setSession(Map session) {
       this.session = session;
    }
    public String execute() {
       this.session.put("user", "Test User 1");
       return SUCCESS;
    }
}
在这个例子中实现了接口SessionAware中的setSession方法。
 
上面两种方式都可以得到session,能实现的功能都一样。推荐通过第二种方式来使用session,便于单体测试,用第二种方式,只需要构造一个Map就可以对action进行单体测试了。
 
注销session的方法:
// 注销
public String logout() throws Exception {
  ((org.apache.struts2.dispatcher.SessionMap<String, Object>) this.session).invalidate();
  return SUCCESS;
}

Struts2中使用Session的两种方法的更多相关文章

  1. php获取数组中重复数据的两种方法

    分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...

  2. [转]Qt中定时器使用的两种方法

    Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类. 其精确度一般依赖于操作系统和硬件,但一般支持20ms.下面将分别介绍两种方法来使用定时器. 方法 ...

  3. python中执行shell的两种方法总结

    这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包 ...

  4. vue中使用echarts的两种方法

    在vue中使用echarts有两种方法一.第一种方法1.通过npm获取echarts npm install echarts --save 2.在vue项目中引入echarts 在 main.js 中 ...

  5. Spring MVC 中获取session的几种方法

    Spring MVC 中使用session是一种常见的操作,但是大家上网搜索一下可以看到获取session的方式方法五花八门,最近,自己终结了一下,将获取session的方法记录下来,以便大家共同学习 ...

  6. 在C++中定义常量的两种方法的比较

    常量是定以后,在程序运行中不能被改变的标识符.C++中定义常量可以用#define .const 这两种方法.例如:#define PRICE 10 //定义单价常量10const int PRICE ...

  7. Ajax中解析Json的两种方法详解

    eval();  //此方法不推荐 JSON.parse();  //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name&qu ...

  8. MySQL中删除数据的两种方法

    转自:http://blog.csdn.net/apache6/article/details/2778878 1. 在MySQL中有两种方法可以删除数据: 一种是delete语句,另一种是trunc ...

  9. Endnote在latex中的应用的两种方法

    从endnote中向latex文档批量插入参考文献的两种方法 一.若是latex模板中参考文献编写的命令是: \begin{thebibliography} \bibitem{lab1}LIU M L ...

随机推荐

  1. ios10 适配问题总结

    看各个大神整理而成 1.检查版本问题 不可以像下面这样用 #define isiOS10 ([[[[UIDevice currentDevice] systemVersion] substringTo ...

  2. QQ中未读气泡拖拽消失的实现(参照一位年轻牛B的博主的思路自己实现了一下)

    原文链接:http://kittenyang.com/drawablebubble/,博主年轻却很有思想.相仿的年纪,很佩服他! 首先分析拖拽时的图,大圆.不规则的图(实际上时有规律的不然也画不出来, ...

  3. jxl 使用

    public static void main(String args[]) {try {// 打开文件WritableWorkbook book = Workbook.createWorkbook( ...

  4. C++语法报错收集

    1. error C2864: "OuterClass::m_outerInt": 只有静态常量整型数据成员才可以在类中初始化 class OuterClass { public: ...

  5. [Leetcode] Container With Most Water ( C++)

    题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...

  6. 分享一个jdk源码链接

    请查看下面的链接:http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/bcba89ce0a8c/src/share/classes/,进入页面后,点击列表中 ...

  7. SQL语句 打印等腰三角形,菱形

    ) BEGIN 5 SET @S='' 8 BEGIN -@I) 10 BEGIN SET @S=@S+' ' END ELSE 14 BEGIN SET @S=@S+'**' 16 END END ...

  8. jquery插件编写

    /*(function($) { $.fn.accordion = function(options) { var settings = $.extend({}, {open: false}, opt ...

  9. python-整理--连接MSSQL

    环境 : python3.4 / win10 / vs2013 / sqlexpress2014 需要的工具和包 1.freetds包 下载地址 https://github.com/ramiro/f ...

  10. JS控制文本框中的密码显示/隐藏功能

    <html> <head> <title>[荐]JS控制文本框中的密码显示/隐藏功能_网页代码站(www.6a8a.com)</title> <s ...