Servlet 常用API学习(三)

时间:2022-10-15 14:53:47

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方法实现请求重定向

请求重定向与请求转发的比较
Servlet 常用API学习(三)

                                                   注:图片来自百度

三、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学习&lbrack;Sass和compass学习笔记&rsqb;

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

  6. &lpar;4&rpar;获取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总结&lpar;三&rpar;--图像变换API

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

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

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

随机推荐

  1. iOS 类微信语音播放之切换听筒和扬声器的方法解决方案

    [[UIDevice currentDevice] setProximityMonitoringEnabled:NO];   //建议在播放之前设置yes,播放结束设置NO,这个功能是 //添加监听 ...

  2. &lbrack;转&rsqb;IoC模式

    IoC模式 1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它 ...

  3. ruby 除法运算

    在Ruby中根据运算对象的值的不同进行不同的操作.除法运算符"/"的两边同为Interger对象时运算符进行整除运算,其中任意一方为Float对象时进行实数的除法运算. 7 / 2 ...

  4. 每日一九度之 题目1041:Simple Sorting

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4883 解决:1860 题目描述: You are given an unsorted array of integer numbers. ...

  5. MySQL 5&period;7 启用查询日志

    MySQL版本:5.7 新版本的 my.ini 文件改动了,导致原先启用查询日志的方法不再适用 新版本的启用方法如下: 1. 修改 C:\ProgramData\MySQL\MySQL Server ...

  6. Android之AlarmManager&lpar;全局定时器&sol;闹钟)指定时长或以周期形式执行某项操作

    1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...

  7. vim学习与理解

    1. 转变思维 --> vim 无鼠标文本编辑工具 在鸟哥的linux私房菜中,是这么说明linux的: 1. vim是linux like系统中非常强大的一个文本编辑工具,历史悠久,很多系统都 ...

  8. linux下休眠&sol;待机命令

    http://blog.csdn.net/hshl1214/article/details/6228275

  9. PJSUA2开发文档--第四章 端点ENDPOINT

    4.端点ENDPOINT Endpoint类是一个单例类,应用程序必须在此类实例之前创建一个并且最多只能创建一个,然后才能执行任何操作.同样,一旦这个类被销毁,应用程序就不能调用该库的任何API.这个 ...

  10. jquery&period;lazyload 使用

    1.引用js <script src="jquery.js" type="text/javascript"></script> < ...