Servlet常用API学习 (三)

一、HTTPServletRequest简介

  Servlet API 中定义的 ServletRequest 接口类用于封装请求消息。

  HttpServletRequest 是专用于HTTP协议的ServletRequest 子接口,它用于封装 HTTP 请求消息。

  在 service() 方法内部调用 HttpServletRequest 对象的各种方法来获取请求消息。

  获取请求行的相关信息

  HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:GET /lampbrother/servlet/RequestURI?param1=a&param2=b HTTP/1.1
  getMethod:返回HTTP请求消息中的请求方式。
  getRequestURI:返回请求行中的资源名部分。
  getQueryString :返回请求行中的参数部分。
  getProtocol:返回请求行中的协议名和版本。
  getContextPath:返回请求资源所属于的WEB应用程序的路径。
  getPathInfo:返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
  getPathTranslated:返回URL中的额外路径信息所对应的资源的真实路径。
  getServletPath方法:Servlet的名称或Servlet所映射的路径。

  获取网络连接信息

  getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。 (*)
  getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.atguigu.com”这种格式。
  getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。
  getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。
  getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。
  getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。
  getServerName方法返回当前请求所指向的主机名。
  getServerPort方法返回当前请求所连接的服务器端口号。
  getScheme方法返回请求的协议名,例如http、https或ftp。
  getRequestURL方法返回客户端发出请求时的完整URL。

  获取请求头信息

  getHeader方法
  getHeaders方法
  getHeaderNames方法
  getIntHeader方法
  getDateHeader方法
  getContentType方法
  getContentLength方法
  getCharacterEncoding方法

  获取请求参数

  getParameter方法
  getParameterValues方法
  getParameterNames方法
  getParameterMap方法

  获取请求参数的编程实例

  Enumeration paramNames = request.getParameterNames();
  while(paramNames.hasMoreElements())
  {
      String paramName = (String)paramNames.nextElement();
      out.print(paramName + " : " + request.getParameter(paramName) + "<br>");
      /*如果要考虑同一个请求头名可能出现多次,那么应该用下面的代码段代替上面一行程序代码*/
      /*String [] paramValues = request.getParameterValues(paramName);
      //良好的编程习惯,在使用对象和数组之前先判断其是否为null
      if(paramValues != null)
      {
          for(int i=0;i<paramValues.length;i++)
          {
              out.print(paramName + " : " + (String)paramValues[i] + "<br>");
          }
      }*/

  请求域属性

  存储在ServletRequest对象中的对象称之为请求域属性,属于同一个请求的多个处理模块之间可以通过请求域属性来传递对象数据。

  与请求域属性相关的方法:
  setAttribute方法
  getAttribute方法  
  removeAttribute方法
  getAttributeNames方法

二、HTTPServletReponse简介

  Servlet API中定义的ServletResponse接口类用于创建响应消息。

  HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它用于封装HTTP响应消息。

  请求重定向与请求转发

  RequestDispatcher接口用forward方法实现请求转发 用sendRedirect方法实现请求重定向

请求重定向与请求转发的比较

                                                   注:图片来自百度

三、RequestDispatcher接口

  RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源调用的资源(例如,Servlet、HTML文件、JSP文件等),并可以通过其中的方法将客户端的请求转发给所包装的资源。

  RequestDispatcher接口中定义了两个方法:forward方法和include方法。

  forward和include方法接收的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象,或者是对它们进行了包装的ServletRequestWrapper 或ServletResponseWrapper对象。

  获取RequestDispatcher对象的方法:
  ServletContext.getRequestDispatcher (参数只能是以“/”开头的路径)
  ServletContext.getNamedDispatcher
  ServletRequest.getRequestDispatcher (参数可以是不以“/”开头的路径)

  用sendRedirect方法实现请求重定向

  sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,它还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

  如果传递给sendRedirect 方法的相对URL以“/”开头,则是相对于整个WEB站点的根目录,而不是相对于当前WEB应用程序的根目录。

  请求重定向与请求转发的比较

  RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

  如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

  调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。 

  HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。

  RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

  application域范围的属性

  application 对象(ServletContext对象)内部有一个哈希表集合对象,存储进application对象内的哈希表集合对象中的每对关键字/值被称为application对象的属性。

  存储在application对象中的属性也被称之为application域范围的属性,application域范围的属性可以被当作该WEB应用程序范围内的全局变量使用。

  ServletContext接口中定义了4个分别用于增加、删除、访问application域范围的属性的方法:
  getAttributeNames方法
  getAttribute方法
  removeAttribute方法
  setAttribute方法

如果,您对我的这篇博文有什么疑问,欢迎评论区留言,大家互相讨论学习。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博文感兴趣,可以关注我的后续博客,我是【AlbertRui】。

转载请注明出处和链接地址,欢迎转载,谢谢!

Servlet 常用API学习(三)的更多相关文章

  1. Servlet 常用API学习(二)

    Servlet常用API学习 一.HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议. HTTP是 hypertext transfer pr ...

  2. Servlet 常用API学习(一)

    Servlet常用API学习 一.Servlet体系结构(图片来自百度图片) 二.ServletConfig接口 Servlet在有些情况下可能需要访问Servlet容器或借助Servlet容器访问外 ...

  3. 八 Struts2访问Servlet的API方式三:接口注入

    Struts2访问Servlet的API方式三:接口注入 通过实现ServletRequestAware, ServletContextAware 接口,拿到Request.ServletContex ...

  4. JsRender 前端渲染模板常用API学习

    JsRender 常用API 1. $.templates() $.templates()方法是用来注册或编译模板的,使用的情况有以下几种. 把html字符串编译编译成模板 获取使用script标签声 ...

  5. compass General 常用api学习[Sass和compass学习笔记]

    compass 中一些常用api 包括一些浏览器hack @import "compass/utilities/general" Clearfix Clearfix 是用来清除浮动 ...

  6. (4)获取servlet常用api

    *五)与ServletAPI解耦 方式1 AddAction public String execute() throws Exception, IOException{ //获取请求对象reques ...

  7. Java学习笔记七 常用API对象三

    一.泛型:简单说就是对对象类型进行限定的技术 public class GenericDemo { public static void main(String[] args){ /*泛型作为1.5版 ...

  8. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  9. Java数据持久层框架 MyBatis之API学习三(XML 映射配置文件)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

随机推荐

  1. linux初学者-用户管理篇

    linux的用户管理是非常以后工作中重要的一部分,也是linux系统安全的防线. 1.用户理解 那么到底什么是用户呢?用户就是系统使用者的身份. 用户是以怎样的方式储存在计算机中的呢?在系统中用户存储 ...

  2. java练习---13

    public class Y { public static void main(String[] args) { // TODO Auto-generated method stub new Y() ...

  3. 初探java流操作

    在处理集合时,我们通常会迭代遍历它的元素,并从每个元素上执行某项操作.例如,假设我们想要对某本书中的所有长单词进行计数.首先我们要将所有单词放入一个列表中: String contents = new ...

  4. web渗透---第一天

    了解黑客     黑客: 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现, 灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是 出现了“骇客”与黑客”分家. 黑客:Hacker 骇 ...

  5. Linux基础进程管理

    一.进程 了解如进程的: • PID,PPID • 当前的进程状态 • 内存的分配情况 • CPU和已花费的实际时间 • 用户UID,他决定进程的特权 (一).静态查看进程 # ps axu | le ...

  6. kubernetes离线包分析

    k8s离线包解析 产品地址 鸣谢 大家好,首先感谢大家对我们产品的支持,特别是一些老客户的持续支持,让我可以有动力把这个事情持续进行下去. 感谢大家对付费产品的认可,尊重付费 产品介绍 我们专注于k8 ...

  7. 使用RedisMQ 做一次分布式改造

    引言 熟悉TPL Dataflow博文的朋友可能记得这是个单体程序,使用TPL Dataflow 处理工作流任务, 在使用Docker部署的过程中, 有一个问题一直无法回避: 在单体程序部署的瞬间会有 ...

  8. redis缓存介绍以及常见问题浅析

    # 没缓存的日子: 对于web来说,是用户量和访问量支持项目技术的更迭和前进.随着服务用户提升.可能会出现一下的一些状况: 页面并发量和访问量并不多,mysql足以支撑自己逻辑业务的发展.那么其实可以 ...

  9. restapi(4)- rest-mongo : MongoDB数据库前端的httpserver

    完成了一套标准的rest风格数据库CRUD操作httpserver后发现有许多不足.主要是为了追求“通用”两个字,想把所有服务接口做的更“范generic”些,结果反而限制了目标数据库的特点,最终产生 ...

  10. Spark 系列(七)—— 基于 ZooKeeper 搭建 Spark 高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...