最近做Java Web项目,在.jsp页面和servlet之间request和response还是有些混淆,查阅了一些资料,总结如下,方便以后使用:

首先,servlet接口是最基本的,提供的五个方法也不多说了,关键是了解清楚什么是request,什么事response。

 void destroy() 
          Called by the servlet container to indicate to a servlet that the servlet is being taken out of service.
 ServletConfig getServletConfig() 
          Returns a ServletConfig object, which contains initialization and startup parameters for this servlet.
java.lang.String getServletInfo() 
          Returns information about the servlet, such as author, version, and copyright.
 void init(ServletConfig config) 
          Called by the servlet container to indicate to a servlet that the servlet is being placed into service.
 void service(ServletRequest req, ServletResponse res) 
          Called by the servlet container to allow the servlet to respond to a request.

简单来说:

request对象是服务器对浏览器请求的封装,而response是服务器对服务器响应的封装。

request用来取出请求信息,而response则用来添加要返回给浏览器的信息。

从常用的途径来说:

request 是请求的载体,它附带着,请求的参数,ip,cookie,session,表单,字符编码,或者上传文件。你可以通过request去获得你所需要的信息。

response是响应的载体,你可以设置,表头,报文,响应文件类型,字符编码,response,自带一个输出流,当你需要将一个页面或者一个文件传到客户端时,你可以通过这个流来进行操作。

说到这里,我们不得不提一下request中最常用的几个方法(可能是我项目经验少,用到的不多),

java.lang.Object getAttribute(java.lang.String name) 
          Returns the value of the named attribute as an Object, or null if no attribute of the given name exists.
 java.lang.String getParameter(java.lang.String name) 
          Returns the value of a request parameter as a String, or null if the parameter does not exist.
 void setAttribute(java.lang.String name, java.lang.Object o) 
          Stores an attribute in this request.

很奇怪,有getAttributes()和setAttributes(),有getParameter()却没有setParameter()?那什么时候用getAttributes()什么时候用getParameter()呢?

1. 好,首先来看getParameter(),getParameter()用来去post或者get提交表单时候,获得表单里的数据,或者是url上的参数,

什么是表单里的数据呢?看这段代码:

<form action="HelloFormServlet" method="GET">
网址名:<input type="text" name="name">
<br />
网址:<input type="text" name="url" />
<input type="submit" value="提交" />
</form>

HTML 表单和提交按钮传递两个值。我们将使用HelloFormServlet 来处理输入

在Servlet中:

String name =new String(request.getParameter("name");
String url = new String(request.getParameter("url"));

那什么是url上的参数呢?比如这样的:

<a href="/ControlCenterServlet?NewTopic.jsp&BoardID=1">××</a>

获取方式也是通过getParameter():

request.getParameter("BoardID");

request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。

2.而setAttributes()和getAttribute()发生在,当两个Web组件之间为转发关系时,转发目标组件通过setAttributes(),getAttribute()方法来和转发源组件共享request范围内的数据。

假定a.jsp和b.jsp之间为转发关系

a.jsp希望向b.jsp传递当前的用户名字,如何传递这一数据呢?先在a.jsp中调用setAttribute()方法:

<%
String username=request.getParameter("username");
request.setAttribute("username",username);
%>
<!-- 转发到b.jsp -->
<jsp:forward page="b.jsp" />

在b.jsp中通过getAttribute()方法获得用户名字:

<% String username=(String)request.getAttribute("username"); %>
username: <%= username %>

request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。这两个方法能够设置Object类型的共享数据。

这篇博客将上述三个方法概括为:

http://blog.csdn.net/zkflame/article/details/51096836

request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据。
request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
getAttribute是返回对象,getParameter返回字符串
总的来说:
request.getAttribute()方法返回reques,sessiont范围内存在的对象
request.getParameter()方法是获取http提交过来的数据

request中的那些方法到底是干什么的?的更多相关文章

  1. Request中的各种方法

    前言 Request中方法众多,对于Java Web程序员来说,种种方法都会在工作中常常用到.Request由于不是JDK的一部分,这些方法的用法也没有专门的API可以查,所以在工作中遇到Reques ...

  2. spinner中的onNothingSelected方法到底什么时候调用?

    这个东东大家在开发中可能不太能用到,所以总是容易被忽略,由于工作原因,我最近琢磨了一下onNothingSelected方法的调用时机问题,其实很简单,只要我们稍微看一下源码就明白了: /** * C ...

  3. java.lang.String中的replace方法到底替换了一个还是全部替换了。

    你没有看错我说的就是那个最常用的java.lang.String,String可以说在Java中使用量最广泛的类了. 但是我却发现我弄错了他的一个API(也可以说是两个API),这个API是关于字符串 ...

  4. nginx 自动忽略request中header name包含下划线参数的解决方法

    使用nginx过程中遇到了个问题,就是request中的header name中如果包含下划线会自动忽略掉,导致服务器接收不到该字段的内容,以下为解决方法: nginx默认request的header ...

  5. Java--获取request中所有参数的方法

    我们通常用到request获取某个参数的方法: String value=request.getparameter("key"); 如果想要获取request中所有的参数呢? re ...

  6. Spring中获取request的几种方法,及其线程安全性分析

    前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...

  7. laravel中请求用例$request可用的一些方法小结

    laravel中$request可用的一些方法小结 1,请求方法的获取 $method = $request->method(); 2,检测请求方法 $res = $request->is ...

  8. [No000016E]Spring 中获取 request 的几种方法,及其线程安全性分析

    前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...

  9. Spring中获取request的几种方法,及其线程安全性分析(山东数漫江湖)

    前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...

随机推荐

  1. JQ学习总结之选择器

    一.window.onload 和 $(document).ready()区别 1)window.onload   执行时机:必须等待网页中所有的内容加载完毕后(包括图片)才能执行. 编写个数:不能同 ...

  2. hdu 4044 树形DP 炮台打怪 (好题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4044 题目大意:给定n个节点组成的树,1为敌方基地,叶子结点为我方结点.我们可以在每个结点安放炮台,至 ...

  3. 从零开始的全栈工程师——js篇2.19(BOM)

    一.BOM 浏览器对象模型 1.window.open(url,ways) url 是打开的网页地址ways 打开的方式 _self 2.window.close() 关闭当前页面 3.window. ...

  4. BZOJ3329: Xorequ(二进制数位dp 矩阵快速幂)

    题意 题目链接 Sol 挺套路的一道题 首先把式子移一下项 \(x \oplus 2x = 3x\) 有一件显然的事情:\(a \oplus b \leqslant c\) 又因为\(a \oplus ...

  5. php支付走过的坑(微信篇 包含h5支付和app支付 注册 秘钥 环境等等配置)

    支付这东西,说容易也容易,说难也难 代码这玩意还比较好说 但是 如果没有demo 直接去看官方文档 十有八九一脸懵逼 今天就整理一下 支付这块走过的坑 涉及 微信h5支付 支付宝h5支付 (api文档 ...

  6. nginx启动时报错

    nginx启动时报错 原因:nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed /var/cache/ngin ...

  7. 青石B2C商城

    平台: Windows 类型: 虚拟机镜像 软件包: azure commercial ecbluestone ecommerce ecommerce solution 服务优惠价: 按服务商许可协议 ...

  8. 对json数据进行排序

    项目有这样一个需要对数据库取出的数据按sort字段进行显示:这个时候想起来在JS中对json数据进行一个排序再进行数据填充可以实现此效果 var colId = "sort";// ...

  9. Linux MySQL 5.1源码安装

    安装必备的软件 yum install ncurses-devel -y yum install pcre pcre-devel -y yum install gcc* -y   解压缩 tar -z ...

  10. Poj (3239),m皇后问题

    题目链接:http://poj.org/problem?id=3239 构造法很牛逼啊,把这个搜索的题直接变成了打表. 我用dfs写了一下. 构造法公式(序列):一.当n mod 6 != 2 或 n ...