zoukankan      html  css  js  c++  java
  • 重温Servlet学习笔记--request对象

      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)
  • 相关阅读:
    SQLServer.Produce的研究
    petshop以异步方式插入订单的疑惑(后面理解了)
    SQLHelper.GetCachedParameters方法之缓存
    DALFactory抽象工厂理解
    petshop异时消息处理队列抽象工厂
    AJAX学习2(经典)
    对SQLServerDAL.order的研究(不错,有心得)
    Invertory类对商品库存的更新困惑解决了
    AJAX学习1
    用DataSet读取xml文件
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5178839.html
Copyright © 2011-2022 走看看