• request和response总结


    一、request和response

    * 当服务器接收到请求后,服务器会创建request和response对象,把请求数据封装到request对象中;
    * 然后调用Servlet的service()方法时把这两个对象传递给service()方法;
    * 在service()方法中可以通过request对象获取请求数据,可以使用response对象向客户端完成响应;
    * 每次请求服务器都会创建新的request和response对象,即每个请求有自己独自的request和response对象。

    二、request

    1. request功能介绍
    * 获取请求头
    * 获取请求参数
    * Servlet三大域对象之一
    * 请求包含和请求转发

    2. request域方法
    * void setAttribute(String name, Object value):添加或替换request域属性
    * Object getAttribute(String name):获取request域指定名称的域属性
    * void removeAttribute(String name):移除request域指定名称的域属性
    * Enumeration getAttributeNames():获取所有request域的属性名称

    3. request获取请求头
    * String getHeader(String name):获取指定名称的请求头
    * int getIntHeader(String name):获取指定名称的请求头,把值转换成int类型。
    * Enumeration getHeaderNames():获取所有请求头名称

    4. request请求数据相关其他方法
    重点:
    * String getMethod():获取请求方式
    * String getContextPath():获取上下文路径,即“/” + 应用名称,例如:/day05_1
    * void setCharacterEncoding(String):设置请求体的编码
    * String getRemoteAddr():获取客户端IP地址

    5. 请求参数
    获取请求参数,即获取超链接上的参数和表单中的参数
    * String getParameter(String name):获取指定名称的参数,如果存在同名参数,那么该方法只获取第一个参数值
    * String[] getParameterValues(String name):获取指定名称的参数,因为同名参数的存在,所以返回值为String[]
    * Enumeration getParameterNames():获取所有参数名称
    * Map getParameterMap():获取所有参数,封装到Map中,key为参数名称,value为参数值。

    6.request.getParameter()和request.getAttribute()

    * getParameter()是获取客户端参数,它是从客户端传递给服务器的数据。
    * getAttribute()是获取服务器端自己设置的数据,而不是客户端的数据。
    * request没有setParameter()方法,不能自己设置参数,参数都由客户端传递
    * request有setAttribute()方法,在getAttribute()之前,需要先setAttribute()才能获取到。
    * getAttribute()和setAttribute()是用来在请求转发和请求包含中的多个Servlet中共享数据。

    三、response对象

    1. response简介

    response是响应对象,用来在Servlet的service()方法中向客户端响应数据。
    response的功能如下:
    * 设置响应头
    * 发送状态码
    * 设置响应正文
    * 重定向

    2. response字符编码
    * Tomcat响应数据默认使用ISO-8859-1
    * 通常浏览器默认使用GBK编码
    (1)response.setCharacterEncoding("utf-8");//设置response.getWriter()的字符编码(乱码)

    (2)response.setContentType("text/html;charset=utf-8");
    setContentType()方法有两个作用:
    * 设置字符流编码。等同与调用了response.setCharacterEncoding("utf-8");
    * 设置Content-type响应头,即通知浏览器响应数据的编码为utf-8。
    因为设置字符流的编码为utf-8,所以响应给客户端数据为utf-8编码,因为设置了Content-type头为utf-8,所以浏览器会使用utf-8来解析响应数据
    没有乱码!

    3. response字符流缓冲区

    response字符流缓冲区大小为8KB,当向字符流中写入数据后,数据可能只在缓冲区中,而没有发送到浏览器。
    可以调用response.flushBuffer()或response.getWriter().flush()方法刷新缓冲区,把数据发送到浏览器。

    4. 设置响应头

    response.setHeader("Content-type", "text/html;charset=utf-8");
    等同与
    response.setContentType("text/html;charset=utf-8");

    response.setHeader("Refresh", "5; URL=http://www.itcast.cn");

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

    5. 指定状态码

    response.setStatus(200):设置状态码为200
    response.sendError(404, “您要查找的资源不存在”):设置状态码为404
    repsonse.sendError(500, “服务器出氏了”):设置状态码为500

    在调用sendError()方法时,不只是设置了状态码,而且还会给浏览器一个显示错误的页面。

    6. 重定向

    response.sendStatus(302);
    repsonse.setHeader("Location", "http://www.baidu.com");

    快捷的方法重定向:

    response.sendRedirect("http://www.baidu.com");

    * 重定向是两次请求
    * 重定向不局限与当前应用,也可以是其他应用,例如重定向到百度
    * 重定向响应码为302,而且必须有Location响应头
    * 重定向与response响应流同时使用。

  • 相关阅读:
    SVN使用SASL加密
    SVN提交新加目录下的新加文件处理过程
    Windows Azure Platform
    用Regex来忽略大小替换字符串
    任务管理器显示命令行
    Xftp可以使用SSH协议进行传输
    让Firefox全屏时保留工具栏和标签
    C的0长数组以及__attribute__((packed))_
    XShell下乱码的解决方法
    XShell技巧收集
  • 原文地址:https://www.cnblogs.com/beanjk/p/11251560.html
Copyright © 2020-2023  润新知