整理自网上:

 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. 【iOS】receiver type *** for instance message is a forward declaration

    错误原因:没有引入相关的头文件 http://stackoverflow.com/questions/8815200/receiver-type-for-instance-message-is-a-f ...

  2. scripts may close only the windows that were opened by it 浏览器JS控制无法关闭当前页面

    非window.open形式打开的子页面用js的window.close在chrome下就会提示scripts may close only the windows that were opened ...

  3. java基础精选题

    Integer比较 看下面这段有意思的代码,对数字比较敏感的小伙伴有没有发现异常? public static void main(String[] args) { Integer a = 128,b ...

  4. 记一次IDEA 打包环境JDK版本和生产环境JDK版本不一致引发的血案

    问题描述: 本地开发环境idea中能正常运行项目,而idea打war包到Linux服务器的Tomcat下却不能正常运行,报如下错误: 09-Aug-2019 08:56:06.878 SEVERE [ ...

  5. 利用cookie实现浏览器中多个标签页之间的通信

    原理: cookie是浏览器端的存储容器,而且它是多页面共享的,利用cookie多页面共享的特性,可以实现多个标签页的通信. 比如: 一个标签页发送消息(将发送的消息设置到cookie中),一个标签页 ...

  6. 100天搞定机器学习|day38 反向传播算法推导

    往期回顾 100天搞定机器学习|(Day1-36) 100天搞定机器学习|Day37无公式理解反向传播算法之精髓 上集我们学习了反向传播算法的原理,今天我们深入讲解其中的微积分理论,展示在机器学习中, ...

  7. 【I'm Telling the Truth】【HDU - 3729】 【匈牙利算法,DFS】

    思路 题意:该题主要说几个同学分别说出自己的名次所处区间,最后输出可能存在的未说谎的人数及对应的学生编号,而且要求字典序最大. 思路:刚刚接触匈牙利算法,了解的还不太清楚,附一个专门讲解匈牙利算法的博 ...

  8. C# 一个计算器功能实现引发的思考

    一.需求 计算器功能需求,这个众所周知,很明确了. 二.步骤分析 1)初级实现计算器 static int Calculator(int a,int b,string str) { switch(st ...

  9. Kali Linux无法访问网络的问题

    首先 ping www.baidu.com ping: unkown host www.baidu.com 然后 ping 8.8.8.8 connect:network is unreachable ...

  10. DC-2靶机渗透

    靶场下载链接: Download: http://www.five86.com/downloads/DC-2.zip Download (Mirror): https://download.vulnh ...