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

一、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. "ORA-20100: 为 FND_FILE 创建文件 o0003167.tmp 失败"

     今天在运行请求时候得到如下的错误日志: 原因:由于ORA-20100:为FND_FILE创建文件o0003167.tmp失败. 在请求日志的错误原因中您会找到更详细的信息. 查找了一些资料,总结 ...

  2. div效果很好的遮盖层效果

    [html] view plaincopyprint? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  3. UNIX网络编程——TCP连接的建立和断开、滑动窗口

    一.TCP段格式: TCP的段格式如下图所示: 源端口号与目的端口号:源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接. 序号:序号表示在这个报文段中的第一个数据字节 ...

  4. Tomcat如何检测内存泄漏

    一般情况下,如果我们重启web应用是通过重启tomcat的话,则不存在内存泄漏问题.但如果不重启tomcat而对web应用进行重加载则可能会导致内存泄漏,因为重加载后有可能会导致原来的某些内存无法让G ...

  5. Linux IPC实践(7) --Posix消息队列

    1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For m ...

  6. VB.NET版机房收费系统---报表

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

  7. Rust语言之HelloWorld

    Rust语言之HelloWorld 参考文档: http://doc.crates.io/guide.html 1 什么是Cargo 相当于maven/ant之于java, automake之于c, ...

  8. android 常用方法集合

    private static Contextcontext; privatestatic Displaydisplay; private static String TAG = "MyToo ...

  9. Android电话拦截实现以及TelephonyManager监听的取消

    由于毕业设计题目涉及到电话拦截这一块.所以鼓捣了一下.遇到了一些问题,总结一下,以免忘记,也希望能帮助其他新人们. 本篇博客目的:实现电话的拦截 会遇到的问题:android studio下AIDL的 ...

  10. 《java入门第一季》之面向对象(重头戏继承来了)

    java特性封装.继承.多态.之前对封装做了简单描述(见http://blog.csdn.net/qq_32059827/article/details/51312116),今天分析另一个特性继承性: ...