
创作日期:2021-12-26
协议是指双方,或多方,相互约定,都需要遵守的规则,所谓 HTTP 协议,就是指客户端和服务器之间通信时,发送的数据需要遵守的规则,HTTP 协议中的数据又称之为报文
- 请求:客户端给服务器发送数据,分为 GET 请求与 POST 请求
- 响应:服务器给客户端回传数据
- GET 请求
- 请求行
- 请求的方式 GET
- 请求的资源路径
- 请求的协议的版本号 HTTP/1.1
- 请求行
- 请求的方式 GET
- 请求的资源路径
- 请求的协议的版本号 HTTP/1.1

- POST 请求
- 请求行
- 请求的方式 GET
- 请求的资源路径
- 请求的协议的版本号 HTTP/1.1
- 请求行
- 请求的方式 GET
- 请求的资源路径
- 请求的协议的版本号 HTTP/1.1
- 请求头 客户端发送服务器的数据 (头和体之间要有空行隔开)

- Accept:表示客户端可以接收的数据类型
- Accept-Languege:表示客户端可以接收的语言类型
- User-Agent:表示客户端浏览器的信息
- Host:表示请求时的服务器 ip 和端口号
- GET 请求
- 地址栏输入地址回车
- iframe 标签引入 html 页面
- img 标签引入图片
- Script 标签引入 js 文件
- link 标签引入 css 文件
- a 标签
- from 标签 menthod = get
- POST 请求
- from 标签 menthod = post
- 响应行
- 响应的协议和版本号 HTTP/1.1
- 响应状态码 200
- 响应状态描述符 ok
- 响应头 key : value 不同的响应头,有其不同含义
- 响应体 服务器回传给客户端的数据(头和体之间要有空行隔开)

- 200 表示请求成功
- 302 表示请求重定向
- 404 表示请求服务器已经收到了,但是数据不存在(请求地址错误)
- 500 表示服务器已经收到请求了,但是服务器内部错误(代码错误)
MIME 是 HTTP 协议中数据类型,全称是“Multipurpose Internet Mail Extensions” 多功能 Internet 邮件扩充服务,格式是“大类型/小类型”,并与某一种文件的扩展名相对应
- 常见的 MIME 类型:

每当请求进入 Tpmcat 服务器时,Tomcat 服务器就会把请求的 HTTP 协议信息解析进行封装到 Request 对象中,然后传递到 service 方法( doGet 和 doPost )中,我们可以通过 HttpServletRequest 对象,获取到所有请求的信息
- getRequestURI() 获取请求的资源路径
- getRequestURL() 获取请求的统一资源定位符(绝对路径)
- getRemoteHost() 获取客户端的 ip 地址
- getHeader() 获取请求头
- getParameter() 获取请求的参数
- getParameterValues() 获取请求的参数(多个值的时候使用)
- getMethod() 获取请求的方式 GET 或 POST
- setAttribute(key,value) 设置域数据
- getAttribute(key) 获取域数据
- <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>HelloServletservlet-name>
-
- <servlet-class>com.example.Tomcat_web.HelloServletservlet-class>
- servlet>
-
-
- <servlet-mapping>
-
- <servlet-name>HelloServletservlet-name>
-
- <url-pattern>/helloServleturl-pattern>
- servlet-mapping>
- web-app>
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>HelloServlettitle>
- head>
- <body>
- <form action="http://localhost:8080/Tomcat_web/helloServlet" method="get">
- 姓名:<input type="text" name="username"><br>
- 密码:<input type="password" name="userpwd"><br>
- 性别:<input type="radio" name="sex" value="boy">男<input type="radio" name="sex" value="girl" checked="checked">女
- <br>爱好:<input type="checkbox" name="hobby" value="football">足球
- 音乐<input type="checkbox" name="hobby" value="music" >
- 游戏<input type="checkbox" name="hobby" value="games" checked="checked">
- <br><input type="submit">
- form>
- body>
- html>
- /* HelloServlet.java */
- package com.example.Tomcat_web;
-
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
-
- @WebServlet(name = "HelloServlet", value = "/HelloServlet")
- public class HelloServlet extends HttpServlet {
-
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- int j = 1;
- //getRequestURI() 获取请求的资源路径 "URI =>/Tomcat_web/helloServlet"
- System.out.println("URI => " + request.getRequestURI());
-
- //getRequestURL() 获取请求的统一资源定位符(绝对路径) "URL =>http://localhost:8080/Tomcat_web/helloServlet"
- System.out.println("URL => " + request.getRequestURL());
-
- //getRemoteHost() 获取客户端的 ip 地址 "客户端 ip 地址 => 127.0.0.1"
- System.out.println("客户端 ip 地址 => " + request.getRemoteHost());
-
- //getHeader() 获取请求头 "请求头 User-Agent => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"
- System.out.println("请求头 User-Agent => " + request.getHeader("User-Agent"));
-
- //getMethod() 获取请求的方式 GET 或 POST "请求的方式 => GET"
- System.out.println("请求的方式 => " + request.getMethod());
-
- //setAttribute(key,value) 设置域数据
- request.setAttribute("xfdq", "jsb");
- //getAttribute(key) 获取域数据 "xfdq => jsb "
- System.out.println("xfdq => " + request.getAttribute("xfdq"));
-
- //getParameter() 获取请求的参数 "姓名 => lmq8214, 密码 => 123, 性别 => girl"
- System.out.println("姓名 => " + request.getParameter("username")+"\n密码 => " + request.getParameter("userpwd")+"\n性别 => " +request.getParameter("sex"));
-
- //getParameterValues() 获取请求的参数(多个值的时候使用)"爱好1 => football 爱好2 => music 爱好3 => games"
- String[] hobbies = request.getParameterValues("hobby");
- for (Object i:hobbies) {
- System.out.print("爱好"+j+" => "+i+" ");
- j++;
- }
- System.out.println("\nget 请求");
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- System.out.println("post 请求");
- }
- }
HttpServletResponse 表示所有响应的信息,我们可以通过HttpServletResponse 对象设置返回给客户端的信息
- 两个流不能同时使用
- 字节流:getOutputStream(); 常用于下载(传递二进制数据)
- 字符流:getWriter(); 常用于回传字符串
- /* HelloServlet.java */
- package com.example.Tomcat_web;
-
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.io.PrintWriter;
-
- @WebServlet(name = "HelloServlet", value = "/HelloServlet")
- public class HelloServlet extends HttpServlet {
-
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //解决回传数据 中文乱码问题
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Type","text/html;charset=UTF-8");
- //response.getOutputStream(); 获取字节流
- //response.getWriter(); 获取字符流 常用于回传字符串
- //往客户端回传 字符串 数据
- PrintWriter writer = response.getWriter();
- writer.write("HelloServlet !!!");
- writer.write("编程 !!!");
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- System.out.println("post 请求");
- }
- }
请求重定向指客户端给服务器发送请求,然后服务器反馈给客户端新的访问地址(之前的地址可能已经被废弃)
- 浏览器地址栏会发生变化
- 两次请求,一次响应
- 不共享 Request 域中数据
- 不能访问 WEB-INF 下的资源
- 可以访问工程外的资源

- <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>Response1servlet-name>
- <servlet-class>com.example.Tomcat_web.Response1servlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>Response1servlet-name>
- <url-pattern>/response1url-pattern>
- servlet-mapping>
-
-
- <servlet>
- <servlet-name>Response2servlet-name>
- <servlet-class>com.example.Tomcat_web.Response2servlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>Response2servlet-name>
- <url-pattern>/response2url-pattern>
- servlet-mapping>
-
- web-app>
第一种重定向方法:
- package com.example.Tomcat_web;
- //Response1.java
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.IOException;
-
- public class Response1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("Response1......");
- //设置响应状态码 302,表示重定向(地址已更换)
- response.setStatus(302);
- //设置响应头 说明新的地址
- response.setHeader("Location","http://localhost:8080/Tomcat_web/response2");
- }
- }
- package com.example.Tomcat_web;
- //Response2.java
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
-
- public class Response2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- response.getWriter().write("response2 is result!");
- }
- }
第二种重定向方法:(在 Response1.java 中使用 sendRedirect() 方法)
- package com.example.Tomcat_web;
- //Response1.java
- import javax.servlet.*;
- import javax.servlet.http.*;
- import java.io.IOException;
-
- public class Response1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("Response1......");
- //设置新的地址
- response.sendRedirect("http://localhost:8080/Tomcat_web/response2");
- }
- }
上一节:
下一节: