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初学者-磁盘拉伸缩减篇 在系统的使用过程中,往往会出现这样的问题,由于刚开始无法估计需要的磁盘空间,导致后期磁盘空间不够,使得数据没地方存储,又或者后期磁盘空间过大,造成资源的浪费.这种在使 ...

  2. 转 java - java反射机制创建对象

    转 https://blog.csdn.net/nch_ren/article/details/78814080 1.创建service实现类 package com.springstudy.refl ...

  3. istio使用教程

    kubernetes各版本离线安装包 安装 安装k8s 强势插播广告 三步安装,不多说 安装helm, 推荐生产环境用helm安装,可以调参 release地址 如我使用的2.9.1版本 yum in ...

  4. 实用小工具推荐 OpenWrite

    [实用小工具推荐]给技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵盖了:https://www.openwrite.cn/ 因为工作的关系,认识了很多做技术公众号的小伙伴,同 ...

  5. Mybatis与Spring集成时都做了什么?

    Mybatis是java开发者非常熟悉的ORM框架,Spring集成Mybatis更是我们的日常开发姿势. 本篇主要讲Mybatis与Spring集成所做的事情,让读过本文的开发者对Mybatis和S ...

  6. 破解EFCore扩展Dll --- Z.EntityFramework.Extensions.EFCore

    安装 Z.EntityFramework.Extensions.EFCore Install-Package Z.EntityFramework.Extensions.EFCore -Version ...

  7. Java的几种常见排序算法

    一.所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面. ...

  8. Windbg程序调试系列-索引篇

    最近整理了一下Windbg程序调试系列的文章,做个了索引贴,方便大家查询.搜索: Windbg程序调试系列1-常用命令说明&示例 Windbg程序调试系列1-Mex扩展使用总结 Windbg程 ...

  9. Intent 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android Intent 是一个消息传递对象,主要用于组建之间的通讯,例如:启动Activit ...

  10. Flink 源码解析 —— 源码编译运行

    更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章. 前言 之前自己本地 clone 了 Flink 的源码,编 ...