`
zhou_hong_liang
  • 浏览: 97357 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2 中request和session中的管理

阅读更多
关键字: struts2、request、session
  在Struts1.*中,要想访问request、response以及session等Servlet对象是很方便的,因为它们一直是作为形参在各个方法之间进行传递的,而在Struts2中我们就很难看到它们的芳踪了,因为我们获得表单中的值都是通过预先设置好了的get方法来得到的,那么如果有些参数我们必须通过request.getParametre或者session.getAttribute来得到,那么应该怎么做呢?按照Max的教程上的说法,可以分为两种:IoC方式和非IoC方式,如何理解这两种方式的区别呢?IoC是Spring里面的特征之一,字面意思是反转控制,说白了就是依赖注入,比方说类A依赖类B,那么就主动的给A注入一个类B的对象,下面看一下这两种方法的具体实现。
1.非Ioc方式
这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类,具体的方法如下所示。
获得request对象:
Java代码
HttpServletRequest request = ServletActionContext.getRequest ();  
ActionContext ct= ActionContext.getContext()  
   HttpServletRequest request=  
(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST); 

HttpServletRequest request = ServletActionContext.getRequest ();
ActionContext ct= ActionContext.getContext()
   HttpServletRequest request=
(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST);获得session对象:
在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而平常我们所说的session则是指HttpSession对象,具体的获得方法如下所示。
Java代码
Map session=ActionContext.getSession();  
Map session=(Map)ActionContext.getContext().getActionContext.SESSION); 

Map session=ActionContext.getSession();
Map session=(Map)ActionContext.getContext().getActionContext.SESSION);
得到这个SessionMap之后我们就可以对session进行读写了,如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象,然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作,我们不必再去碰底层的session了。
2.IoC方式
这种方式相对来说变化就比较少了,具体流程如下所示。
获得request对象:
第一步:让action实现ServletRequestAware接口
第二步:在action中声明一个HttpServletRequest类型的实例变量
第三步:在action中实现ServletRequestAware接口的setServletRequest方法,实现方式很简单,如下所示。
         private HttpServletRequest request;
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
    }
获得Session对象(注意,此时的session是SessionMap类型):
第一步:让action实现SessionAware接口
第二步:在action中声明一个HttpServletRequest类型的实例变量
第三步:在action中实现SessionAware接口的setSession方法,实现方式很简单,如下所示。
         private Map session;
publicvoid setSession(Map session) {
            this. session = session;
    }
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1721226
以下是另一篇关于得到Request和Session的文章:
Java代码
在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到  
1.通过ActionContext class中的方法getSession得到  
2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session进行操作  
   
下面先看一个采用第一种方式,在action中得到session的例子  
package s2.ex.action;   
 
 
import java.util.Map;   
 
 
import com.opensymphony.xwork2.ActionContext;   
 
import com.opensymphony.xwork2.ActionSupport;   
 
 
public class SessionTestAction extends ActionSupport {   
 
 
    public String execute() {   
 
     ActionContext actionContext = ActionContext.getContext();   
 
       Map session = actionContext.getSession();   
 
       session.put("USER_NAME", "Test User");   
 
       return SUCCESS;   
 
    }   
 
}  
在这个例子中,通过ActionContext得到session,并往session里放置一个key为USER_NAME,值为Test User的内容。  
   
下面是一个实现org.apache.struts2.interceptor.SessionAware接口来对session操作的例子  
package s2.ex.action;   
 
 
import java.util.Map;   
 
 
import org.apache.struts2.interceptor.SessionAware;   
 
 
import com.opensymphony.xwork2.ActionSupport;   
 
 
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_NAME", "Test User 1");   
 
       return SUCCESS;   
 
    }   
 
}  
   
在这个例子中实现了接口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的例子。  
<%@ page contentType="text/html; charset=UTF-8" %>   
 
<%@page pageEncoding="utf-8" %>   
 
<%@taglib prefix="s" uri="/struts-tags" %>   
 
<html>   
 
<head>   
 
    <title>Session Test</title>   
 
</head>   
 
 
<body>   
 
<h1><s:property value="#session.USER_NAME"/></h1>   
 
<h1></h1>   
 
</body>   
 
</html>  
 
   一般在项目中往往会往session里放置一个Object,必如说user,user里有个boolean admin和String userName,如果user里存在isAdmin的方法,在jsp中可以通过<s:if test="#session.user.admin">来判断用户有没有管理权限,通过<s:property value="#session.user.userName">或者来取得用户名。  
分享到:
评论

相关推荐

    struts2中request和session的获取

    本文将深入探讨Struts2中如何获取request和session,以及这两种对象的作用和应用场景。 ### Struts2框架简介 Struts2是基于Java Servlet API的一个开源MVC(Model-View-Controller)框架,它提供了强大的功能来...

    Struts2访问request,session,application的四种方式

    总结来说,Struts2提供了多种途径来访问和管理request、session和application的数据,包括ActionContext、ValueStack、OGNL和拦截器。掌握这些方法将有助于提高开发效率和代码质量,同时也能更好地理解和优化基于...

    struts2访问request,session,application作用域

    在 Struts2 中,处理用户请求时经常需要使用到 Servlet 的内置对象,比如 Request、Session 和 Application,这些对象可以帮助开发者存储和获取数据。然而,在实际应用中,为了避免代码与 Servlet API 过度耦合,...

    struts2 获取request

    struts2 获取request session对象

    Struts2的Action中获得request response session几种方法

    以下将详细介绍如何在Struts2的Action中获取request、response、session。 ### 1. 使用ActionContext获取request、response、session Struts2的Action可以通过`ActionContext`来间接获取`request`、`response`和`...

    struts2访问application、session以及request等web资源的示例代码

    在Struts2中,访问Web资源,如application、session和request,是常见的操作,这有助于实现数据共享和传递。本示例代码将帮助开发者更好地理解和运用这些功能。 一、Application域对象 Application域对象在所有用户...

    struts2创建 request response session application

    在Struts2框架中,理解并正确使用request、response、session和application范围对于有效地管理数据和状态至关重要。这些范围帮助我们在Web应用程序中实现逻辑和数据流的分离,提高代码的可维护性和可扩展性。通过...

    struts2使用request、response

    除了request和response外,Struts2中session的使用也与Struts1不同。在Struts2中,可以使用`SessionAware`接口或者通过`ActionContext`来获取session对象。 1. **使用SessionAware接口:** - 通过实现`...

    Struts2学习笔记(三) Struts2中访问request,session,和application对象

    在Struts2中,访问request、session和application对象是进行数据共享和传递的重要手段。这篇学习笔记主要探讨了如何在Struts2框架下有效地利用这三种域对象。 首先,request对象代表一次HTTP请求,它存储的数据仅...

    STRUTS2获得session和request

    ### STRUTS2中获取Session和Request的方法 在STRUTS2框架中,有多种方式可以访问`session`和`request`对象。下面我们将详细介绍其中的两种主要方法:实现接口法和使用ActionContext。 #### 实现接口法 STRUTS2...

    Struts2 Request Process Procedure

    在请求被处理之前,ActionContext对象会被初始化,它保存了请求和响应的相关信息,如session、request、parameters等,是Action和插件之间通信的重要载体。 4. **加载配置**: 过滤器会加载配置信息,包括Action...

    struts2综合复习习题

    - OGNL(对象图导航语言)是一种强大的表达式语言,用于在Struts2中访问和操作对象。OGNL的根对象是`ValueStack`,它是Struts2框架内部用于存储请求作用域中的所有对象的容器。 #### 九、在jsp页面中可以通过Struts2...

    struts2中#号的用法

    ### Struts2中#号的用法详解 在Struts2框架中,`#`符号是一种非常重要的语法元素,主要用于访问上下文中的变量。本文将详细介绍`#`符号的使用方法及其应用场景,帮助读者更好地理解和掌握Struts2框架的相关知识。 ...

    struts1.2增删改查分页Filter Session

    - Session管理:存储和读取Session中的用户信息。 通过对这个项目的研究和实践,开发者能够深入理解Struts1.2的架构以及如何在实际项目中有效地运用其特性。同时,这也是提升Web开发技能和掌握MVC模式的一个好方法...

    struts中自定义的tag的Java类中如何获得session

    在Struts框架中,自定义标签是实现动态页面与逻辑处理分离的重要手段之一。通过自定义标签,开发者能够封装复杂的业务逻辑,使JSP页面更加简洁、易维护。本篇文章将详细探讨如何在Struts自定义标签的Java类中获取`...

    struts2 学习重点笔记

    - **自动填充**:Struts2 自动从 request 中获取数据并填充到 Action 对象中。 - **原理**:通过拦截器实现,拦截器会查找与 Action 类中的 setter 方法相匹配的请求参数,并调用这些方法填充数据。 **3.3 数据传递...

    修改题目1,将提交的“用户名信息”保存到request中,“密码信息”保存到session中,

    2.修改题目1,将提交的“用户名信息”保存到request中,“密码信息”保存到session中,而“用户是否已经注册的判定信息”保存在application中,并在显示页面中,分别从request、session和application中获取数据并...

    基于struts2框架商品版本管理系统

    配置文件在Struts2中扮演着关键角色。`struts.xml`是主要的配置文件,定义了Action的映射、结果类型、拦截器栈等。通过这个文件,我们可以控制哪些URL映射到哪个Action,以及Action执行后跳转到哪个视图。此外,还...

    struts2中的ActionContext与ognl

    ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...

Global site tag (gtag.js) - Google Analytics