前言
- request和response对象是由服务器创建的。我们来使用它们;
- request对象是来获取请求消息,response对象是来设置响应消息。
Request
定义
服务器进行创建,通过该对象进行获取数据。
继承体系
ServletRequest -- 接口
| 继承
HttpServletRequest -- 接口
| 实现
org.apache.catalina.connector.RequestFacade 类(tomcat)
常用方法
获取请求行数据 (GET /day14/demo1?name=zhangsan HTTP/1.1)
String getMethod():
获取请求方式-->GET;String getContextPath():
获取虚拟目录-->/day14;String getServletPath():
获取Servlet路径-->/demo1;String getServletPath():
获取Servlet路径-->/demo1;String getQueryString():
获取get方式请求参数-->/name=zhangsan;String getRequestURI():
获取请求URI(统一资源标识符)-->/day14/demo1;String getRequestURL():
获取请求URL(统一资源定位符)--> http://localhost/day14/demo1;String getProtocol():
获取协议及版本-->HTTP/1.1;String getRemoteAddr():
获取客户机的IP地址。
获取请求头数据
Enumeration<String> getHeaders(String var1):
通过请求头的名称获取请求头的值;Enumeration<String> getHeaderNames():
获取所有的请求头名称。
获取请求体数据(只适用于POST请求)
BufferedReader getReader():
获取字符输入流,只能操作字符数据;ServletInputStream getInputStream():
获取字节输入流,可以操作所有类型数据。
POST和GET通用方法
Map<String,String[]> getParameterMap():
获取所有参数的map集合。
中文乱码问题:
get方式:tomcat 8 已经将get方式乱码问题解决了;
post方式:会乱码,* 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8")。
其他方法
1: 请求转发
getRequestDispatcher(String path).forward(ServletRequest request,ServletResponse response);
特点:
(1). 浏览器地址栏路径不发生变化;
(2). 只能转发到当前服务器内部资源中;
(3). 转发是一次请求;
(4). 转发只需使用相对路径,而且不需要携带项目访问路径。
2: 共享数据对象及范围
(1): request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据。
- void setAttribute(String name,Object obj):存储数据;
- Object getAttitude(String name):通过键获取值;
- void removeAttribute(String name):通过键移除键值对。
(2):ServletContext域:服务器启动创建,服务器停止服务销毁。
- void setAttribute(String name,Object obj):存储数据;
- Object getAttitude(String name):通过键获取值;
- void removeAttribute(String name):通过键移除键值对。
Response
响应数据格式
- 响应行
- 组成:协议/版本 响应状态码 状态码描述
- 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
- 状态码都是3位数字
- 分类:
- 1xx:服务器就收客户端消息,但没有接收完成,等待一段时间后,发送1xx多状态码
- 2xx: 成功。代表:200
- 3xx:重定向。代表:302(重定向)、304(访问缓存)
- 4xx: 客户端错误。
- 代表: 404(请求路径没有对应的资源)、405(请求方式没有对应的doxx方法)
- 5xx:服务端错误。代表:500(服务器内部出现异常)
- 响应头:
- 格式:头名称: 值
- 常见的响应头:
- Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
- Content-disposition:服务器告诉客户端以什么格式打开响应体数据
- 值:
- in-line:默认值,在当前页面内打开
- attachment;filename=xxx:以附件形式打开响应体。文件下载
- 响应空行
- 响应体:传输的数据
常用方法
public void sendRedirect(String location) throws IOException:
重定向;public void setHeader(String name, String value):
设置相应头;public void setStatus(int sc):
设置状态码;public PrintWriter getWriter() throws IOException:
获取字符输出流;public ServletOutputStream getOutputStream() throws IOException:
获取字节输出流;public void setContentType(String type):
设置编码,是在获取流之前设置。- 重定向特点:
- 地址栏发生变化;
- 重定向可以访问其他站点(服务器)的资源;
- 重定向是两次请求。不能使用request对象来共享数据。
相对路径: ./:当前目录, ../:后退一级目录
绝对路径: 以/开头的路径
转发服务:给服务器使用,不需要加虚拟目录(项目名)
重定向服务:给浏览器使用,需要加虚拟目录(项目名)