Request对象和Response对象

Request对象

  • 当客户端请求服务器时,会遵循http协议将请求信息包装成Request对象。

常用方法

  • 具体功能分为四类
    • 封装了请求头数据的
    • 封装了正文数据的,如果是Get就没有正文。
    • request是一个域对象,可以当做map来存储对象。
    • 请求转发和请求包含功能。

获取请求头

//获取请求头
Enumeration<String> list =  req.getHeaderNames();
while(list.hasMoreElements()){
    String key = list.nextElement();
    System.out.println(key+"----->"+req.getHeader(key));
}
  • 重要的请求头
头信息 描述
host 这个头信息指定原始的 URL 中的主机和端口。
connection 这个头信息指示客户端是否可以处理持久 HTTP 连接。持久连接允许客户端或其他浏览器通过单个请求来检索多个文件。值 Keep-Alive 意味着使用了持续连接。
user-agent 这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。
accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常见的两种可能值。
accept-encoding 这个头信息指定浏览器知道如何处理的编码类型。值 gzip 或 compress 是最常见的两种可能值。
accept-language 这个头信息指定客户端的首选语言,在这种情况下,Servlet 会产生多种语言的结果。例如,en、en-us、ru 等。
Content-Length 这个头信息只适用于 POST 请求,并给出 POST 数据的大小(以字节为单位)
Cookie 这个头信息把之前发送到浏览器的 cookies 返回到服务器。
If-Modified-Since 这个头信息表示只有当页面在指定的日期后已更改时,客户端想要的页面。如果没有新的结果可以使用,服务器会发送一个 304 代码,表示 Not Modified 头信息。
If-Unmodified-Since 这个头信息是 If-Modified-Since 的对立面,它指定只有当文档早于指定日期时,操作才会成功。

其他

         //获取session,没有session则创建一个全新的session
        HttpSession session = req.getSession();
        //获取Cookie
        Cookie[] cookies = req.getCookies();

        //返回参数名称集合
        Enumeration<String> parameterKeys = req.getParameterNames();
        //根据名称获取参数
        String parameter = req.getParameter("username");
        //返回参数数组,如多选框 localhost:8888/user?like=ball&like=pear&like=blue
        String[] parameters = req.getParameterValues("like");
        //获取请求主体的编码格式 没有返回null
        String characterEncoding = req.getCharacterEncoding();
        //返回请求主体的MIME类型,如text/html;charset=ISO-8859-1,不知道类型返回null
        String conentType = req.getContentType();
        //获取网站根目录,如http://localhost:8088/javaweb01_war/user ,返回javaweb01_war
        String contextPath = req.getContextPath();
        //获取请求方法
        String method = req.getMethod();
        //返回与客户端发送的 URL 相关的任何额外的路径信息。
        String pathInfo = req.getPathInfo();
        //获取协议版本 如 HTTP/1.1
        String protocol = req.getProtocol();
        //获取客户端的ip地址 如 127.0.0.1
        String remoteAddr = req.getRemoteAddr();
        //返回发送请求的客户端的完全限定名称 ,查到的还是 127.0.0.1
        String remoteHost = req.getRemoteHost();
        //获取请求的URI, 如 http://localhost:8088/javaweb01_war/user 的 /javaweb01_war/user
        String requestURI = req.getRequestURI();
        //返回由客户端指定的 session 会话 ID, 如 5393E50054877FF8F88D5EE3F59DAC28
        String sessionId = req.getRequestedSessionId();
        //获取请求的servlet路径,如 http://localhost:8088/javaweb01_war/user 的 /user
        String servletPath = req.getServletPath();
        //返回一个布尔值,指示请求是否使用安全通道,如 HTTPS
        boolean isSecure = req.isSecure();
        //返回请求主体长度,未知返回-1
        int contenLegth = req.getContentLength();
        //获取服务器端口 如 8088
        int port = req.getServerPort(); 

Response对象

  • 当服务器处理完请求后,也要按照Http格式响应给浏览器.

响应格式

  • 响应通常包括一个状态行,一些响应报头,一个空行和文档。下面是一个例子。
HTTP/1.1 200 OK     //协议版本 和响应码
Content-Type: text/html  //消息报头1
Header2: ...            //消息报头2
...
HeaderN: ...
       //空行,没有内容
<!doctype ...>  //响应主体
<html>
<head>...</head>
<body>
...
</body>
</html>

状态行

  • 状态行包括协议版本(如 HTTP/1.1)、一个状态码(如200)、和对应状态码的短消息(如OK)。

响应报头(常见)

头信息 描述
Allow 这个头信息指定服务器支持的请求方法
cache-control 这个头信息指定响应文档在何种情况下可以安全地缓存。可能的值有:public、private 或 no-cache 等。Public 意味着文档是可缓存,Private 意味着文档是单个用户私用文档,且只能存储在私有(非共享)缓存中,no-cache 意味着文档不应被缓存。
connection 这个头信息指示浏览器是否使用持久 HTTP 连接。值 close 指示浏览器不使用持久 HTTP 连接,值 keep-alive 意味着使用持久连接。
Content-Disposition 这个头信息可以让您请求浏览器要求用户以给定名称的文件把响应保存到磁盘。
Content-Encoding 在传输过程中,这个头信息指定页面的编码方式。
Content-Length 这个头信息指示响应中的字节数。只有当浏览器使用持久(keep-alive)HTTP 连接时才需要这些信息。
Content-Type 这个头信息提供了响应文档的 MIME类型。如text/plain;charset=utf-8
Last-Modified 这个头信息指示文档的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中通过 If-Modified-Since 请求头信息提供一个日期。

常用方法

        /**
         * response对象常用方法
         */
        //设置响应头,但是同键会覆盖
        resp.setHeader("Allow","GET");
        //设置响应头,同键不会覆盖
        resp.addHeader("adc","hello");
        //设置响应状态码
        resp.setStatus(200);
        //设置响应编码格式 如 text/plain是文本,text/html是html文件
        resp.setContentType("text/plain;charset=utf-8");
        //获取响应实体流,并输入信息,会输出到页面
        PrintWriter writer = resp.getWriter();
        writer.println("好好吃xixixii");
posted @ 2021-01-31 14:23  阿肆啊  阅读(191)  评论(0编辑  收藏  举报