• HttpServletQequest与HttpServletQespons的常用方法!


    一、HttpServletRequest

    一、概述

    HttpServletQequest 封装了一个HTTP请求,它实际上是从ServletRequset继承而来的。最早设计Servlet时,设计者希望Servlet不仅能处理HTTP,也能处理SMTP等其他协议,因此,单独抽出了ServletRequest接口,但实际上除了HTTP外,并没有其他的协议会用Servlet处理,所以这是一个过度设计。

    二、基本使用方法

    我们通过HttpServletRequest提供的接口方法可以拿到HTTP请求的几乎全部信息,常用的方法有:

    • getMothed():   返回请求路径,例如:“GET”,“POST”;
    • getRequestURI():返回请求路径,但不包括请求参数。
    • getQueryString():返回请求参数
    • getParameter():返回请求参数,GET请求从URL读取参数,POST请求从Body中读取参数;
    • getContentType():获取请求Body类型;
    • getContextPath():获取当前Webapp挂载的路径;
    • getCookies():返回请求携带的所有Cookie;
    • getHeader(name):  获取指定的Header,对Header名称不区分大小写; 
    • getHeaderNames():返回所有的Header名称;
    • getInputStream():如果该请请求带有HTTP Body,该方法将打开一个输入流用于读取Body
    • getReader():和getInputStream()类似,但打开的时Reader;
      getRemoteAddr():返回客户端的地址;
    • getScheme():返回协议类型。

     

     

    二、HttpServletResponse

     一、概述

    HttpServletResponse封装了一个HTTP响应。由于HTTP响应必须先发送Header,再发送Body,所以,操作HttpServletQesponse对象时,必须先调用设置Header的方法,最后调用Body的方法。

    常用的设置Header的方法有:

    • setStatus(sc):设置响应代码,默认是200;
    • setContentType(type):设置Body的类型,类如“text/html”;
    • setCharacterEncoding(cahrset):设置字符编码,例如“utf-8”
    • setHeader(name,value):设置一个Header的值;
    • addCookie(cookie):给响应添加一个Cookie;
    • addHeader(name,value):给响应添加一个Header,因为HTTP协议允许有多个相同的Header;

           写入响应时,需要通过个体getOutputStream()获取写入流,或者通过getWriter()获取字符流,二者只能获取其中一个。

          写入响应前,无需设置setContentLength(),因为底层服务器会根据写入的字节数自动设置,如果写入的数据量很小,实际上会先写入缓存区,如果写入的数据量很大,服务器会自动采用Chunked编码让浏览器能识数据结束符而不需要设置Content-Length头。

          但是,写入完毕后调用flush()确是必须的,因为大部分Web服务器都基于HTTP/1.1协议,会复用TCP连接。如果没有调用flush(),将导致缓冲区的内容无法及时发送到客户端。此外,写入完毕后千万不要调用close(),原因同样是因为会复用TCP连接,如果关闭写入流,使得Web服务器无法复用此TCP连接。

       三、总结

            有了HttpServletRequestHttpServletResponse这两个高级接口,我们就不需要之间处理HTTP协议。注意到具体的实现类是由各服务器提供的,而我们编写的Web应用程序只关心接口方法,并不需要关心具体实现的子类。例如Tomcat服务器针对HttpServletRequest接口的实现类RequestFacade,HttpServletResponse接口的实现类是ResponseFacade。

     

     

     

     

     

     

     

     

  • 相关阅读:
    Unity塔防游戏的制作与实现
    99 # mongo 的基本安装和配置
    go优雅重试
    linux常用操作(vim & SSH服务)
    鱼哥赠书活动第②期:《AWD特训营:技术解析、赛题实战与竞赛技巧》《ATT&CK视角下的红蓝对抗实战指南》《智能汽车网络安全权威指南》上下册
    java计算机毕业设计环巢湖区域旅游网站MyBatis+系统+LW文档+源码+调试部署
    如何通过企业数字化管理降本增效?
    进行LDPC编码时扔掉了前面2Zc的信息位,为何如此设计?在解码时如何恢复?
    探索 ArrayList 原理 - 第一节 ArrayList 集合底层数据结构
    现代化个人博客系统 ModStartBlog v5.5.0 附件归档优化,管理角色备注
  • 原文地址:https://blog.csdn.net/qq_49194786/article/details/126388325