Request
概念: 是服务器创建的请求对象,request对象是来获取请求消息;
组成部分
-
请求行
GET /login.html HTTP/1.1
分别对应了请求方式,请求的URL,请求协议/版本
; -
请求头:客户端浏览器告诉服务器一些信息
- User-Agent:
浏览器告诉服务器当前使用的浏览器版本信息
; - Referer:
浏览器告诉服务器当前请求从哪里来
;
- User-Agent:
-
请求空行:
用于分割POST请求的请求头,和请求体的
; -
请求体(正文):
封装POST请求消息的请求参数的
;
//请求例子
请求行
POST /login.html HTTP/1.1
请求头
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
(请求空行)
请求体
username=zhangsan
常用方法
-
获取请求行数据
String getMethod()
:获取请求方式;String getRequestURI()
: 获取请求URI;StringBuffer getRequestURL()
:获取请求URL;String getContextPath()
:获取虚拟目录;String getServletPath()
: 获取Servlet路径;String getQueryString()
: 获取get方式请求参数;String getProtocol()
: 获取协议及版本;String getRemoteAddr()
: 获取客户机的IP地址;
-
获取请求头数据
String getHeader(String name)
: 通过请求头的名称获取请求头的值;Enumeration<String> getHeaderNames()
: 获取所有的请求头名称;
-
获取请求体数据
//获取字符输入流,只能操作字符数据
BufferedReader reader = request.getReader();
//获取字节输入流,可以操作所有类型数据
ServletInputStream inputStream = request.getInputStream();
-
其他方法
String getParameter(String name)
:根据参数名称获取参数值;String[] getParameterValues(String name)
:根据参数名称获取参数值的数组;Enumeration<String> getParameterNames()
:获取所有请求的参数名称;Map<String,String[]> getParameterMap()
:获取所有参数的map集合;
-
中文乱码问题
- get方式:tomcat 8 已经将get方式乱码问题解决了;
- post方式:
request.setCharacterEncoding("utf-8");
-
请求转发
request.getRequestDispatcher(String path).forward(ServletRequest request, ServletResponse response);
- 共享数据(一般用于转发后,多个资源共享数据)
void setAttribute(String name,Object obj)
:存储数据;Object getAttitude(String name)
:通过键获取值;void removeAttribute(String name)
:通过键移除键值对;
Response
概念: 服务器端发送给客户端的数据;
组成部分
-
响应行
协议/版本 响应状态码 状态码描述
; -
响应头
-
Content-Type:
服务器告诉客户端本次响应体数据格式以及编码格式;
-
Content-disposition:
服务器告诉客户端以什么格式打开响应体数据;
in-line:默认值,在当前页面内打开; attachment;filename=xxx:以附件形式打开响应体。文件下载;
-
-
响应空行;
-
响应体:传输的数据;
//相应例子
响应行
HTTP/1.1 200 OK
响应头
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT
(响应空行)
响应体
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello , response
</body>
</html>
常用方法
-
setStatus(int sc);
:设置状态码; -
setHeader(String name, String value);
: 设置响应头; -
设置响应体:
字符输出流:PrintWriter getWriter(); 字节输出流:ServletOutputStream getOutputStream();
-
response.sendRedirect(String path);
: 重定向方法; -
response.setContentType("text/html;charset=utf-8");
: 解决响应乱码问题;
ServletContext对象
概念: 代表整个web应用,可以和程序的容器(服务器)来通信
获取方式
1. 通过request对象获取
request.getServletContext();
2. 通过HttpServlet获取
this.getServletContext();
常用方法
String getMimeType(String file) ;
: 获取MIME类型;
MIME类型:在互联网通信过程中定义的一种文件数据类型,例如:text/html
image/jpeg