request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每个请求时,服务器都会创建一个request对象,把请求的数据封装到request中,然后在调用Servlet.service()中传递进去.我们在创建一个servlet时通常会使用doGet或者doPost方法,并没有看到service()方法,就是因为父类的service方法已经读取到了request中的请求方式,然后根据请求方式再决定调用你重写的doGet方法还是doPost方法.

  • 一些常见方法:

    • getRemoteAddr()  :获取远程IP地址
    • getMethod():     获取请求方式,GET 或者 POST
    • getHeader(String name) :   获取请求头,例如getHeader("User-Agent"),就可以通过User_agent识别用户操作系统和浏览器信息

这里给出一个url:http://localhost:8080/myPro/AServlet?name="zhangSan"

    • String getScheme():获取协议,http
    • String getServerName():获取服务器名,localhost
    • String getServerPort():获取服务器端口,8080
    • String getContextPath():获取项目名,myPro
    • String getServletPath():获取Servlet路径,/AServlet
    • String getQueryString():获取参数部分,即问号后面的部分。name="zhangSan"
    • String getRequestURI():获取请求URI,等于项目名+Servlet路径。/myPro/AServlet
    • String getRequestURL():获取请求URL,等于不包含参数的整个请求路径。http://localhost:8080/myPro/AServlet
  • 获取请求参数
    • String  getParameter(String name):获取指定名称的请求参数值,适用于单值请求
    • String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求
    • Enumeration<String> getParameterNames():获取所有请求参数名称,可以通过遍历名称获取到每个名称对应的参数值
  • 请求转发和请求包含(在一个请求链中包含多个servlet)
    1. 请求转发:request.getRequestDispatcher("/BServlet").forward(request,response); ---> 最常用
    2. 请求包含:request.getRequestDispatcher("/BServlet").include(request,response);  --->不常用

    那么这两者到底有什么区别呢?假设一个请求先指向了Aservlet,而Aservlet向浏览器输出了一行字"AServlet",然后请求转发到了BServlet,BServlet也向浏览器输出了一行字"BServlet",那么用户在浏览器只能看到"BServlet",而如果是Aservlet请求包含到BServlet,则用户在浏览器中能看到"AservletBservlet",也就是说请求转发不会包含当前servlet的响应体,而请求包含会包含当前页面的响应体,特别注意的是,无论是请求转发还是请求包含都在一个请求范围内,使用的是同一个request和response,而重定向使用了两个request和两个response,这是很大的区别.这里总结一下请求转发和重定向的区别:

  1.  请求转发是一个请求一次响应,而重定向是两次请求两次响应
  2.  请求转发地址栏不变化,而重定向会显示后一个请求的地址
  3.  请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目
  4.  请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名!
  5.  请求转发和重定向效率是转发高!因为是一个请求!
  6.  需要地址栏发生变化,那么必须使用重定向!
  7.  需要在下一个Servlet中获取request域中的数据,必须要使用转发!
  • request域(用来传值)
    1.    void setAttribute(String name, Object value):
    2.    Object getAttribute(String name)

重温Servlet学习笔记--request对象的更多相关文章

  1. 重温Servlet学习笔记--session对象

    session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...

  2. 重温Servlet学习笔记--Cookie对象

    首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以 ...

  3. 重温Servlet学习笔记--response对象

    在用户浏览网页时,服务器对于客户端浏览器做出的响应被封装成一个HttpServletResponse对象,要对浏览器操作只需要操作这个response对象即可.response的功能分类及介绍: 响应 ...

  4. 重温Servlet学习笔记--servletContext对象

    一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...

  5. 重温Servlet学习笔记--编码问题

    在说编码问题之前,首先先了解一下常见的字符编码: ISO-8859-1:  拉丁编码,不支持中文 gbk,gb2312,gb18030:系统默认编码,是中国的国标码 utf-8: 支持几乎所有语言的编 ...

  6. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  7. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  8. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  9. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

随机推荐

  1. List、Map、Set三个接口,存取元素时,各有什么特点?

    List  以特定次序来持有元素,可有重复元素:Set  无法拥有重复元素,内部排序(无序):Map 保存key-value值,value可多值.

  2. Python之路Day16--JavaScript(二)

    本节内容: 1.上节内容回顾 2.JavaScript补充 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 一.上节内容回顾 1.作业问题: a.页面布局不好 ...

  3. 手把手教android studio中安装Android Butterknife Zelezny (转)

    原文地址:http://blog.csdn.net/xin917480852/article/details/51176524 用来快速生成findViewById() 安装方法: 打开Android ...

  4. Java学习笔记1

    学习一个Coursera的Data-structures-optimizing-performance. Working with String in Java Flesh score Flesh s ...

  5. GeoIP Legacy City数据库安装说明

    Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...

  6. TreeView 使用方法:(在View.Details模式下)

    1.建立TreeView的標題         2.建立TreeView的Item         3.在TreeView的Item中的建立SubItem                  如果將各部 ...

  7. PHP基础知识之魔术方法

    __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sle ...

  8. (转载)H.264码流的RTP封包说明

    H.264的NALU,RTP封包说明(转自牛人) 2010-06-30 16:28 H.264 RTP payload 格式 H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) ...

  9. 倒计时的js实现 倒计时 js Jquery

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=987 一.如火如荼的团 ...

  10. java.sql.SQLException: 关闭的连接

    在Dao接口实现类里面的conn.close()之类的关闭数据库连接的代码注释掉就可以了. 可能还有别的解决方法,不过这样改比较方便.