`

Struts2如何创建和操作request ,response,session 对象

阅读更多

Struts 2提供了多种方式来访问上述的三种对象,归结起来,可以划分为两大类:与Servlet API解耦的访问方式和与Servlet API耦合的访问方式。

与Servlet API解耦的访问方式(IoC方式)

为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象, 在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存和读取 数据。

要获取这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类,ActionContext 是action执行的上下文,在ActionContext中保存了action执行所需的一组对象,包括parameters、request、 session、application和locale等。ActionContext类定义了如下方法,用于获取 HttpServletRequest、HttpSession和ServletContext对应的Map对象。

Ø public Object get(Object key)

ActionContext类没有提供类似getRequest()这样的方法来获取封装了HttpServletRequest的Map对象。要得到请求Map对象,你需要为get()方法传递参数“request”。

Ø public Map getSession()

获取封装了HttpSession的Map对象。

Ø public Map getApplication()

获取封装了ServletContext的Map对象。

我们看 通过ActionContext来获取request、session和application对象的LoginAction1

1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            68
            69
            
package action;
             
            import java.util.Map;
             
            import dbPackage.User;
             
            import com.opensymphony.xwork2.Action;
             
            import com.opensymphony.xwork2.ActionContext;
             
            public class LoginAction1 implements Action
             
            {   private User user;
             
            public User getUser()
             
            { return user;
             
            }
             
            public void setUser(User user)
             
            { this.user = user;
             
            }
             
            @SuppressWarnings("unchecked")
             
            @Override
             
            public String execute() throws Exception
             
            {
             
            if("zhangsan".equals(user.getUsername())&& "1234".equals(user.getPassword()))
             
            { ActionContext context = ActionContext.getContext();
             
            Map request = (Map)context.get("request");
             
            Map session = context.getSession();
             
            Map application = context.getApplication();
             
            //在请求中放置欢迎信息。
             
            request.put("greeting", "欢迎您来到JavaEye");
             
            //在session中保存user对象
             
            session.put("user", user);
             
            //统计用户访问量,在application中保存用户访问量数据
             
            Integer count = (Integer)application.get("counter");
             
            if(null == count) count=1;
             
            else count++;
             
            application.put("counter", count);
             
            return SUCCESS;
             
            }else {
             
            return ERROR;
             
            } }}

在成功页面中,可以使用JSP内置的表达式语言来访问request、session和application范围的数据,代码如例3-12所示。

例3-12 success.jsp

1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            
<%@ page contentType="text/html;charset=GBK" %>
             
            <html>
             
            <head><title>欢迎页面</title></head>
             
            <body>
             
            <h3>${sessionScope.user.username},${requestScope.greeting}<br>
             
            本站的访问量是:${applicationScope.counter}</h3>
             
            </body>
             
            </html>

与Servlet API耦合的访问方式(非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 = request.getSession();

如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象。

 

分享到:
评论

相关推荐

    struts2创建 request response session application

    一个Demo告诉你struts2如何创建 request response session application

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

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

    struts2使用request、response

    struts1中使用request、response都是方法自带的,而struts2中的request、response、session都被隐藏的了,该带代码文档会清晰的让你明白struts2中request、response在自定义方法中如何随意使用

    STRUTS2获得作用域、参数响应对象及三种符号说明

    RequestMap,SessionMap,ApplicationMap, AttributeMap. struts提供两种方式访问session,request ,response,ActionContext 使用。 获得作用域及参数响应对象及三种符号说明

    从J2SE到J2EE知识点介绍

    1.类和对象 6 2.类的声明 7 3.成员变量的声明 8 4成员方法的声明 8 5.创建对象 9 6.对象的使用 9 7.对象的初始化 10 8.类的封装 11 9.实例成员和类成员 13 (四).类的继承 14 1.创建子类 14 2.this引用、super引用 ...

    POI导入导出EXCEL文件.(struts 1.x and struts2.x).doc

    struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet....

    BaseAction

    在Struts2中,操作Servlet API 的BaseAction 包括获取Request对象、获取Session对象、获取ServletContext对象、获取Response对象

    struts2的学习笔记+测试源代码

    如何获取request,session,response对象 博文链接:https://wuzhaohuixy-qq-com.iteye.com/blog/710102

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    J2EE应用开发详解

    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 ...

    李兴华Java Web开发实战经典(高清版) Part2

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、...

    java面试题

    Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...

    超级有影响力霸气的Java面试题大全文档

    EJB容器是EJB组件的代理, EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 24、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不...

    struts 标签 logic:iterate使用 logic:iterate

    ActionForm form, HttpServletRequest request, HttpServletResponse response) { InformationForm informationForm = (InformationForm) form;// TODO Auto-generated method stub //业务开始 ...

    django框架实现模板中获取request 的各种信息示例

    在做网页程序时,request,response 是少不了的,这是最基本的东西。但 django有自己的框架,在展示层,很少用到直接去取request的内容的。我以前做过java j2ee应用,有时候,经常在jsp页面用request 直接取得想要的...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、数据源操作...

    java web 视频、电子书、源码(李兴华老师出版)

    10.2.2、调用内置对象操作 10.2.3、接收请求参数 10.3、集合操作 10.4、在MVC中应用表达式语言 10.5、运算符 10.6、本章摘要 10.7、开发实战讲解(基于Oracle数据库) 第11章 Tomcat数据源 11.1、...

Global site tag (gtag.js) - Google Analytics