day09_request&response学习笔记

时间:2021-07-24 01:17:05
============================================================

一、HttpServletResponse接口

p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New Roman"; font-size: 10.5000pt }
h1 { margin-top: 17.0000pt; margin-bottom: 16.5000pt; page-break-after: avoid; text-align: justify; line-height: 240%; font-family: "Times New Roman"; font-weight: bold; font-size: 22.0000pt }
h2 { margin-top: 13.0000pt; margin-bottom: 13.0000pt; page-break-after: avoid; text-align: justify; line-height: 172%; font-family: Arial; font-weight: bold; font-size: 16.0000pt }
h3 { margin-top: 5.0000pt; margin-bottom: 5.0000pt; text-align: left; font-family: 宋体; font-weight: bold; font-size: 13.5000pt }
span.10 { font-family: "Times New Roman" }
span.15 { font-family: "Times New Roman"; color: rgb(0,0,255); text-decoration: underline }
span.msoIns { text-decoration: underline; color: blue }
span.msoDel { text-decoration: line-through; color: red }
div.Section0 { }

    学好HttpServletResponseHttpServletRequest的关键是:理解HTTP协议。
 
    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
    (注意:request和response分别表示的是对象名,实际上不是对象)
 
    request和response对象既然代表请求和响应,
    那我们要获取客户端提交过来的数据,只需要找request对象就行了。
    要向容器(服务器)输出数据,只需要找response对象就行了。
 
    因为每一的请求都会调用一次service(request, response)方法。
    方法的形参request和response是由服务器创建的,在service执行之前就已经创建好了,分别是两个对象(是不需要new的,服务器帮你干了)。

  1、响应消息行  HTTP/1.1  200 OK

        HTTP/1.1 200 OK
        协议/版本 响应状态码 对响应码的描述(一切正常)
 
    HttpServletResponse接口的方法:
        void setStatus(int sc) 设置响应状态码
        response.setStatus(302);
        response.setHeader("location", "url");
        // 上面两句代码等价于下面一句
        response.sendRedirect("location");
           Location:http://www.it315.org/index.jsp 指示新的资源的位置通常和302/307一起使用,完成请求重定向
      请求转发和请求重定向图解:   
        day09_request&response学习笔记

  2、响应消息头

    HttpServletResponse接口的方法:
      void sendRedirect(String location) 请求重定向
      void setHeader(String name, String value) 设置响应消息头信息
 
      // 设置客户端(浏览器)使用什么编码(通过响应消息头设置)
      response.setHeader("content-type", "text/html; charset=UTF-8");
 
      // 告知客户端不缓存
      response.setHeader("pragma", "no-cache");
      response.setHeader("cache-control", "no-cache");
      response.setDateHeader("expires", 0);
 
      Referesh刷新

  3、响应正文(主体)

    ServletResponse接口的方法:
      PrintWriter getWriter() 获取字符输出流
      ServletOutputStream getOutputStream() 获取字节输出流
      void setCharacterEncoding(String charset) 设置服务器使用什么编码
      String setContentType(String type) 设置将发送到客户端的响应的内容类型(同时设置客户端和服务端要使用的编码)
            例如:response.setContentType("text/html; charset=UTF-8");
 
      URLEncoder是HTML格式编码的实用工具类,该类包含了将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法。
 

      案例1:向客户端输出中文数据:用PrintWriter(字符流)发送数据

        day09_request&response学习笔记

    案例2:向客户端输出中文数据:用OutputStream(字节流)发送数据

        day09_request&response学习笔记

    案例3:客户端下载文件

        day09_request&response学习笔记

     案例4:自己编写代码实现客户端网页显示验证码

    案例5:通过验证码工具类实现客户端网页显示验证码

        day09_request&response学习笔记
 
        day09_request&response学习笔记

    案例6:实现定时刷新

        day09_request&response学习笔记
 

  4、response的几处细节

      1. getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。

      2. getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。否则会抛异常。
      3. Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,
         Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
      4. Serlvet的service方法结束后,Servlet引擎将检查getOutputStream或getWriter方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。
         (注:这里的Servlet引擎就是Tomcat服务器)
============================================================

二、HttpServletRequest

  1、请求消息行  

      Get http://localhost:8080/day09_01_HttpServletRequest/servlet/req1?username=zs&pwd=123 HTTP/1.1
    HttpServletRequest接口的方法:
      String getMethod() 获取请求行的请求方式
      String getRequestURL() 返回客户端发出请求时的完整URL
      String getRequestURI() 返回请求消息行中的资源名部分(8080之后所有的)
      String getContextPath() 获取当前应用的虚拟目录 例如:/day09_01_HttpServletRequest
      String getQueryString() 返回请求消息行中的参数部分

  2、请求消息头

    HttpServletRequest接口的方法:
      String getHeader(String name) 根据头名称得到头信息值
      Enumeration getHeaderNames() 获取所有请求消息头的name
      Enumeration getHeaders(String name) 获取相同请求消息头名称的信息值

  3、请求正文(重要)

    与获取表单数据相关的方法:
      <input type="text" name="username" />
    ServletRequest接口的方法:
      String getParameter(String name) 根据表单中name属性的名,获取value属性的值
      String[] getParameterValues(String name) 专为复选框获取值提供的方法
 
      Enumeration getParameterNames() 获取表单提交的所有的name名
      Map getParameterMap() 获取表单提交的所有value值  (做框架时用,非常实用)
 
      ServletInputStream getInputStream 以字节流的方式得到所有表单数据
 
    与操作非表单数据相关的方法:(request也是一个域对象,也维护了一个Map集合,只是作用的范围较小,在当前请求范围内有效)
    ServletRequest接口的方法:
      void setAttribute(String name, Object value)
      Object getAttribute(String name)
      void removeAttribute(String name)
 

    与请求转发相关的方法:

    ServletRequest接口的方法:
      // 得到请求转发或请求包含的协助对象
      RequestDispatcher getRequestDispatcher(String path)
 
     RequestDispatcher接口的方法:
        void forward(ServletRequest request, ServletResponse response) // 转发的方法
        void include(ServletRequest request, ServletResponse response) // 请求包含
 
  与请求编码相关的方法:
  ServletRequest接口的方法:
    // 解决post提交方式的编码
    request.setCharacterEncoding("UTF-8"); // 告诉服务器要使用什么码表,注:只能处理post请求方式
 
    // 解决get提交方式的编码(需要一个一个变量的转换,麻烦,用的不多,一般用在地址栏上明文写的链接上,因为明文是get方式提交)
    String name = new String(name.getBytes("iso-8859-1"), "UTF-8");
 
    注:一般而言,默认是get提交方式,所以我们在写表单的html代码时,要立即把表单的属性method="post" 最好。
============================================================

day09_request&response学习笔记的更多相关文章

  1. &lpar;学习笔记&rpar;laravel 中间件

    (学习笔记)laravel 中间件 laravel的请求在进入逻辑处理之前会通过http中间件进行处理. 也就是说http请求的逻辑是这样的: 建立中间件 首先,通过Artisan命令建立一个中间件. ...

  2. ASP&period;Net开发基础温故知新学习笔记

    申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在H ...

  3. ASP&period;Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  4. Android M Permission 运行时权限 学习笔记

    Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...

  5. 操作系统学习笔记(五)--CPU调度

    由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...

  6. 初学c&num; -- 学习笔记(一)

    初学c# -- 学习笔记(一) 学习C#了,参考许多资料,一步步学习.这一段学习ajax的工作原理,参照其他例子写了web版的群聊小程序,全部文件代码也就不到300行,很简单.使用时先输入用户名,点确 ...

  7. 测试Servlet生命周期学习笔记

    测试环境:windows xp旗舰版 软件环境:myclipse8.5+tomcat7.0 ****************************************************** ...

  8. Rest API 开发 学习笔记&lpar;转&rpar;

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  9. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

随机推荐

  1. Memcached和Redis比较

    一.存储 Memcached基本只支持简单的key-value存储方式.Redis除key-value之外,还支持list,set,sorted set,hash等数据结构:Redis支持数据的备份, ...

  2. Beta版本冲刺Day2

    会议讨论 628:       和建平同学一起合作解决了如何获取勾选事件,将勾选的课程信息存入select表格中.但是当运行更新后的项目遇到了无法连接数据库的问题了,目前还在解决中. 因为碰到了这样的 ...

  3. 1320&period; Graph Decomposition

    1320 简单并查集 #include <iostream> #include<cstdio> #include<cstring> #include<algo ...

  4. sql数据库链接

    针对数据库只能链接计算机名称不能进行点(.)或者local本地链接的问题.主要会出现在刚装完系统的用户. 解决方法: 首先从SQL Server配置管理器中找到SQL Server网络配置的协议:TC ...

  5. 单点登录,session,jsonp(待更新)

    单点登录理解: 单点登录系统设计: ajax跨域:

  6. 阿里云API网关(14)流控策略

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  7. Dynamics CRM2016 业务流程之Task Flow&lpar;一&rpar;

    Task Flow 属于CRM移动端的特性,如果在项目实施中用不到CRM自带的APP或者对自APP不感冒的,那就没有往下看的必要了,移步吧. 该功能默认是不开启的,需要我们去系统设置中开启它,打勾,选 ...

  8. django2&plus;uwsgi&plus;nginx上线部署到服务器Ubuntu16&period;04(最新最详细版)

    1.前期准备 1.打开Terminal终端,执行以下命令,将项目所需要的依赖包,都记录到一个文件内备用. pip freeze >requirements.txt 2.将项目文件夹→右键→添加压 ...

  9. Spring Boot用Cxf的jax-ws开发WebService

    首先上项目的pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...

  10. Alpha冲刺9

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10034872.html 作业博客:https://edu.cnblogs.com/campus ...