JavaWeb-Servlet【内含思维导图】

news2024/12/22 18:45:55

目录

Servlet思维导图​编辑

1.什么是Servlet

2.Servelt概述

3.Servlet-Quickstart Your Project

3.1创建一个Web项目,导入Servlet依赖

3.1.1 选择Servlet导入依赖      

3.1.2 导入Servlet依赖

3.2 在Web项目,定义类,实现Servlet接口,并重写其方法

 3.2.1 Servlet 方法介绍

4. Servlet 执行流程

 5. Servlet 生命周期

6. Servlet 生命周期

6.1 HttpServlet 原理

6.2 HttpServlet 使用步骤

7.Servlet urlPattern配置

 7.1.一个Servlet,可以配置多个 urlPattern

7.2 urlPattern 配置规则


Servlet思维导图

1.什么是Servlet

【摘自百度百科】        

        Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
        狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
        最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

2.Servelt概述

        Servlet:Java提供的一门动态web资源开发技术

        Servlet 是JavaEE 规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

        Defines methods that all servlets must implement. 
        A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol. 

        To implement this interface, you can write a generic servlet that extends javax.servlet.GenericServlet or an HTTP servlet that extends javax.servlet.http.HttpServlet.

        定义所有servlet必须实现的方法。

        servlet是一个在Web服务器中运行的小型Java程序。Servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求。

        为了实现这个接口,您可以编写一个扩展javax.servlet.GenericServlet的通用servlet,或者编写一个延伸javax.servlets.HTTP.HttpServlet的HttpServlet。

3.Servlet-Quickstart Your Project

        前置知识:JavaEE 、Maven、Tomcat

3.1创建一个Web项目,导入Servlet依赖

3.1.1 选择Servlet导入依赖      

        可以先去Maven厂库,查询Servlet的依赖

        Mevam厂库官网:https://mvnrepository.com/

 

发现,Servlet的依赖,目前 Servlet依赖版本的3.0.1 、3.1.0、4.0.1的使用次数最多,我们就在这3个版本选择其中一个即可

3.1.2 导入Servlet依赖

        以导入Servlet 3.1.0的版本为例

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

3.2 在Web项目,定义类,实现Servlet接口,并重写其方法

        以Serlvet的service()方法为例

 3.2.1 Servlet 方法介绍

        初始化方法,在Servlet被创建时执行,只执行一次

void init(ServletConfig config) 

        提供服务方法, 每次Servlet被访问,都会调用该方法

void service(ServletRequest req, ServletResponse res)

        销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet

void destroy()

        获取ServletConfig对象

ServletConfig getServletConfig()

        获取Servlet信息

String getServletInfo()

4. Servlet 执行流程

 5. Servlet 生命周期

Servlet 生命周期:对象的生命周期指一个对象从被创建到被销毁的整个过程 

       

        Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,

分为4个阶段: 加载和实例化 、初始化、请求处理、服务终止

        1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

        2.初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次

        3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。

        4.服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

6. Servlet 生命周期

         开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet

6.1 HttpServlet 原理

        HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法,它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().
    HttpServlet容器响应Web客户请求流程如下:
        1)Web客户向Servlet容器发出Http请求;
        2)Servlet容器解析Web客户的Http请求;
        3)Servlet容器创建一个HttpServletRequest对象(继承于ServletRequest),在这个对象中封装Http请求信息;
        4)Servlet容器创建一个HttpServletResponse对象;
        5)Servlet容器调用HttpServlet的service方法,把HttpServletRequest和HttpServletResponse对象作为service方法的参数传给HttpServlet对象;
        6)HttpServlet调用HttpServletRequest的有关方法,获取HTTP请求信息;
        7)HttpServlet调用HttpServletResponse的有关方法,生成响应数据;
        8)Servlet容器把HttpServlet的响应结果传给Web客户。

        HTTP 协议中,GET 和 POST 请求方式的数据格式不一样,将来要想在Servlet中处理请求参数,得在service方法中判断请求方式,并且根据请求方式的不同,分别进行处理

6.2 HttpServlet 使用步骤

       1. 继承HttpServlet

       2.重写doGet和doPost方法

7.Servlet urlPattern配置

         Servlet 要想被访问,必须配置其访问路径(urlPattern)

源码分析 

7.1.一个Servlet,可以配置多个 urlPattern

//一个Servlet,可以配置多个 urlPattern
@WebServlet(urlPatterns={"/HttpServletDemo5","/HttpServletDemo6","/HttpServletDemo7"} )


public class HttpServletDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("/HttpServletDemo5 , /HttpServletDemo6");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

7.2 urlPattern 配置规则

/**
 * 精确匹配
 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo5
 */
@WebServlet("/HttpServletDemo5")

/**
 * 目录匹配
 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo5
 *         http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo6
 *         http://localhost:8080/JavaWeb_Servlet_Demo/HttpServletDemo7
 */
@WebServlet("JavaWeb_Servlet_Demo/*")

/**
 * 扩展名匹配
 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/aaa.do
 *         http://localhost:8080/JavaWeb_Servlet_Demo/bbb.do
 *         http://localhost:8080/JavaWeb_Servlet_Demo/ccc.do
 */
@WebServlet("*.do")

/**
 * 任意匹配
 * 访问路径:http://localhost:8080/JavaWeb_Servlet_Demo/abc
 *         http://localhost:8080/JavaWeb_Servlet_Demo/qwe
 *         http://localhost:8080/JavaWeb_Servlet_Demo/zxc
 *         
 *  / 和 /* 区别:
 * 当项目中的Servlet配置了“/”,会覆盖掉tomcat中的DefaultServlet,当其他的 url-pattern都匹配不上时都会走这个Servlet
 * 当项目中配置了“/*”,意味着匹配任意访问路径
 */
@WebServlet("/*")
@WebServlet("/")

/**
 * 优先级:
 *        精确路径 > 目录路径 > 扩展名路径 > /* > /
 */

感谢关注

未完,待更新

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

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

相关文章

Java8新特性-流式操作

在Java8中提供了新特性—流式操作&#xff0c;通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行&#xff0c;提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢…

Python基础合集 练习19(类与对象3(多态))

多态 class Horse: def init(self, name) -> None: self.name name def fature(self):return 父亲-----马的名字: {0}.format(self.name)def mover(self):print(马儿跑起来很潇洒)class Monkey: def init(self, name) -> None: self.name name def fature(self):ret…

《用于准确连续非侵入性血压监测的心跳内生物标志物》阅读笔记

目录 0 基础知识 1 论文摘要 2 论文十问 3 实验结果 4 论文亮点与不足之处 5 与其他研究的比较 6 实际应用与影响 7 个人思考与启示 参考文献 0 基础知识 非侵入性是指在进行医学检查或治疗时&#xff0c;不需要切开皮肤或穿刺体内组织&#xff0c;而是通过外部手段进…

【VQGAN论文精读】Taming Transformers for High-Resolution Image Synthesis

【VQGAN论文精读】Taming Transformers for High-Resolution Image Synthesis 0、前言Abstract1. Introduction2. Related Work3. Approach3.1. Learning an Effective Codebook of Image Constituents for Use in Transformers学习一个有效的图像成分的Codebook为了在Transfor…

高性能:负载均衡

目录 什么是负载均衡 负载均衡分类 服务端负载均衡 服务端负载均衡——软硬件分类 服务端负载均衡——OSI模型分类 客户端负载均衡 负载均衡常见算法 七层负载均衡做法 DNS解析 反向代理 什么是负载均衡 将用户请求分摊&#xff08;分流&#xff09; 到不同的服务器上…

小记Java调用C++开发的动态链接库(DLL)

一、背景 五一快乐吖&#xff01;死肥宅正趁着五一这段时间&#xff0c;努力提升自己&#xff01; 最近使用Java拦截Windows系统中一些默认事件时&#xff0c;发现了一些瓶颈。 我用Java操作浏览器、用Java最小化其他应用窗口&#xff0c;但是我发现这个操作&#xff0c;他都…

【Unity-UGUI控件全面解析】| InputField 输入框组件详解

🎬【Unity-UGUI控件全面解析】| InputField 输入框组件详解一、组件介绍二、组件属性面板2.1 Content Type(内容类型)三、代码操作组件四、组件常用方法示例4.1 代码限制输入字符4.2 校验文本输入格式4.3 校验输入文本长度💯总结🎬 博客主页:https://xiaoy.blog.csdn.…

话说【永恒之塔sf】里面最有前途的职业:商人

如果有人问我永恒之塔里面什么职业最有前途&#xff01;那我告诉你就是商人&#xff01; 做一个NB商人比拥有一身牛b装备要更有成就感。 在老区由于进入的比较晚&#xff0c;所以最后随了大流被淹死在千万基纳中。为了证明商人在永恒之塔是钱途无量的&#xff0c;我转到了新区—…

快解析动态域名解析,实现外网访问内网数据库

今天跟大家分享一下如何借助快解析动态域名解析&#xff0c;在两种特定网络环境下&#xff0c;实现外网访问内网mysql数据库。 第1种网络环境&#xff1a;路由器分配的是动态公网IP&#xff0c;且有路由器登录管理权限。如何实现外网访问内网mysql数据库&#xff1f; 针对这种…

IDEA2022版教程上()

0、前景摘要 0.1 概览 0.2 套课程适用人群 初学Java语言&#xff0c;熟悉了记事本、EditPlus、NotePad或Sublime Text3等简易开发工具的Java初学者熟练使用其他Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;需要转向IDEA工具的Java工程师们关注IDEA各方面特性的J…

Hadoop大数据分析技术(伪分布式搭建)

一.安装JDK和配置SSH免密登录 &#xff08;1&#xff09;准备软件 &#xff08;2&#xff09;解压压缩包 tar -zxvf jdk-8u221-linux-x64.tar.gz &#xff08;3&#xff09;在此处我们配置系统环境变量&#xff0c;使用命令&#xff1a; vim /etc/profile &#xff08;4&#x…

Python入门教程(高级版)

Python用了好几年了&#xff0c;但似乎一直没 “系统入门” 过&#xff08;o(╯□╰)o&#xff09;。今年&#xff08;2023年&#xff09;趁着五一假期&#xff0c;我做了一次相对完整的 “入门” ——本文是这次学习历程的详细记录。 目录 1 Python基础1.1 Python1.1.1 认识Py…

Oracle VM VirtualBox安装centos7步骤 for win10

目录 1.安装VirtualBox 2.安装vagrant 3.安装centos7 4.查看网络与百度和物理机连通情况 5.设置IP 1.安装VirtualBox 下载的链接:Downloads – Oracle VM VirtualBox 2.安装vagrant 根据自己的操作系统选择对应的版本。 Install | Vagrant | HashiCorp Developer 我的P…

asp.net+sqlserver旅游网站zjy99A2

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

redis使用总结

目录 redis安装与登录redis 持久化RDB(Redis DataBase)AOF(Append Only File)RDB-AOF混合持久纯缓存模式 redis 的 keyredis 的数据类型和常见应用场景StringListHashMapSet集合ZSet有序集合bitmap位图HyperLogLog基数统计GEO 地理空间Stream 流bitfiled redis 事务事务的正常执…

《基于EPNCC的脉搏信号特征识别与分类研究》阅读笔记

目录 一、论文摘要 二、论文十问 三、论文亮点与不足之处 四、与其他研究的比较 五、实际应用与影响 六、个人思考与启示 参考文献 一、论文摘要 为了快速获取脉搏信号的完整表征信息并验证脉搏信号在相关疾病临床诊断中的敏感性和有效性。在本文中&#xff0c;提出了一…

ChatGPT根据销售数据、客户反馈、财务报告,自动生成报告,并根据不同利益方的需要和偏好进行调整?

该场景对应的关键词库&#xff08;24个&#xff09;&#xff1a; 汇报对象身份&#xff08;下属、跨部门平级、领导&#xff09;、销售数据&#xff08;销售额、销售量、销售渠道&#xff09;、财务报告&#xff08;营业收入、净利润、成本费用&#xff09;、市场分析&#xf…

Vulkan实战之验证层

文章目录 验证层是什么&#xff1f;使用验证层消息回调调试实例的创建和销毁测试配置最终代码 验证层是什么&#xff1f; Vulkan API是围绕最小化驱动程序开销的想法设计的&#xff0c;该目标的表现之一是默认情况下API中的错误检查非常有限。即使是像将枚举设置为不正确的值或…

STM32 系列 DAC的介绍与使用

STM32网上资料多&#xff0c;对自己来说基本的使用也是很简单的&#xff0c; 我的STM32专栏并没有什么系统的基础教学&#xff0c;基本上是某个项目用到了&#xff0c;或者产品使用过程出过问题 才会来记录一下&#xff0c;正好用到了 DAC &#xff0c;一般产品还用得不多&…

【Unity入门】23.简单物理系统

【Unity入门】简单物理系统 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;重力系统 &#xff08;1&#xff09;Rigidbody组件 Unity里面有提供符合我们常规认知的物理系统组件Physics&…