1 Http协议
1.1 什么是 HTTP 协议
协议是双方或者多方约定好需要遵守的规则。所谓HTTP协议就是指,在客户端和服务端通信时,发送的数据,需要遵守的规则。HTTP协议中的数据称为报文。
客户端给服务器发送数据叫请求,而服务器给客户端回传数据叫响应。
请求分为GET请求和POST请求。
1.2 GET请求与POST请求
GET请求的组成如下:
请求行
(1)请求的方式 GET
(2)请求的资源路径 [+?+请求参数]
(3)请求的协议版本号 HTTP/1.1
请求头
key:value 组成,不同的键值对,表示不同的含义。
GET请求HTTP协议内容示例:
常用请求头的说明:
Accept: 告诉服务器,客户端可以接收的数据类型;
Accept-Language: 告诉服务器客户端而言接收的语言类型;
User-Agent: 浏览器的信息;
Accept-Encoding: 告诉服务器,客户端可以接收的数据编码(压缩)格式;
Host: 表示请求的服务器ip和端口号;
Connection: 告诉服务器请求连接如何处理
Keep-Alive:服务器马上回传数据,不要马上关闭,保持一小会儿的连接
Closed: 马上关闭
POST请求的组成如下:
请求行
(1)请求的方式 GET
(2)请求的资源路径 [+?+请求参数]
(3)请求的协议版本号 HTTP/1.1
请求头
key:value 组成,不同的请求头,表示不同的含义。
请求体:发送给服务器的数据
辨析哪些是GET请求,哪些是POST请求
常用的GET请求:
form标签 method=get
a 标签
link标签引入css
Script标签引入js文件
img标签引入图片
iframe引入html页面
在浏览器地址栏输入地址后敲回车
常用的POST请求:
form标签 method=post
1.3 响应的HTTP协议格式
响应的HTTP协议格式组成如下:
响应行
(1)响应的协议和版本号
(2)响应状态码
(3)响应状态码描述符
响应头
key:value 组成,不同的响应头,表示不同的含义。
响应体:回传给客户端的数据、
示例图如下:
常用的响应码:
响应码 | 说明 |
200 | 表示请求成功 |
302 | 表示请求重定向 |
404 | 表示请求服务器已经收到,但是需要访问的数据不存在 |
500 | 表示服务器已经收到请求,但是服务器内部错误 |
1.4 MIME数据类型
MIME是HTTP协议中的数据类型。全称是"Multipurpose Internet Mail Extensions"多功能Internet邮件扩充服务,MIME类型的格式是"大类型/小类型",并与某一种文件的扩展名相对应。
常见的MIME类型:
2 HttpServletRequest类
2.1 HttpServletRequest说明及常用方法
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet、doPost)中供我们使用。我们可以通过HttpServletRequest对象获取到所有请求的信息。
HttpServletRequest类常用方法
方法 | 说明 |
getRequestURL() | 获取请求的资源路径 |
getRequestURL() | 获取请求的统一资源定位符(绝对路径) |
getRemoteHost() | 获取客户端的ip地址 |
getHeader() | 获取请求头 |
getParameter() | 获取请求的参数 |
getParamterValues() | 获取请求的参数(多个值使用) |
getMethod() | 获取请求的方式POST或GET |
setAttribute(key,value) | 设置域数据 |
getAttribute(key) | 获取域数据 |
getRequestDispatcher() | 获取请求转发对象 |
2.2 HttpServletRequest类演示
xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>RequestAPIServelet</servlet-name> <servlet-class>com.example.servlet_test.RequestAPIServelet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RequestAPIServelet</servlet-name> <url-pattern>/requestAPIServlet</url-pattern> </servlet-mapping> </web-app>
RequestAPIServelet.java
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class RequestAPIServelet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1. 获取请求的资源路径 System.out.println("URL = " + req.getRequestURI()); //2. 获取绝对路径(返回值是StringBuffer) System.out.println("URL = " + req.getRequestURL()); //3. 获取客户端的ip地址 /* * 在IDEA中,使用LocalHost访问时,得到的客户端的ip地址时127.0.0.1 * IPV6表现形式则为0:0:0:0:0:0:0:1 */ System.out.println("ip = " + req.getRemoteHost()); //4. 获取请求头 System.out.println("请求头User-Agent = " + req.getHeader("User-Agent")); //5. 获取请求方式 System.out.println("请求方式 = " + req.getMethod()); } }
2.3 获取请求表单中的参数值(POST请求)
下面演示如何获取表单的信息,以Post请求方式为例
xml配置文件信息:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>ServletRequest</servlet-name> <servlet-class>com.example.servlet_test.ServletRequest</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletRequest</servlet-name> <url-pattern>/servletRequest</url-pattern> </servlet-mapping> </web-app>
html页面信息如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="http://localhost:8080/Servlet_Test/servletRequest" method="post"> 用户名:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> 兴趣爱好:<input type="checkbox" name="hobby" value="java">Java <input type="checkbox" name="hobby" value="python">Python <input type="checkbox" name="hobby" value="C++">C++ <input type="submit"> </form> </body> </html>