============================================================

一、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一起使用,完成请求重定向
      请求转发和请求重定向图解:   
        

  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(字符流)发送数据

        

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

        

    案例3:客户端下载文件

        

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

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

        
 
        

    案例6:实现定时刷新

        
 

  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. (学习笔记)laravel 中间件

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

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

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

  3. ASP.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# -- 学习笔记(一)

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

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

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

  8. Rest API 开发 学习笔记(转)

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

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

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

随机推荐

  1. 参数估计:最大似然估计MLE

    http://blog.csdn.net/pipisorry/article/details/51461997 最大似然估计MLE 顾名思义,当然是要找到一个参数,使得L最大,为什么要使得它最大呢,因 ...

  2. Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法

    正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码操作,这样就简化书写,主要是学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作. 弊端:符号定义 ...

  3. Android View架构总结

    View和Activity的区别 android的四大组件,Activity是四大组件中唯一一个用来和用户进行交互的组件.可以说Activity就是android的视图层. 如果再细化,Activit ...

  4. (六十八)使用XMPPFramework登录

    按照XMPPFramework的官方样例,应该把登录代码放置在AppDelegate中,并且让注销成为私有方法. XMPPFramework进行登录的步骤如下: ①连接主机,并且发送JID ②如果连接 ...

  5. 【一天一道LeetCode】#83. Remove Duplicates from Sorted List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  6. 【Swift学习笔记00】——enumeration枚举类型遵循协议protocol

    Apple官方文档:The Swift Programming LanguageProtocols and Extensions一节的小节练习,要求自行定义一个enumeration枚举类型,并且遵循 ...

  7. Chipmunk僵尸物理对象的出现和解决(八)

    如何解决? 等到碰撞方法返回后在调用Star类方法.碰撞方法在物理引擎的一帧内应该会处理完成,在下一帧里碰撞回调已经结束.所以我们将Star类方法的调用放到下一帧里执行即可,代码如下: //... @ ...

  8. Swift基础之Delegate方法的使用

    本文简单介绍了使用Delegate方法的进行值的传递,改变上一个界面的字体大小和颜色 首先创建一个导航视图: let viewC = ViewController();        let navi ...

  9. PHP中关于foreach的简单的用法总结

    在php中使用循环方式输出数组里面的内容有好多种方式,我们既可以采用数组迭代循环的方式,当然也可以采用下面的foreach方法,日常开发中用到的最多就是它.下面我们就先看一下它的用法吧: //语法是: ...

  10. 从模板模式到JdbcTemplate

    模板模式初探 关于模板模式,大家可以参阅 模板方法模式深度解析(一) 原始的jdbc 关于原始的jdbc,如下: import java.sql.Connection; import java.sql ...