javaWeb_Request_Response

来源:互联网 发布:mac系统星际2打不开 编辑:程序博客网 时间:2024/06/05 18:48

请求的响应流程


1.response概述

response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。

response对象的功能分为以下四种:

  • 设置响应头信息;

  • 发送状态码;

  • 设置响应正文;

  • 重定向;

  • 1.response响应状态码

    • setStatus(int sc):一般用来发送非错误的状态码。

    • sendError(int sc):一般用来发送错误的状态码

    • sendError(int sc, String msg):同上,但可以带错误信息

  • 2.response发送响应头:

    • setHeader(String header, String value):设置响应头;

    • addHeader(String header, String value):添加响应头;适合一头多值。

    • setIntHeader(String header, int value):专门为int类型值由准备的!\

    • addIntHeader(String header, int value)

    • setDateHeader(String header, long value):专门为时间毫秒值类型准备的!

    • addDateHeader(String header, long value)

  • 3.response发送响应体:

    • PrintWriter getWriter():用来向客户端发送文本数据(html就是文本数据);

    • ServletOutputStream getOutputStream():用来向客户端发送字节数据(图片、mp3等);

    • 同一个response对象,不能即使用getOut()和getOutputStream();

    • 缓冲区

response.getWriter()是PrintWriter类型,所以它有缓冲区,缓冲区的默认大小为8KB。也就是说,在响应数据没有输出8KB之前,数据都是存放在缓冲区中,而不会立刻发送到客户端。当Servlet执行结束后,服务器才会去刷新流,使缓冲区中的数据发送到客户端。

如果希望响应数据马上发送给客户端:

  • 向流中写入大于8KB的数据;

  • 调用response.flushBuffer()方法来手动刷新缓冲区;

  • * 4.响应编码问题*

    • response.setCharaceterEncoding(“utf-8”):让tomcat把数据转换成utf-8再发;

    • response.setHeader(“Content-Type”, “text/html;chartset=utf-8”)

    • 让tomcat把数据转换成utf-8再发;

    • 添加Content-Type头,即通知浏览器我们发送的是什么编码的字符!

    • 设置ContentType响应头的便捷方法:response.setContentType(“text/html;charset=utf-8”)等同与response.setHeader(“Content-Type”, “text/html;charset=utf-8”);

  • 5.重定向的便捷方法:

    • 原始的重定向:

    • 设置状态码为302:response.setStatus(302);

    • 设置Location头:response.setHeader(“Location”, “url”);

    • 便捷方法:

    • response.sendRedirect(“url”);

2.request概述

request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。

request的功能可以分为以下几种:

  • 封装了请求头数据;

  • 封装了请求正文数据,如果是GET请求,那么就没有正文;

  • request是一个域对象,可以把它当成Map来添加获取数据;

  • request提供了请求转发和请求包含功能。

1.获取请求参数

  • 无论是GET还是POST都能获取:String getParameter(String 参数的名称)

2.request的获取请求方式和客户端IP

  • String getMethod():获取请求方式;

  • String getRemoteAddr():获取客户端的IP地址。

3.request获取请求参数

  • String getParameter(String paramName):通过参数名获取参数值(适用与单值参数)

  • String[] getParameterValues(String paramName):通过参数名获取参数值(适用与多值参数)

  • Enumeration getParameterNames():获取所有参数的名称

  • Map

0 0