zoukankan      html  css  js  c++  java
  • Servlet 常用API学习(三)

    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】。

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

  • 相关阅读:
    C#多线程的简单理解
    CSS中图片水平垂直居中方法小结
    浅析JavaScript的prototype
    记kkpager分页控件的使用
    面试必问的 volatile
    观察者模式——从JDK到Spring
    Java 内存模型都不会,就敢在简历上写熟悉并发编程吗
    工厂模式,就这一篇搞定
    JVM解毒——类加载子系统
    JVM解毒——JVM与Java体系结构
  • 原文地址:https://www.cnblogs.com/albertrui/p/8428789.html
Copyright © 2011-2022 走看看