一、HTTP
HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
HTTP协议特点:
(1)基于TCP协议:面向连接,安全
(2)基于请求-响应模型的:一次请求对应一次响应
(3)HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的
1️⃣缺点:多次请求间不能共享数据。Java 中使用
会话技术(Cookie、Session)
来解决这个问题。2️⃣优点:速度快
1. 请求数据格式
请求数据总共分为三部分内容
(1)请求行: HTTP请求中的第一行数据,请求行包含三块内容,分别是 GET[请求方式] /[请求URL路径] HTTP/1.1[HTTP协议及版本]
(2)请求头: 第二行开始,格式为key: value形式
(3)请求体: POST请求的最后一部分,存储请求参数
常见的HTTP请求头有:
(1)Host: 表示请求的主机名
(2)User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko;
(3)Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
(4)Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页; (5)Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
2. 响应数据格式
响应数据总共分为三部分内容
(1)响应行:响应数据的第一行,响应行包含三块内容,分别是 HTTP/1.1[HTTP协议及版本] 200[响应状态码] ok[状态码的描述]
(2)响应头:第二行开始,格式为key:value形式
(3)响应体: 最后一部分。存放响应数据
响应头中会包含若干个属性,常见的HTTP响应头有:
(1)Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;
(2)Content-Length:表示该响应内容的长度(字节数);
(3)Content-Encoding:表示该响应压缩算法,例如gzip;
(4)Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒
二、Tomcat
Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。
Tomcat是Apache软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范。
因为Tomcat支持Servlet/JSP规范,所以Tomcat也被称为Web容器、Servlet容器。Servlet需要依赖Tomcat才能运行。
1. 基本使用
启动:
双击: bin\startup.bat
注意: 启动的过程中,控制台有中文乱码,需要修改conf/logging.prooperties
关闭有三种方式
- 直接x掉运行窗口:强制关闭[不建议]
- bin\shutdown.bat:正常关闭
- ctrl+c: 正常关闭
配置:
修改Tomcat启动的端口号,需要修改 conf/server.xml
Tomcat部署项目: 将项目放置到webapps目录下,即部署完成。
一般JavaWeb项目会被打包称 war 包,然后将war包放到Webapps目录下,Tomcat会自动解压缩war文件
三、Servlet
Servlet 是 JavaWeb 最为核心的内容,它是 Java 提供的一门动态 web 资源开发技术。
Servlet 是 JavaEE 规范之一,其实就是一个接口,将来我们需要定义 Servlet 类实现 Servlet接口,并由 web 服务器运行 Servlet
1. Servlet 快速入门
(1)创建Web项目
web-demo
,导入Servlet依赖坐标<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>
(2)创建:定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话
public class ServletDemo1 implements Servlet { @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("servlet hello world~"); } }
(3)配置:在类上使用@WebServlet注解,配置该Servlet的访问路径
@WebServlet("/demo1") public class ServletDemo1 implements Servlet { }
(4)访问:启动Tomcat,浏览器中输入URL地址访问该Servlet
2. Servlet 执行流程
(1)Servlet由谁创建?Servlet方法由谁调用?
Servlet由web服务器创建,Servlet方法由web服务器调用
(2)服务器怎么知道Servlet中一定有service方法?
因为我们自定义的Servlet,必须实现Servlet接口并复写其方法,而Servlet接口中有service方法
3. Servlet 生命周期
生命周期: 对象的生命周期指一个对象从被创建到被销毁的整个过程。
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
(1)加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
(2)初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次
(3)请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的 service() 方法对请求进行处理
(4)服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的 destroy() 方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
4. Servlet 体系结构
因为我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会通过继承HttpServlet
@WebServlet("/demo4") public class ServletDemo4 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("get..."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("post..."); } }
5. Servlet urlPattern配置
Servlet类编写好后,要想被访问到,就需要配置其访问路径(urlPattern)
一个Servlet,可以配置多个urlPattern
@WebServlet(urlPatterns = {"/demo7","/demo8"})
urlPattern配置规则
(1)精确匹配
(2)目录匹配
@WebServlet(urlPatterns = "/user/*")
(3)扩展名匹配
@WebServlet(urlPatterns = "*.do")
(4)任意匹配
@WebServlet(urlPatterns = "/") @WebServlet(urlPatterns = "/*")