在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到
1.通过ActionContext class中的方法getSession得到
2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作

下面先看一个采用第一种方式,在action中得到session的例子

  1. package s2.ex.action;
  2. import java.util.Map;
  3. import com.opensymphony.xwork2.ActionContext;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. public class SessionTestAction extends ActionSupport {
  6. public String execute() {
  7. ActionContext actionContext = ActionContext.getContext();
  8. Map session = actionContext.getSession();
  9. session.put("USER_NAME", "Test User");
  10. return SUCCESS;
  11. }
  12. }

在这个例子中,通过ActionContext得到session,并往session里放置一个key为USER_NAME,值为Test User的内容。

下面是一个实现org.apache.struts2.interceptor.SessionAware接口来对session操作的例子

  1. package s2.ex.action;
  2. import java.util.Map;
  3. import org.apache.struts2.interceptor.SessionAware;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. public class SessionTest1Action extends ActionSupport implements SessionAware {
  6. private Map session;
  7. public void setSession(Map session) {
  8. this.session = session;
  9. }
  10. public String execute() {
  11. this.session.put("USER_NAME", "Test User 1");
  12. return SUCCESS;
  13. }
  14. }

在这个例子中实现了接口SessionAware中的setSession方法。

上面两种方式都可以得到session,能实现的功能都是一样的。
这里推荐通过第二种方式来使用session,原因是便于做单体测试,用第二种方式,只需要构造一个Map就可以对action class进行单体测试了。

在一个项目中可能会有很多action都需要用到session,如果每个action都来实现org.apache.struts2.interceptor.SessionAware这个接口,可能会显得比较麻烦,所以建议作一个抽象的BaseAction类来实现org.apache.struts2.interceptor.SessionAware接口,以后所有的action只要继承这个BaseAction就可以了。

下面是一个如何在JSP中使用session的例子。

  1. <%@ page contentType="text/html; charset=UTF-8" %>
  2. <%@page pageEncoding="utf-8" %>
  3. <%@taglib prefix="s" uri="/struts-tags" %>
  4. <html>
  5. <head>
  6. <title>Session Test-JAVA中文网:http://www.javaweb.cc/</title>
  7. </head>
  8. <body>
  9. <h1><s:property value="#session.USER_NAME"/></h1>
  10. <h1></h1>
  11. </body>
  12. </html>

一般在项目中往往会往session里放置一个Object,必如说user,user里有个boolean admin和String userName,如果user里存在isAdmin的方法,在jsp中可以通过<s:if test="#session.user.admin">来判断用户有没有管理权限,通过<s:property value="#session.user.userName">或者来取得用户名。

strust2中使用session的更多相关文章

  1. 在 ASP.NET CORE 中使用 SESSION

    Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...

  2. Tomcat中的Session小结

    什么是Session 对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap: Session的目的 Http协议是一种无状态协议,即每次服务端 ...

  3. .ashx中使用Session

    在一般处理程序中给session赋值是报错:未将对象引用设置到对象的实例.

  4. 在IHttpHandler中获取session

    因为业务要异步通过IHttpHandler获得数据,但还要根据当前登录人员的session过滤,因此要在在IHttpHandler中获取session 方法是HttpHandler容器中如果需要访问S ...

  5. Java中对session的简单操作

    1.jsp中操作session <% String name=(String)request.getSession().getAttribute("username"); / ...

  6. ASP.NET中的Session怎么正确使用

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...

  7. 如何在报表权限中使用session

    1. 问题描述 权限中使用session,一般是用来存放用户名和密码,下面以报表开发工具FineReport为例,分两种情况介绍用户名和密码的保存: 2. 同一应用下session 由于session ...

  8. [转]tomcat中的session管理

    转载地址:http://blog.csdn.net/iloveqing/article/details/1544958 当一个sesson开始时,Servlet容器会创建一个HttpSession对象 ...

  9. ASP.NET中的Session怎么正确使用[转]

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...

随机推荐

  1. 用VC2010以上版本编译可以在低版本XP和2003的运行程序的方法

    2013-09-17   作者:佚名   来源:本站整理   浏览:2001   评论:1   一直以来倍受此事困拢,vc2010以上版本编译出的exe或dll总是会引用kernel32.dll的En ...

  2. JS判断网页是否在微信中打开/

    JS判断网页是否在微信中打开,代码如下: <script type="text/javascript"> function is_weixn(){ var ua = n ...

  3. 使用node初始化项目

    初始化项目 在建项目的时候经常会建很多文件夹和文件,今天使用node初始化项目自动生成这些内容. 执行步骤 执行命令 node init 初始化项目生成package.json 设置配置文件 var ...

  4. iOS如何彻底避免数组越界

    我们先来看看有可能会出现的数组越界Crash的地方: ? 1 2 3 4 5 6 7 - (void)tableView:(UITableView *)tableView didSelectRowAt ...

  5. sed命令详解

    搜索 纠正错误  添加实例 sed 功能强大的流式文本编辑器 补充说明 sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时 ...

  6. TBitmapSurface.StretchFrom

    procedure TBitmapSurface.StretchFrom(const Source: TBitmapSurface; const NewWidth, NewHeight: Intege ...

  7. 一堆LCT板子

    搞了一上午LCT,真是累死了-- 以前总觉得LCT高大上不好学不好打,今天打了几遍感觉还可以嘛= =反正现在的水平应付不太难的LCT题也够用了,就这样好了,接下来专心搞网络流. 话说以前一直YY不出来 ...

  8. linux du和df

    df.du和fdisk这三个常用命令:df用于检查文件系统磁盘占用情况,du检查磁盘空间占用情况,而fdisk用于磁盘分区. du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,d ...

  9. C#对象先序列化然后反序列化时间丢失八小时的问题

    把对象JSON序列化,然后反序列化后发现时间少了八小时.因为在东八区,所以序列的时候按照1970-01-01:08:00:00为基数取得差值,而反序列化的时候以1970-01-01:00:00:00作 ...

  10. HttpClient (POST GET PUT)请求

    HttpClient (POST GET PUT)请求 package com.curender.web.server.http; import java.io.IOException; import ...