Struts2中操作request,session,application的方法

 

Map类型——request,session,application

真实类型——HttpServletRequest,HttpSession,ServletContext

Map类型是Struts对真实类型的一个封装,会将真实类型映射到Map类型中

 

取得上述元素有以下4种方法

1  通过ActionContext来访问request,session,application对象

2  通过实现RequestAware、SessionAware、ApplicationAware接口来访问request,session,application对象(常用)

3  通过ServletActionContext来访问request,session,application对象

4  通过实现ServletRequestAware接口来访问request,session,application对象

 

马士兵老师对这里的内容讲得非常详细,结合马士兵老师的源码来看一下:

 

第一种方法

package com.bjsxt.struts2.user.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

 

public class LoginAction1 extends ActionSupport {
 
 private Map request;
 private Map session;
 private Map application;
 
 public LoginAction1() {
  request = (Map)ActionContext.getContext().get("request");
  session = ActionContext.getContext().getSession();
  application = ActionContext.getContext().getApplication();
 }
 
 public String execute() {
  request.put("r1", "r1");
  session.put("s1", "s1");
  application.put("a1", "a1");
  return SUCCESS;
 }

}
通过取得Struts的Action的上下文来取得上述三种元素,map类型的。

 

方法二

package com.bjsxt.struts2.user.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction2 extends ActionSupport implements
RequestAware,SessionAware,
ApplicationAware {
 
 private Map<String, Object> request;
 private Map<String, Object> session;
 private Map<String, Object> application;
 
 // IOC 

 public String execute() {
  request.put("r1", "r1");
  session.put("s1", "s1");
  application.put("a1", "a1");
  return SUCCESS;
 }

 

 @Override
 public void setRequest(Map<String, Object> request) {
  this.request = request;
 }

 

 @Override
 public void setSession(Map<String, Object> session) {
  this.session = session;
 }

 

 @Override
 public void setApplication(Map<String, Object> application) {
  this.application = application;
 }
 
}

通过Struts注入进来三个元素,map类型。

 

前台jsp页面获取后台值的方式

<s:property value="#request.r1> | <%=request.getAttribute("r1")%>

<s:property value="#session.s1"/> | <%=session.getAttribute("s1")%>

<s:property value="#application.a1"/> | <%=application.getAttribute("a1")%>

 

 

 

方法三

package com.bjsxt.struts2.user.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction3 extends ActionSupport {
 
 private HttpServletRequest request;
 private HttpSession session;
 private ServletContext application;
 
 public LoginAction3() {
  request = ServletActionContext.getRequest();
  session = request.getSession();
  application = session.getServletContext();
 }
 
 public String execute() {
  request.setAttribute("r1", "r1");
  session.setAttribute("s1", "s1");
  application.setAttribute("a1", "a1");
  return SUCCESS;
 }
 
}

取得的是真实的类型

 

 

 

方法四

package com.bjsxt.struts2.user.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction4 extends ActionSupport implements
ServletRequestAware {
 
 private HttpServletRequest request;
 private HttpSession session;
 private ServletContext application;
 
 
 public String execute() {
  request.setAttribute("r1", "r1");
  session.setAttribute("s1", "s1");
  application.setAttribute("a1", "a1");
  return SUCCESS;
 }

 

 @Override
 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
  this.session = request.getSession();
  this.application = session.getServletContext();
 }
 
}

 

依赖注入,取得的是真实类型

 

 

时间: 2024-12-21 22:47:51

Struts2中操作request,session,application的方法的相关文章

JSP中的page,request,session,application

application|js|request|session application和session比较简单,这里主要说明request和page的作用范围.application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止.session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态.生命周期:会话超时,或者服务器端强制使会话失效.request:请求作用域,就是客户端的一次请求.page:一个J

Python中操作列表之List.append()方法的使用

  这篇文章主要介绍了在Python中操作列表之List.append()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 append()方法追加传递obj到现有的列表. 语法 以下是append()方法的语法: ? 1 list.append(obj) 参数 obj -- 这是在列表中要追加的对象. 返回值 此方法不返回任何值,但更新现有的列表. 例子 下面的例子显示了append()方法的使用. ? 1 2 3 4 5 #!/usr/bin/python   aList

在Python中操作列表之list.extend()方法的使用

  这篇文章主要介绍了在Python中操作列表之list.extend()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 extend()方法追加序列内容到列表. 语法 以下是extend()方法的语法: ? 1 list.extend(seq) 参数 seq -- 这是列表的元素 返回值 此方法不返回任何值,但添加内容到现有列表中 例子 下面的例子显示了extend()方法的使用 ? 1 2 3 4 5 6 7 #!/usr/bin/python   aList = [1

在Python中操作列表之List.pop()方法的使用

  这篇文章主要介绍了在Python中操作列表之List.pop()方法的使用,是Python入门中的基础知识,尤其该方法的返回值在Python编程中经常被灵活运用,需要的朋友可以参考下 pop()方法从列表移除并返回最后一个对象或obj. 语法 以下是pop()方法的语法: ? 1 list.pop(obj=list[-1]) 参数 obj -- 这是一个可选参数,该对象的索引可以从该列表中删除 返回值 此方法返回从列表中移除对象 例子 下面的例子显示了pop()方法的使用 ? 1 2 3 4

Ruby中操作字符串的一些基本方法

  这篇文章主要介绍了Ruby中操作字符串的一些基本方法,包括对字符串的压缩和解压缩等处理,需要的朋友可以参考下 在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示. 简单的字符串文本括在单引号(单引号字符).引号内的文本的字符串值: ? 1 'This is a simple Ruby string literal' 如果需要内放置一个单引号,单引号的字符串文字,在它前面加上一个反斜杠Ruby解释器不认为终止字符串: ? 1 'Won't you r

struts2 获得request session application的四种方式

(一)Map(在web.xml中必须使用2.1以上的配置) public class LoginAction1 extends ActionSupport { private Map request;private Map session;private Map application; public LoginAction1() {request = (Map)ActionContext.getContext().get("request");session = ActionCont

net中chrome无法使用session的问题解决方法

  现象: 1.客户能够 打开登陆界面,样式没有问题. 2.输入用户名密码后,已经开始跳转了,但是立即提示登陆超时. 分析: 1.客户能够 打开登陆界面,样式没有问题: 肯定不是样式出现问题,不是简单的界面问题了. 2.输入用户名密码后,已经开始跳转了,但是立即提示登陆超时 到了提示这一步就说明,说明已经登陆验证通过,并到了验证session是否存在的代码了,但是肯定是session,才会出现这个提示. 3.问题来了:就是创建了session,session马上就丢失了.按照客户的环境,我也试了

Asp.net中判断一个session是否合法的方法

今天突然想到一个判断session是否合法的做法,asp.net的,之前我们的做法是下面这样的形式的:   复制代码 代码如下:  if (Session["UserID"] == "" || Session["UserID"] == null)  {      Response.Redirect("../Login.aspx?m=登录已超时,请重新登陆!");  } 一直我都觉得这个方法很不好,非常不好,但是一直也没找到好的

Asp.net中判断一个session是否合法的方法_实用技巧

复制代码 代码如下:  if (Session["UserID"] == "" || Session["UserID"] == null) {     Response.Redirect("../Login.aspx?m=登录已超时,请重新登陆!"); } 一直我都觉得这个方法很不好,非常不好,但是一直也没找到好的方法,刚才突然就想到和匿名方法,结合??运算符,如果session为空,那么就不合法的了, 可以用来判断用户是否登