整理自网上:

 1.   获取Request和Response的方法

 1.1. ServletActionContext的静态方法

     HttpServletRequest request = ServletActionContext.getRequest();  
     HttpServletResponse response = ServletActionContext.getResponse(); 

 1.2.      ActionContext对象的方法

 ActionContext ctx = ActionContext.getContext();  
 HttpServletRequest request = (HttpServletRequest)ctx.get(StrutsStatics.HTTP_REQUEST);  
 HttpServletResponse response = (HttpServletResponse)ctx.get(StrutsStatics.HTTP_RESPONSE);

 1.3.      ServletRequestAware,ServletResponseAware接口的实现

 1 public class TestActionimplements ServletRequestAware, ServletResponseAware {  
 2          
 3         private HttpServletRequest request;  
 4         private HttpServletResponse response;  
 5        
 6         public void setServletRequest(HttpServletRequest request) {  
 7            this.request = request;  
 8         }  
 9        
         public void setServletResponse(HttpServletResponse response) {  
            this.response = response;  
         }  
     } 

 2.   Request对象的常见应用

Request对象实际上保存的是从浏览器端发送来的请求信息,包括报文头中的信息、浏览器中的Cookie、表单中的数据等等。

 2.1.      获取报文头中的信息

Request对象中提供了很多get方法来提供请求报文头中包含的信息,举例如下:

getServerName()                                 服务器名

getProtocol()                                         协议

getMethod()                                         方法

getServerPort()                                    端口号

getContextPath()                                 Context路径

getServletPath()                                   Servlet路径

getRequestURI()                                  URI路径

getQueryString()                                  查询字符串

getRemoteAddr()                                远程用户IP地址

getRemotePort()                                 远程用户端口号

 2.2.      获取请求发送的数据

Request对象中包含了四个方法来获取浏览器端发送的数据:

String getParameter(String name)                                       获取名为name的参数值

Map getParameterMap()                                                       获取数据的name –value映射表

Enumeration getParameterNames()                                   获取数据的name集合

String[] getParameterValues(String name)                        获取同是名为name的数据的数组

获取到的数据值全部为String类型,与Struts2内置的数据获取形式相比效率较低。

另外,request还有另一套存取数据的方式,即:

void setAttribute(String name, Object value)                存储数据到request对象

Object getAttribute(String name)                               从request对象中获取名为name的数据值

与parameter相比,attribute的区别在于它不是存在于报文中并解析出来的,而是直接存在于request对象内部的,它会随request对象的消亡而丢失。

 2.3.      获取与该Request相关的Session

HttpSession getSession()                                           获取该Request所在作用域的Session

String getRequestedSessionId()                                 获取上述Session的ID

 2.4.      跳转

request.getRequestDispatcher(String path).forward(HttpServletRequest request, HttpServletResponse response) throws IOException

request对象可以指定一个路径,并跳转到那个路径,这个跳转可以把当前action(servlet)中的request对象和response对象一并传递过去,基本不会丢失request请求中的数据信息以及response中的设置。

3.   Response对象的常见应用

与request对象相比,response对象的用途似乎少了许多,因为无论是Struts2的action(其实质也是Servlet)还是 Servlet,执行完跳转到下一个页面的过程实际上就是对下一个页面发送请求,因此需要传递的数据都会保存在request对象中作为 attribute。response对象通常用于不向新页面发送请求的时候,对于Servlet来说,就是直接在Servlet中绘制JSP页面(通过 PrintWriter getWriter()方法)的情况,或者需要绘制图像、传送JSON/ XML数据的情况。

通常情况下,在Struts2中很少会用到response对象。对于response对象的常见用法参见如下链接:

http://blog.163.com/hero_213/blog/static/39891214200922523616393/

3.1.      重定向

response.sendRedirect(String location)

虽然在Struts2里,通过上述方法来进行重定向显得非常没有必要,但是因为很多公司的面试题都会考到,所以还是有必要记一下。这种重定向操作相当于丢弃当前所有的数据信息,直接打开新的链接。与request对象中的forward方式相比,它更快,因为不包含数据。

之所以说它已经被Struts2所淘汰,是因为在struts.xml中配置action的时候,可以在<result>标签中添加type=”redirect”属性,这时的跳转就是重定向了。

4.   总结

虽然罗列了这么多,但是从Struts2的角度上讲,上述的方法除了获取Session、Cookie以及一些必要的报文头信息以外,基本上都已经 过时了。这也正是Struts2将request和response隐藏了的原因,Struts2框架本身已经提供了其它的实现上述功能的途径。不过了解 了总是好了,知其然亦知其所以然。

Struts2:request & response的更多相关文章

  1. ZeroMQ之Request/Response (Java)

    自己最开始是在cloud foundry中接触过消息服务器(nats),或者说是消息中间件,也算是初步知道了一个消息服务器对于分布式的网络系统的重要性,后来自己也曾想过在一些项目中使用它,尤其是在一些 ...

  2. 【docker】centos7 上拉取docker镜像,一直拉取不到,报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w

    镜像拉取一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cancel ...

  3. 五:request和response的使用

    接着上一篇我们在搞完servlet的终极模式之后,接着就需要对发送的请求做出响应了 在这里,所谓的响应,都是返回页面的语言在浏览器上显示也就是HTML语言,所以返回的结果只有HTML语言才能在浏览器上 ...

  4. struts2:拦截器

    拦截器(Interceptor)是Struts 2的核心组件,Struts 2框架的大部分功能都是通过拦截器来完成的,例如数据校验,国际化,文件上传和下载等.为了实现这些功能,Struts 2框架提供 ...

  5. request+response+jsp+el+jstl

    response: 1.设置响应行的状态码: response.setStatus(int sc); 2.设置response缓冲区的编码:response.setCharacterEncoding( ...

  6. Struts2获取request的几种方式汇总

    Struts2获取request三种方法 struts2里面有三种方法可以获取request,最好使用ServletRequestAware接口通过IOC机制注入Request对象. 在Action中 ...

  7. 09 Request/Response

         Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象      request和response对象即然代表 ...

  8. Ng Http Request/response格式转换

    angular作为Single Page Application推荐的交互方式当然是基于json的ajax调用.但今天要说的是当你不幸工作在一个遗留或者不可控制的服务上,而这服务是基于非json提交方 ...

  9. 过滤器中的chain.doFilter(request,response)

    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要 ...

随机推荐

  1. python基础——字典(dict)

    字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 . dict1 = {} ...

  2. java 第五章

    java 第五章   while 循环语句 语法:while(循环条件){ //循环操作 循环条件自加: } while循环结构的特点:先判断,在执行.    while   的执行步骤 (1) 声明 ...

  3. ansible-service

    #service#查询服务状态 ansible server01 -m service -a "name=httpd state=started" #停止服务 ansible se ...

  4. Netty+WebSocket 获取火币交易所数据项目

    Netty+WebSocket 获取火币交易所时时数据项目 先附上项目项目GitHub地址 spring-boot-netty-websocket-huobi 项目简介 本项目使用 SpringBoo ...

  5. 入门MySQL——基础语句篇

    前言:  前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及 ...

  6. PHP后门***详解

    说起php后门***我就心有愉季啊前不久一个站就因不小心给人注入了然后写入了小***这样结果大家知道的我就不说了下面我来给大家收集了各种php后门***做法大家可参考. php后门***对大家来说一点 ...

  7. Spring 源码学习(一)-容器的基础结构

    关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料 展示的代码摘取了一些核心方法,去掉一些默认设置和日志输出,还有大多数错误异常也去掉了,小伙伴想看详细代码 ...

  8. Kalman Filter、Extended Kalman Filter以及Unscented Kalman Filter介绍

    模型定义 如上图所示,卡尔曼滤波(Kalman Filter)的基本模型和隐马尔可夫模型类似,不同的是隐马尔科夫模型考虑离散的状态空间,而卡尔曼滤波的状态空间以及观测空间都是连续的,并且都属于高斯分布 ...

  9. 【算法】【排序】【插入类】希尔排序 ShellSort

    #include<stdio.h> #include <time.h> #include<stdlib.h> int main(){ ]; //设立随机数 sran ...

  10. ns3 802.11b PHY model

    I use the ubuntu and do not install the chinse input. The Code: c file requires gnu gsl library, it ...