* request&response的原理:
2.request对象中封装请求消息数据。
3.将request和response对象传递给service方法做参数
4.在服务器响应之前,会获取response对象中设置的响应消息数据。
* 结论:request对象和response对象都是由服务器创建的
* 继承关系
ServletRequest <----继承---- HttpServletRequest <--实现--- RequestFacade
* response:响应对象
* 功能:设置响应消息
* 设置响应行: HTTP/1.1 200 ok
* 设置响应状态码:setStatus(int st);
* 重定向功能实现:
//设置响应状态码 302
response.setStatus(302);
//设置头 location
response.setHeader("location", "http://www.baidu.com");
//简化版重定向
response.sendRedirect("http://www.sina.com");
* 重定向特点:
* 2次请求 2次响应。2个request对象
* 地址栏发生变化
* 可以重定向到外部站点
* 设置响应头:Content-Type: text/html;charset=utf-8;
* 设置响应头:
setHeader(String name,String value);
setDateHeader(String name,Date date);
setIntHeader(String name ,int value);
//设置content-type头.解决乱码问题
//response.setHeader("content-type", "text/html;charset=utf-8");
//简化形式
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("<h1>训练</h1>");
* 设置响应体:
* 发送字符数据
PrintWriter getWriter():
* 设置输出流的编码:setCharacterEncoding("utf-8");
* 设置content-type类型,告诉浏览器服务器使用的编码方式,并且建议浏览器使用这种方式解码
setContentType("text/html;charset=utf-8");
* 该方法不紧可以设置响应头,还可以设置流的编码
* 注意:设置编码的操作,必须位于获取流对象之前。
* 发送字节数据:
ServletOutputStream getOutputStream():
* request:请求对象
* 封装了请求消息数据
* 功能:
* 获取请求消息:
消息行:
getMethod():获取请求方式 如:GET、POST...
getContextPath():获取虚拟目录。 如:/day08
虚拟目录:项目访问的URI(路径)
getRequestURI():获取URI:统一资源标识符
getRequestURL():获取URL:统一资源定位符
URL:http://localhost:8080/day08/index.jsp
URI:/day08/index.jsp
getQueryString():获取get请求的请求参数
getRemoteAddr():获取客户端的IP地址
消息头:
getHeader(String name):根据名称获取值
Enumeration getHeaderNames() :获取所有请求头的名称
消息体:封装了post请求的参数
* getReader():获取字符数据
* getInputStream():获取字节数据
* 统一的方式获取请求参数:
* String getParameter(String name): 根据请求参数的名称 获取值
* String[] getParameterValues(String name):根据请求参数名称 获取值 (数组),用于checkbox
* Map<String,String[]> getParameterMap():获取请求参数的键值对集合
* getParameterNames():获取所有参数的名称
* 她是一个域对象
* 代表请求域
setAttribute():
getAttribute():
removeAttribute():
* 请求转发:
request.getRequestDispatcher("/req6").forward(request, response);
* 特点:
* 一次请求,一次响应,只有一个request对象,可以在request域中共享数据
* 地址栏不发生变化
* 只能转发到当前项目中
* 结论:如果在访问多个资源中,如果要共享数据,就使用请求转发,反之,使用重定向