`
mj4d
  • 浏览: 302889 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

struts2中ActionContext和各种Context转化

阅读更多

这里主要来了解struts2的上下文容器:ActionContext。作为struts2执行Action时的上下文,存储了action在执行时需要用到的对象。如我们需要关注的ServletContext,Session, HttpServletRequest ,parameters等。下面是获取这些值的代码

        ActionContext ctx = ActionContext.getContext();
        //Returns a Map of the ServletContext when in a servlet environment or a generic application level Map otherwise.
        Map<String, Object> smap = ctx.getApplication();
        //struts2的context
        Map<String, Object> s2map = ctx.getContextMap();
        //获取原生的HttpServletRequest
        HttpServletRequest request = (HttpServletRequest) ctx.get(StrutsStatics.HTTP_REQUEST);
        //获取请求参数
        Map<String, Object> pmap = ctx.getParameters();
        //Session
        Map<String, Object> session = ctx.getSession();

 

这里我们来关注下ServletContext,在一个spring作为IOC容器的web工程中返回ServletContext信息如下:

org.springframework.web.context.WebApplicationContext.ROOT:  org.springframework.web.context.support.XmlWebApplicationContext@1a3ae73: display name [Root WebApplicationContext]; startup date [Tue Jul 10 13:56:33 CST 2012]; root of context hierarchy
org.apache.catalina.jsp_classpath:/H:/worksa/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/s2web/WEB-
org.apache.jasper.compiler.TldLocationsCache:  org.apache.jasper.compiler.TldLocationsCache@13a46b6
org.apache.tomcat.InstanceManager:  org.apache.catalina.core.DefaultInstanceManager@65dbe8
contextConfigLocation:  classpath:spring.xml
javax.servlet.context.tempdir:  H:\worksa\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\_
org.apache.tomcat.JarScanner:  org.apache.tomcat.util.scan.StandardJarScanner@1563e06
org.apache.catalina.resources:  org.apache.naming.resources.ProxyDirContext@1487217

如上,我们可以获取WebApplicationContext:

        WebApplicationContext context = (WebApplicationContext) smap.get(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

这样我们就获得了spring的上下文环境,比如我们可以取得bean(虽然大多数时候我们不需要这样做)

DataSource dateSource = (DataSource) context.getBean("dataSource");
 

 

如果有需要的话,我们可能更关注servlet参数

//获取请求参数
Map<String, Object> pmap = ctx.getParameters();

这里会获取页面form表单中input的值:包括hidden\text\submit(file除外)等,即便是页面的表单中enctype="multipart/form-data" ,当然这个时候也只能获得非file表单的值。如一个页面表单的值:

age:  [Ljava.lang.String;@1715c20
username:  [Ljava.lang.String;@14d3b51
query:  [Ljava.lang.String;@1575c7e

其实我们知道对于enctype="multipart/form-data" 能够获取到form表单的值,完全得益于

<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

及其底层采用的common-fileupload实现

    <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" />
    <constant name="struts.multipart.handler" value="jakarta" />

 

但是对于原生的HttpServletRequest来说,如果表单的编码为enctype="multipart/form-data" 就没那么简单了,通常是通过读取Stream的方法并通过解析结果返回,如:

        BufferedReader bufferReader = new BufferedReader(request.getReader());
        String line = null;
        StringBuilder buffer = new StringBuilder();

        try {
            while ((line = bufferReader.readLine()) != null) {
                System.out.println(line);
                buffer.append(line);
            }
        } catch (IOException e) {
        }

 

这里顺便介绍下对form表单编码为enctype="multipart/form-data" 时,获取到contentType为

multipart/form-data; boundary=---------------------------265001916915724

后面的boundary是一个不会和文件内容重复的串并通过他把多个文件或者输入域分割开来。如上面的表单会打印

-----------------------------265001916915724
Content-Disposition: form-data; name="age"

aaa
-----------------------------265001916915724
Content-Disposition: form-data; name="username"

123
-----------------------------265001916915724
Content-Disposition: form-data; name="query"

查询
-----------------------------265001916915724--

注意这里request.getReader()如果getInputStream已经被调用会抛出异常IllegalStateException 

 

 

 

 

分享到:
评论

相关推荐

    struts2中的ActionContext与ognl

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

    ActionContext介绍(在Struts2中)

    象,如HttpServletRequest、HttpServletResponse,或者需要访问Session和Application等信息,在Struts2框架中,我们可以利用ActionContext和ServletActionContext这两个类。ActionContext是Struts2提供的一个核心上...

    Struts2通过使用ActionContext类获取request和response对象

    在Struts2中,ActionContext类扮演着重要的角色,它提供了与请求(Request)和响应(Response)对象交互的能力。了解如何通过ActionContext类获取和操作这些对象是开发Struts2应用的基础。 ActionContext类位于`org...

    struts2_OGNL表达式ActionContext及valuesStack

    ActionContext是Struts2框架的核心组件之一,它存储了请求处理过程中的各种上下文信息,如请求参数、会话属性、应用级属性等。通过`#parameters`,你可以获取到HTTP请求的所有参数,如`#parameters.id[0]`等同于`...

    基于struts2注册登录ActionContext.zip

    struts2大量使用拦截器来处理请求,从而允许与业务逻辑控制器 与 servlet-api分离,避免了侵入性(所谓侵入性就是指的这个架构设计出来的部件对系统的影响范围,标签库几乎可以完全替代JSTL的标签库,并且 struts2.x...

    struts2中的OGNL的源码

    4. **上下文(Context)**:存储在解析和执行过程中需要的变量和上下文信息。Struts2的ActionContext就是这样的一个上下文,它包含了请求参数、session、application等信息。 5. **表达式解释器(Expression...

    ActionContext在struts2.0中的详细应用

    在Struts2框架中,ActionContext扮演着至关重要的角色,它是Action执行时的上下文环境,可以理解为一个存储Action执行过程中所需对象的容器。实际上,这个容器是一个Map,用于保存Action执行期间需要的各种信息。 ...

    struts2OGNL表达式ActionContext及valuesStack.pdf

    在Struts2中,OGNL表达式的使用大大提升了代码的可读性和维护性。 首先,`#`字符在OGNL中扮演着关键角色。它主要用于访问OGNL上下文和Action上下文。`#`前缀可以用来获取`ActionContext`,这包含了四个重要的域:...

    马士兵Struts2笔记2013

    Struts2是一个流行的Java web框架,...以上就是"马士兵Struts2笔记2013"中涉及的主要知识点,这些内容涵盖了Struts2的基础配置、数据处理、验证、调试以及与视图层的交互等方面,对于理解和掌握Struts2框架非常有帮助。

    struts2jar包

    在使用Struts2进行开发之前,我们需要先将Struts2的jar包引入到项目中,这样才能利用其提供的API和服务。 Struts2的核心jar包通常包括以下几个部分: 1. **struts2-core.jar**:这是Struts2的核心库,包含了框架的...

    Struts2中访问web元素的例子

    拦截器是Struts2的一大特色,我们可以在拦截器中处理请求和响应,包括访问web元素。例如,创建一个拦截器来获取请求参数: ```java public class MyInterceptor implements Interceptor { @Override public ...

    struts2中request和session的获取

    在Struts2框架中,对request和session的管理和获取是实现Web应用中用户交互和状态维护的重要手段。本文将深入探讨Struts2中如何获取request和session,以及这两种对象的作用和应用场景。 ### Struts2框架简介 ...

    struts2使用request、response

    在Struts2中,虽然request、response和session被隐藏起来,但是提供了多种便捷的方式来获取这些对象,使得开发者可以在自定义的方法中灵活地使用它们。通过使用Struts2提供的接口、注解或ActionContext,开发者能够...

    Struts2的视频学习代码

    8. **Action上下文(ActionContext)**:ActionContext是Struts2中保存请求和会话数据的上下文对象,包含了请求参数、session数据等,可以用来在Action间共享数据。 9. **Struts2与Spring集成**:Struts2可以方便地...

    struts2 API帮助文档

    这个API帮助文档是开发者在使用Struts2框架时的重要参考资料,它详细阐述了框架的各种组件、类库和方法,有助于理解并有效利用Struts2的功能。 1. **Struts2核心组件** - `struts2-core`:这是Struts2框架的核心...

    Struts2 Struts2 超好的Struts2 pdf 文档

    9. **异常处理**:Struts2提供了全局和局部的异常处理机制,可以统一处理应用中的异常情况,提高代码的可维护性和用户体验。 10. **国际化(i18n)**:Struts2支持多语言环境,通过资源包(Properties文件)来实现...

    struts2 向结果传参数

    在Struts2中,结果(Result)是动作(Action)执行后跳转的目标,它可以是一个JSP、Servlet或其他资源。有时我们需要在Action执行后向结果传递参数,以便在目标页面中使用这些参数来呈现数据或执行某些逻辑。本文将...

    struts2中获得request对象

    在Struts2框架中,获取`HttpServletRequest`对象是开发者经常需要进行的操作,因为这个对象包含了HTTP请求的所有相关信息。...理解并熟练运用这些方法,可以提高你在Struts2开发中的效率和代码质量。

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

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

    struts2 项目源码

    7. **ActionContext**:ActionContext是Struts2中一个重要的上下文对象,它保存了请求、会话、应用等范围内的属性。 8. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在...

Global site tag (gtag.js) - Google Analytics