(三)HTTPTomcatServlet

news2025/1/18 7:39:42

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

漫画 | JavaScript杀死了编程......

上班路上&#xff0c;张大胖突然想到一个点子。晚上&#xff0c;张大胖开工&#xff0c;决定把好点子给实现了。JavaScript开发效率贼高&#xff0c;项目迅速完成。项目开源发布&#xff0c;获得了不少用户&#xff0c;收获了不少star&#xff0c;张大胖非常满意。转眼间&#…

【GlobalMapper精品教程】039:GM面状数据符号化设置案例教程

GM面状数据符号化设置案例教程。 文章目录 一、使用基于分类或自定义样式的默认样式二、对所有要素使用相同样式三、基于属性/名称值应用样式四、随机指定颜色给要素一、使用基于分类或自定义样式的默认样式 该样式类似于其他GIS软件的单一样式,即为数据加载的默认样式。加载…

Stable Diffusion攻略集(Stable Diffusion官方文档、kaggle notebook、webui资源帖)

文章目录第一部分一、 Features&#xff1a;Textual Inversion&#xff08;文本反转&#xff09;1.1 Textual Inversion 简介1.1.1 摘要1.1.2 算法1.1.3 模型效果1.2 Textual Inversion of webai1.2.1 预训练embedding用于图片生成1.2.2 训练embedding1.2.3 Finding embeddings…

【Redis】知识体系结构构建以及常见考题汇总

【Redis】知识体系结构构建以及常见考题汇总1、思维导图2、Redis体系结构&#xff1a;原理、部署2.1、Redis实现原理2.1.1、Redis中数据结构2.1.2、不同对象的数据类型&#xff08;基本类型、特殊类型&#xff09;2.2、Redis部署2.2.1、基本配置&#xff08;缓存的更新、删除和…

【Linux】基础命令

目录 1.ls指令 2.pwd指令 3.cd指令 4.touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.less指令 12. head和tail 13.date指令 14.grep指令 15.bc指令 16.重要的几个热键 1.ls指令 语法&#xff1a;ls 选项 …

Taro React组件开发(2) —— RuiEditor 富文本编辑器【兼容H5和微信小程序】

1. 富文本编辑器需求分析 需要实现图片上传显示,上传使用Taro的 chooseImage 和 uploadFile,完成图片的上传!!!文字的居左、居中、居右展示,使用格式化方法 format!!!文字的加粗、倾斜、下划线,使用格式化方法 format!!!2. 富文本编辑 获取提示文本 placeholder;…

【C++】string类常用函数接口

在使用库函数中的string类时&#xff0c;需要包含头文件#include 。 1.构造函数和拷贝构造 string s1;string s2("hello world");string s3(s2);下面通过VS调试的监视窗口看一下初始化之后的内容&#xff1a; 还有一种构造函数&#xff0c;是拷贝一个字符串的一部分…

Kubernetes 1.26 新功能 Pod 调度就绪特性解析

Kubernetes 1.26 新功能 Pod 调度就绪特性解析 Kubernetes 1.26 引入了 Pod 的一个新特性&#xff1a;scheduling gates。在 Kubernetes 中&#xff0c;调度门是告诉调度程序何时准备好考虑调度 Pod 的 keys。 它解决了什么问题&#xff1f; 当一个 Pod 创建时&#xff0c;调…

从发现SQL注入到ssh连接

前言&#xff1a; 某天&#xff0c;同事扔了一个教育站点过来&#xff0c;里面的url看起来像有sql注入。正好最近手痒痒&#xff0c;就直接开始。 一、发现时间盲注和源码 后面发现他发的url是不存在SQL注入的&#xff0c;但是我在其他地方发现了SQL盲注。然后改站点本身也可…

C++/Java调用C++动态链接库————附带示例和详细讲解

文章目录0 准备1 C调用动态链接库2 Java调用C动态链接库3 运行0 准备 在CMake中&#xff0c;使用如下的方法把代码编译成动态/静态链接库&#xff1a; # 设置项目名 project(getMatInfo)# 设置c版本 set(CMAKE_CXX_STANDARD 11)# 如果不填写SHARE&#xff0c;默认为静态链接…

Spring Security开发实践

Spring Security 是 Spring 家族中用于提供认证、授权和攻击防护功能的一套安全框架。它也是 Spring 应用在安全框架方面的公认标准。 Spring Security 安全框架适合为 Spring Boot 项目提供安全保护&#xff0c;所以如果您是个 Spring Boot 项目的开发人员&#xff0c;且正在寻…

Python 将视频按照时间维度剪切 | Python工具

目录 前言 环境依赖 代码 总结 前言 本文提供将视频按照时间维度进行剪切的工具方法&#xff0c;一如既往的实用主义。 环境依赖 ffmpeg环境安装&#xff0c;可以参考我的另一篇文章&#xff1a;windows ffmpeg安装部署_阿良的博客-CSDN博客 本文主要使用到的不是ffmpeg&a…

基于Vue.js+Node问卷调查系统的设计与实现

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

ORM框架

ORM框架可以做的两件事&#xff1a; 创建、修改、删除数据库中的表&#xff08;不用写SQL语句)。【无法创建数据库】操作表中的数据&#xff08;不用写SQL语句&#xff09; 1.安装第三方模块&#xff1a; pip3.9 install mysqlclient 2.创建数据库&#xff1a; 启动Mysql服务…

20221226编译Toybrick的TB-RK3588X开发板的Android12系统2-SDK预处理

20221226编译Toybrick的TB-RK3588X开发板的Android12系统2-SDK预处理 2022/12/26 16:40 结论&#xff1a; 1、风火轮技术团队的技术支持力度欠佳&#xff01; 淘宝客服只能处理发货问题&#xff0c;发发SDK还可以&#xff0c;技术问题只能找联系方式 联系手机&#xff1a;18926…

一起从零开始学VUE(16)生命周期与组合式API

文章目录生命周期自定义hook函数toRef其他组合APIshallowReactive与shallowRefreadonly与shallowReadonllytoRaw 与 markRawcustomRefprovide与inject响应式数据的判断生命周期 除了直接写对应的钩子函数外&#xff0c;Vue3.0也提供了composition API形式的钩子函数&#xff0c…

【再学Tensorflow2】TensorFlow2的建模流程:电影评论分析

TensorFlow2的建模流程&#xff1a;电影评论分析词嵌入技术数据准备定义模型训练模型评估模型使用模型保存模型参考资料情感分析无处不在&#xff0c;它是一种基于自然语言处理的分类技术。其主要解决的问题是给定一段话&#xff0c;判断这段话是正面的还是负面的。情感分析的本…

KDE桌面环境下电源管理对应的文件及选项

在KDE桌面环境下&#xff0c;“系统设置”—>“电源管理”—>“高级电源设置”的界面如下&#xff1a; 点击界面中的“配置通知”选项&#xff0c;界面如下所示&#xff1a; 其中图形界面下的各项设置对应的文件为~/.config/powerdevil.notifyrc。上图状态下&#xff0c…

Elasticsearch8.X入门实战(七)Java API操作:员工信息

Elasticsearch本身使用Java开发,因此对Java的支持能力是最好的。本节通过对员工信息建立索引,并对索引数据进行添加、修改等,讲解Elasticsearch的相关Java客户端 API的操作。 1.新建项目 在Eclipse中新建Maven项目elasticsearch_demo,在pom.xml文件中加入项目的依赖库,…

vue2[webpack]中接入vue3[vite]的qiankun微前端服务

本文记录在 vue2[webpack]老项目中&#xff0c;使用qiankun.js微前端服务&#xff0c;接入vue3[vite]新项目。 纯vue2[webpack]技术项目可参考以前的文章&#xff1a; vue项目落地(qiankun.js)微前端服务-zhanghaoran’s blog vue2为基座主应用&#xff1b; vue3为子应用。 改造…