非IoC方式
要获得上述对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前 Action的上下文对象。 另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象。
///我们平时用的,这个很好理解
HttpServletRequest request = ServletActionContext.getRequest ();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=ServletActionContext.getRequest().getSession();
///////通过ActionContext获得
ActionContext ac = ActionContext.getContext();
//request
HttpServletRequest request2 = (HttpServletRequest)ac.get(ServletActionContext.HTTP_REQUEST);
//response
HttpServletResponse response2 = (HttpServletResponse)ac.get(ServletActionContext.HTTP_RESPONSE);
//session以下是错误的,会报异常
java.lang.ClassCastException:
org.apache.struts2.dispatcher.SessionMap cannot be cast to javax.servlet.http.HttpSession
//对于session因为从ActionContext 获取的是Map类型,不能强转化成HttpSession类型,这是ActionContext与ServletActionContext的区别
HttpSession session2=(HttpSession)ac.get(ServletActionContext.SESSION);//错
HttpSession session3=(HttpSession)ac.getContext().getSession();//同上
HttpSession session4=(HttpSession)ac.get(ActionContext.SESSION);//错
//session对象被封装成Map,我们对Map操作就可以
Map session5=ac.getSession();
Map session6=ServletActionContext.getContext().getSession();
session5.put("key5", "value5");
session6.put("key6", "value6");
写个例子测试一下:
package com.visit.frame.test;
import java.util.Map;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.*;
import org.apache.struts2.dispatcher.*;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
private String leaveMessage;
public String execute(){
this.setLeaveMessage("here me");
///我们平时用的,这个很好理解
HttpServletRequest request = ServletActionContext.getRequest ();
// HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=ServletActionContext.getRequest().getSession();
///////通过ActionContext获得
ActionContext ac = ActionContext.getContext();
//request
HttpServletRequest request2 = (HttpServletRequest)ac.get(ServletActionContext.HTTP_REQUEST);
//response
// HttpServletResponse response2 = (HttpServletResponse)ac.get(ServletActionContext.HTTP_RESPONSE);
//session
Map session2= (Map) ac.get(ServletActionContext.SESSION);
Map session3=ac.getContext().getSession();//同上
Map session4=(Map) ac.get(ActionContext.SESSION);
//session对象被封装成Map,我们对Map操作就可以
Map session5=(Map)ac.getSession();
Map session6=ServletActionContext.getContext().getSession();
//
request.setAttribute("request", "request0");
session.setAttribute("session", "session0");
request2.setAttribute("request2", "request2");
session2.put("session2", "session2");
session3.put("session3", "session3");
session4.put("session4", "session4");
session5.put("session5", "session5");
session6.put("session6", "session6");
return SUCCESS;
}
public String getLeaveMessage() {
this.leaveMessage="hhhh";
return leaveMessage;
}
public void setLeaveMessage(String leaveMessage) {
this.leaveMessage = leaveMessage;
}
}
请求的页面是:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Simple ha page</title></head>
<body>
<h3>hahaha</h3>
<h3>you success,ha</h3>
<br>
request---<%=request.getAttribute("request") %><br>
request2----<%=request.getAttribute("request2") %><br>
session--<%=session.getAttribute("session") %><br>
<br>------
session2--<%=session.getAttribute("session2") %><br>
session3--<%=session.getAttribute("session3") %><br>
session4--<%=session.getAttribute("session4") %><br>
session5--<%=session.getAttribute("session5") %><br>
session6--<%=session.getAttribute("session6") %><br>
</body>
</html>
页面显示:
hahaha
you success,ha
request---request0
request2----request2
session--session0
------ session2--session2
session3--session3
session4--session4
session5--session5
session6--session6
//////////////////////////////以下转载/////////////////////////////////////////////////////////
在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对象:
-
HttpServletRequestrequest=ServletActionContext.getRequest();
-
ActionContextct=ActionContext.getContext()
-
HttpServletRequestrequest=
-
(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST);
获得session对象:在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而平常我们所说的session则是指HttpSession对象,具体的获得方法如下所示。
-
Mapsession=ActionContext.getSession();
-
Mapsession=(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;}以下是另一篇关于得到Request和Session的文章:
分享到:
相关推荐
Struts2的Action中获得request response session几种方法
(五) jsp内置对象(request,response.session,out) 121 1. request和response 121 2. session 122 (六) Servlet的 xml配置 126 1. xml的文件结构 127 2. 通过web.xml配置文件访问servlet的流程 129 (七) servlet里面...
struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet....
全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...
此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量...
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 23、EJB与JAVA BEAN的区别? Java Bean 是可...
• Before passing it to the Action class, Struts will also conduct form state validation by calling the validation() method on UserActionForm. Note: This is not always wise to do. There might be ways ...
答:Struts1和Struts2是两个完全不同的框架,Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts2以核心控制器FilterDispatcher为基础,包含了框架内部的控制流程和处理机制。 ...
1、struts2对servlet封装(request,response) ,资源调配和资源的映射 2、框架设计的思想 istruts 配置,过滤器,反射 istruts.properties 3、starts2的使用思路 1、jar 2、配置文件 3、常用类 ...
76 5.5.2 JavaBean动作 78 5.6 隐式对象 78 5.6.1 request对象 78 5.6.2 response对象 78 5.6.3 application对象 78 5.6.4 out对象 79 5.6.5 page对象 79 5.6.6 session对象 79 5.6.7 exception对象 80 5.6.8 ...
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 20、EJB与JAVA BEAN的区别? Java Bean 是可复用...
我就是靠这个文档实现logic:iterate的循环的 struts 标签 logic:iterate使用 logic:iterate <br>第一页 是struts官方的说明, 第二页 是个例子 第三页 是我实现的arrayList放入标签的方法。 这是页面...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、application对象...
6.4、response对象 6.4.1、设置头信息 6.4.2、页面跳转 6.4.3、操作Cookie 6.5、session对象 6.5.1、取得Session Id 6.5.2、登陆及注销 6.5.3、判断新用户 6.5.4、取得用户的操作时间 6.6、...