当前位置: 首页 > news >正文

(三)HTTPTomcatServlet

一、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 = "/*")

相关文章:

  • MySQL主从搭建
  • 20221226编译Toybrick的TB-RK3588X开发板的Android12系统3
  • 并查集解决重复员工问题
  • 详细介绍关于自定义类型:结构体、枚举、联合【c语言】
  • 【swaggo】swaggo使用详解
  • 2022圣诞代码合集(圣诞树+圣诞老人)
  • 使用 JavaScript 检测用户是否在线
  • 倒单摆22Inverted pendulum)c++代码1201
  • 车载诊断数据库ODX——Flash(刷写)
  • Linux中的进程状态
  • 【C函数】函数详解
  • jdk11新特性——ZGC
  • 【java】stream流
  • 在linux中配置redis去中心化集群
  • 2022圣诞树(C语言摇钱树版本)
  • 【圣诞节】飘雪圣诞树
  • 口罩佩戴监测系统 yolo
  • 卡塔尔世界杯半自动越位识别技术(SAOT)的工作原理
  • 《图解TCP/IP》阅读笔记(第六章 6.5、6.6)——其他代表性的传输层协议与UDP、TCP首部
  • 如何花最少的资源遍历二叉树
  • 太好玩了!坐进大卫·霍克尼的敞篷车进入他画笔下的四季
  • 我国将出台稳就业稳经济推动高质量发展若干举措,将根据形势变化及时出台增量储备政策
  • 牛市早报|今年国内核电项目审批首次开闸,离境退税起退点下调
  • IPO周报|4月最后2只新股周一申购,今年以来最低价股来了
  • 经济日报:多平台告别“仅退款”,规则调整有何影响
  • 坤莹·帕塔玛·利斯达特拉任世界羽联主席