本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一.Http协议
1.Http协议就是指客户端和服务器之间通信时,发送的数据,需要遵守的规则、Http协议中的数据又叫报文 2.请求的Http协议格式
- 客户端给服务器发送数据叫请求
- 服务器给客户端回传数据叫响应
- 请求又分为GET请求、和POST请求
GET请求
-
请求行 1.请求的方式 GET 2.请求的资源路径[+?+请求参数] 3.请求协议的版本号 HTTP/1.1
-
请求头 1.key:value 组成 不同的键值对,表示不同的含义
| Accept | 告诉服务器,客户端可以接受的数据类型 |
|---|---|
| Accept-Language | 考试服务器客户端可以接收的语言类型 zh-CN-->中文中国 en-US -->英文美国 |
| User-Agent | 浏览器的信息 |
| Accept-Encoding | 告诉服务器,客户端可以接收的数据编码格式 |
| Host | 表示请求的服务器ip和端口哈 |
| Connection | 告诉服务器请求连接如何处理 |
| Keep-Alive | 告诉服务器回传数据不要马上关闭,保存一小时的连接 |
| Closed | 马上关闭 |
POST请求
-
请求行 1.请求的方式 POST 2.请求的资源路径[+?+请求参数] 3.请求协议的版本号 HTTP/1.1
-
请求头 1.key:value 组成 不同的键值对,表示不同的含义
-
请求体 --->就是发送给服务器的数据
| Accept | 告诉服务器,客户端可以接受的数据类型 |
|---|---|
| Accept-Language | 考试服务器客户端可以接收的语言类型 zh-CN-->中文中国 en-US -->英文美国 |
| Referer | 表示请求发起时,浏览器地址栏中的地址从(那里来) |
| User-Agent | 浏览器的信息 |
| Content-Type | 表示发送的数据类型 |
| application/x-www-form-urlencoded | 表示提交的数据格式是:name=value,然后对其进行url编码 |
| url编码 | 是八非英文内容转换为:%xx%xx |
| multipart/form-date | 表示以多段的新式提交给数据给服务器(以流的形式提交,用于上传) |
| Content-Length | 表示发送的数据的长度 |
| Cache-Control | 表示如何控制缓存 No-cache不缓存 |
常用请求头
- Accept : 表示客户端可以接收的数据类型
- Accpet-Language: 表示客户端可以接收的语言类型
- User-Agent : 表示客户端浏览器的信息
- Host : 表示请求时的服务器ip和端口号
那些是GET请求、那些是POST请求
-
GET请求 1.form标签 method=get 2. a 标签 3. link 标签引入 css 4. Script 标签引入 js 文件 5. img 标签引入图片 6. iframe 标签引入 html 页面 7. 在浏览器地址栏中输入地址后回车
-
POST请求 1.form标签 method=Post
-
常用的响应码说明
| 200 | 表示请求成功 |
|---|---|
| 302 | 表示请求重定向 |
| 404 | 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误) |
| 500 | 表示服务器已经收到请求,但服务器内部错误(代码错误) |
MIME类型说明
- MIME是HTTP协议中数据类型,多功能Internet邮件扩充服务。MIME格式是”大类型/小类型“,并与某一种扩展名相对应
| 文本 | MIME类型 |
|---|---|
| 超文本 | .html txt/html |
| 普通文本 | .txt text/plain |
| JPEG图形 | .jpeg image/jpeg |
| AVI文件 | .avi video/mpeg |
十.HttpServletRequest类
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的Http协议信息解析好封装daoRequest对象中。然后传递到Service方法(doGET 和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获得到所有请求的信息 HttpServletRequest类的常用方法
| getRequestURI() | 获取请求的资源路径 |
|---|---|
| getRequestURL() | 获取请求的统一资源定位符(绝对路径) |
| getRemoteHost() | 获取客户端的ip地址 |
| getHeader() | 获取请求头 |
| getParameter() | 获取请求的参数 |
| getParameterValues() | 获取请求的参数(多个值的时候使用) |
| getMethod() | 获取请求的方式GET或POST |
| setAttribute(key,value) | 设置域数据 |
| getAttribute(key) | 获取域数据 |
| getRequestDispatcher() | 获取请求转发对象 |
public class ServletTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("URI-->" + req.getRequestURI());
System.out.println("URL-->" + req.getRequestURL());
System.out.println("客户端地址ip"+ req.getRemoteHost());
System.out.println("请求头User - Agent" + req.getHeader("User-Agemt"));
System.out.println("请求的方式"+ req.getMethod());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
二如何获取参数代码演示
public class ServletTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
System.out.println("这是Get方法");
//获取请求的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParameterValues("hobby");
System.out.println("用户名 :" + username);
System.out.println("密码 :" + password);
System.out.println("兴趣爱好 :" + Arrays.asList(hobby)); //要转化为数据Arrays进行输出因为是多个数据,单个数据直接输出就可
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
System.out.println("这是POST方法");
//获取请求的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParameterValues("hobby");
System.out.println("用户名 :" + username);
System.out.println("密码 :" + password);
System.out.println("兴趣爱好 :" + Arrays.asList(hobby)); //要转化为数据Arrays进行输出因为是多个数据,单个数据直接输出就可
}
}
三.测试表单
<%--
Created by IntelliJ IDEA.
User: 程序员小徐同学
Date: 2022-01-11
Time: 14:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>程序员小徐同学</title>
</head>
<body>
<h3>开始了新的测试</h3>
<form action="http://localhost:8888/day2/servlet" method="get">
用户名:<input type="text" name="username"><br>
密码 : <input type="password" name="password"> <br>
兴趣爱好 : <input type="checkbox" name="hobby" value="java"> java<br>
<input type="checkbox" name="hobby" value="c++">c++<br>
<input type="checkbox" name="hobby" value="php">php<br>
<input type="submit" value="提交">
</form>
</body>
</html>