【Servlet】这一文详细的讲述了Servlet的知识,呕心沥血,终于文成。

news/2024/5/6 20:49:27/文章来源:https://blog.csdn.net/m0_59792745/article/details/126768250

文章目录

  • 什么是Servlet?
  • Servlet的使用
    • 1、创建一个Web项目,并集成Tomcat
    • 2、引入Servlet的依赖
    • 3、创建一个Web启动类
      • 第一个是重写Servlet接口
      • 第二个是继承HttpServlet
  • Servlet的理解
    • Servlet的执行流程
    • Servlet的生命周期
      • 加载和实例化阶段
      • 初始化阶段
      • 请求处理
      • 服务终止
      • 常见问答题
    • Servlet的体系结构
      • 使用HttpServlet的原因
      • HttpServlet的工作原理
    • UrlPatten的配置
      • 一个Servlet,可以配置多个urlPatton
      • 配置规则
      • Xml配置访问路径(不建议使用)

这篇博客真的很详细的讲述了Servlet,看看不吃亏。
如有错误欢迎指正,自古问过则喜。
余虽无圣人之质,然愿效圣人之行。强作之者,亦英雄也。

什么是Servlet?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Servlet是Java提供的一门动态Web资源开发技术

静态Web和动态Web有什么区别吗?

静态Web,像Html+Css+Js这样的死页面,不会随着用户的改变而改变

而动态Web,会区分用户的不同而为其展现不同的页面

Servlet也是JavaEE十三项规范之一,所谓的规范也就是接口,所以我们要使用Servlet,就需要Servlet类实现Servlet的接口,并在Web服务器上运行。Servlet有五大方法,init、service、destory、getServletInfo、getServletConfig。

下图显示了 Servlet 在 Web 应用程序中的位置。

Servlet 架构

Servlet的使用

1、创建一个Web项目,并集成Tomcat

不会的可以看这篇文章:

2、引入Servlet的依赖

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>

一定要加上 provided,因为Tomcat中是有Servlet的jar包的,再引入会冲突,反而会报错。这句话的作用是指这个依赖仅仅在测试和编译的情况下,才会被引入。

3、创建一个Web启动类

第一个是重写Servlet接口

package com.you.web;import javax.jws.WebService;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;@WebServlet(urlPatterns = "/demo1")
public class webServlet01 implements Servlet {@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println("init.....");}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {System.out.println("service....");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {System.out.println("distory.....");}
}

启动Tomcat,访问demo1看一下效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K3t7NYVB-1662627926062)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\image-20220908165606032.png)]

第二个是继承HttpServlet

package com.you.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(urlPatterns = "/demo2")
public class webServlet02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Get...");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Post...");}
}

访问demo2看一下效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tKDE9gTD-1662627853040)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\image-20220908165708932.png)]

Servlet的理解

Servlet的执行流程

网页中请求的URL可以被切割为三部分,如下第一部分htpp://localhsot:8080的作用是找到服务器,第二部分web-demo的作用是找到web项目,第三部分demo1的作用则是找到web项目中的Servlet。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30YKot9Q-1662627853042)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\image-20220908111228752.png)]

Servlet的生命周期

Servlet的生命周期可以分为4个阶段:加载和实例化、初始化、请求处理、服务终止

加载和实例化阶段

默认情况下,当Servlet第一次被访问的时候,由容器创建Servlet对象。

当然,我们也不可以不默认。只需要使用@WebService(urlPattems = “/demo”,loadOnStartup = 1)

  • 当loadOnStartup = 负整数时,这是默认情况,第一次被访问的时候创建Servlet对象。

  • 当loadOnstartup = 0或者正整数时,服务器启动的时候,就会创建Servlet对象,数字越小优先级就越高。

当项目比较大的时候,第一次访问时再创建Servlet,用户就会等待一段时间,这样用户的体验感就会下降,这时候我们选择在服务器启动的时候创建Servlet,用户就会有一个更好的体验感!

初始化阶段

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

请求处理

每次请求Servlet的时,Servlet容器都会调用service()的方法对请求进行处理。也就是每进入Servlet的网页,都会调用Servlet的service()方法。

服务终止

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

刚才提到Servlet有五大方法,init、service、destory、getServletInfo、getServletConfig。

方法名方法注解
initvoid init(ServletConfig config)初始化方法,在Servlet被创建时执行,并且只执行一次
servicevoid service(ServletRequest req, ServletResponse res)提供服务方法,每当Servlet被访问,都会执行这个方法
destroyvoid destroy()销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet,只被执行一次,
getServletInfoString getServletInfo()获取Servlet的一个信息
getServletConfigServletConfig getServletConfig();获取ServletConfig类

常见问答题

Servlet由谁创建?Servlet方法由谁调用?

Servlet由Web服务器创建,Servlet方法由Web服务器调用。

服务器怎么知道Servlet中一定有Service方法?

因为我们自定义的Servlet,必须实现Servlet接口并且复写其方法,而Servlet接口中有Service方法。

Servlet的体系结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPrcYXTJ-1662627853043)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\image-20220908145339366.png)]

B/S和C/S的区别

C/S就是指客户端/服务器模式。是计算机软件协同工作的一种模式,通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。

B/S型模式,即浏览器/服务器结构。它是C/S架构的一种改进,可以说属于三层C/S架构。主要是利用了不断成熟的WWW浏览器技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。

使用HttpServlet的原因

对于一个正常的项目来讲,他的请求方式不会是单一的,至少是Post、Get两种请求,这两种携带信息的位置并不一致,Post携带信息的位置在请求体,而Get携带信息的位置在请求头,这意味着我必须对二者进行区分,才能正确拿到其携带的信息。

HttpServlet的工作原理

HttpServlet的工作原理非常的简单,用四个字概括即为分而治之,对于每一个请求判断是哪一类请求,如果是“Get”请求,就调用doGet方法,如果是“Post”请求,就去调用doPost方法。这是do…方法,就是我们要使用的。

首先是调用Servlet自带的service方法,这里只做了一个操作就是把ServletRequest和ServletResponse转为Http…,然后传到service(Http… req,Http… resp),然后获取请求方式的名字,并调用相应的方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIMj8CyH-1662627853044)(D:\Typora\PicGo\未命名文件 (1)].png)

UrlPatten的配置

一个Servlet,可以配置多个urlPatton

Servlet想要被访问,就必须配置其访问路径。最为便捷的方式是通过注解配置,也就是上面用到的@WebServlet,其中有很多的属性,不同的属性之间用,隔开。今天我们讲的是urlPatterns属性,点来WebServlet,可以看到这是一个对象,这意味着他可以配置多个属性,这也表明了:一个Servlet可以有多个urlPattern(访问路径),如下

@WebServler(urlPatterns = {"/demo1","/demo2"})

这意味着我可以通过demo1或者demo2访问这个Servlet。

如果我只需要一个地址的话,则不需要加{},主需要写如下代码即可

@WebServlet(urlPatterns = "/demo1")

这样我便可以通过demo1访问这个Servlet了。

配置规则

  1. 精确匹配 如@WebServlet(urlPatterns = “/users/demo1”),那么我只能通过"users/demo1"访问这个Servlet
  2. 目录匹配 如@WebServlet(urlPatterns = “/users/*”),那么我可以通过"users/任何字符串"访问这个Servlet
  3. 扩展名匹配 如WebServlet(urlPatterns = “*.do”),那么我可以通过"任何字符串.do"访问这个Servlet
  4. 任意匹配,如WebServlet(urlPatterns = “/*”),那么我可以通过任何途径访问到这个Servlet,但是注意不要设置成"/",这样会覆盖掉DefaultServlet,导致静态页面无法加载。

Xml配置访问路径(不建议使用)

在Servlet3.0之前,只支持web.xml配置访问路径。

需要在Web.xml下配置如下代码

<servlet><servlet-name>demo</servlet-name><servlet-class>com.you.web.ServletDemo02</servlet-class></servlet><servlet-mapping><servlet-name>demo</servlet-name><url-pattern>demo5</url-pattern></servlet-mapping>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

202112-2 CCF 序列查询新解 (枚举 + 分段讨论 满分题解)

问题描述 序列查询新解 题目链接 解题思路 这个是上一道题目总结出来的规律 就是 f(x) i 当x属于 【a[i], a[i 1] &#xff09; 这个区间 也就是在这个区间里f(x)都等于一个数i 再看g(x)这个函数&#xff0c;g(x&#xff09; x / 常数&#xff0c;也可以知道&#xff0c;g…

微服务技术初探(go-micro)

微服务技术初探 微服务概述 微服务是近几年产生的新概念,与传统的单体式服务相比,微服务具有更好的扩展性及低耦合度等特性。微服务的重点在于服务的治理和调度。 微(micro):狭义来说就是体积小。 服务(service):区别于系统,服务一个或者一组相对较小且独立的功能单元,是…

c语言实现通讯录

目录标题通讯录的介绍通讯录的准备通讯录的初始化通讯录的添加通讯录的打印通讯录的查找并打印通讯录的删除通讯录的排序通讯录的修改通讯录的改善动态通讯录的实现以文件的形式存储通讯录的介绍 通讯录想必大家都应该不陌生&#xff0c;我们在手机里面都会有通讯录里面记录着…

爬虫数据可视化前的环境准备(已安装python环境前提下)

一、requests请求库安装 在桌面右键打开终端输入:pip install requests 二、Beautiful Soup解析库安装 终端输入:Beautiful Soup 4安装:pip install bs4 lxml安装:pip install lxml三、matplotlib安装下载miniconda下载地址:https://docs.conda.io/en/latest/miniconda.ht…

CF102411 ICPC 2019-2020 North-Western Russia Regional Contest题解

A Accurate Movement 签到 M Managing Difficulties 签到 B Bad Treap 已知\(y=\sin(x)\),要求给出数组\(a[n]\),满足\(\forall i,j\in[1,n],a[i]\neq a[j]\),都有\(\sin(a[i])\neq \sin(a[j])\)。 这里又一种不怎么玄的写法,就是我们找到一个整数\(x\),\(sin(x)\)非常非常…

计算机的概述

计算机是由硬件系统(hardware system)和软件系统(software system)两部分组成的。硬件系统电源电源是电脑中不可缺少的供电设备,它的作用是将220V交流电转换为电脑中使用的5V、12V、3.3V直流电,其性能的好坏,直接影响到电脑其他设备工作的稳定性,进而会影响整机的稳定性…

AXI MCDMA 仿真与工作流程分析

说明 关于背景知识,可以先看 https://www.cnblogs.com/xingce/p/16386108.html 引用一段官方的说明,AXI MCDMA存在的主要目的是为了节约资源,我们想要使用这个模块的主要目的也是为了降低资源消耗,从而可以将系统部署在更小面积的FPGA芯片上,当然,具体的效果还需要进一步…

软件定义网络第一次作业,问题与解决方法

软件定义网络第一次作业,问题与解决方法 实验结果截图:实验总结: 1.若使用VMware Workstation Pro。 版本最好使用20.04版本,网络较稳定且兼容性好。且22.04版本可能无法安装Vmware tools。 2.遇到网络无法访问,可尝试换源。 3.若需要压缩包,可在虚拟机中下载,或从电脑拖…

【kali】一款黑客们都在使用的操作系统

&#x1f495;&#x1f495;&#x1f495; 博主昵称&#xff1a;摆烂阳&#x1f495;&#x1f495;&#x1f495; &#x1f970;博主主页跳转链接 &#x1f469;‍&#x1f4bb;博主研究方向&#xff1a;web渗透测试 、python编程 &#x1f4c3; 博主寄语&#xff1a;希望本篇文…

共享单车需求量登记分类及影响因素分析——基于机器学习模型的比较分析

全文链接&#xff1a;http://tecdat.cn/?p28519 作者&#xff1a;Yiyi Hu 近年来&#xff0c;共享经济成为社会服务业内的一股重要力量。作为共享经济的一个代表性行业&#xff0c;共享单车快速发展&#xff0c;成为继地铁、公交之后的第三大公共出行方式。但与此同时&…

【笔记】Python网络爬虫与信息提取

实战&#xff1a;总结知识点疫情爬虫Re正则表达式Re库的使用scrapy爬虫框架介绍Scrapy常用命令网络爬虫技术亮点&#xff1a;1、采用requests发送请求&#xff0c;获取响应2、采用BeautifulSoup4解析页面数据3、采用正则表达式 提取不规则字符串4、采用json模块处理json格式数据…

Java架构师常见基础面试题(附答案)

随着每日确诊病例人数的减少以及治愈患者人数增多&#xff0c;随着这场抗“疫”战争即将以胜利告终&#xff0c;接踵而来的是企业复工、金三银四求职高峰季的来临。有很多Java工程师想要把握住这个机会&#xff0c;实现升职加薪、成为Java架构师。但你知道企业在招聘面试时会提…

证件照换底色

阅读原文 如有侵权,请联系立即删除。 5种方法轻松给证件照换底色不同底色的证件照有着不同的用途。如白底的证件照一般用于身份证、港澳通行证等用途;而蓝底的证件照则用于工作证、简历等。例如我们需要提供蓝色背景的证件照,而手头只有白色背景的证件照,该怎么办呢?其实我…

开学季征文丨来大学已两年,我还有几个两年?

&#x1f44b;写在前面 大家好&#xff0c;我是陈橘又青&#xff0c;一名双非本科大学生&#xff0c;计算机科学与技术专业&#xff0c;最近因为疫情的原因&#xff0c;开学以来一直在家里上网课&#xff0c;也不是很忙&#xff0c;所以我想借着这次开学季征文活动&#xff0c;…

羧基化聚苯乙烯-二氧化硅复合材料/季铵化壳聚糖掺杂荷正电聚苯乙烯微球的制备步骤

今日小编为大家分享了羧基化聚苯乙烯-二氧化硅复合材料/季铵化壳聚糖掺杂荷正电聚苯乙烯微球的制备步骤&#xff0c;一起来看&#xff01; 羧基化聚苯乙烯-二氧化硅复合超疏水涂层的制备方法,其特征在于包括如下步骤&#xff1a; (聚苯乙烯种子微球的制备;羧基修饰的聚苯乙烯微…

【控制】滑模控制,小例子,有程序有结果图

目录滑模控制的一点笔记和看法1【控制】滑动模型控制&#xff08;Sliding Mode Control&#xff09;2【控制】滑模控制&#xff0c;小例子&#xff0c;有程序有结果图3【控制】滑模控制&#xff0c;滑模面的选择文章目录1 问题描述2 滑模控制器设计2.1 滑模面选择2.2 控制器设计…

麻了,别再为难软件测试员了

前言 有不少技术友在测试群里讨论&#xff0c;近期的面试越来越难了&#xff0c;要背的八股文越来越多了,考察得越来越细&#xff0c;越来越底层&#xff0c;明摆着就是想让我们徒手造航母嘛&#xff01;实在是太为难我们这些测试工程师了。 这不&#xff0c;为了帮大家节约时…

hive中使用iceberg表格式时锁表总结

1. 原因 写入iceberg表时,会在hive_locks表中插入一条记录,表示该表正在被写入(hive中的独占锁)当数据插入完成后,会自动删除该条记录。 2. 出现场景 (1)在同时往同一个iceberg表中写入数据时,会出现Retrying task after failure: Waiting for lock之类的警告信息 如果有…

Docker 环境 Nacos2 MySQL8

本文介绍 docker 环境下安装并单机运行 Nacos2,使用 docker 环境下的 MySQL 8 存储数据。本文介绍 docker 环境下安装并单机运行 Nacos2,使用 docker 环境下的 MySQL 8 存储数据。 1 拉取镜像 1.1 创建目录 在硬盘上创建 nacos 的有关目录: mkdir -p /Users/yygnb/dockerMe/…

FPGA之旅设计99例之第十三例-----FPGA在OLED上显示DHT11数据

一. 简介 这是FPGA之旅设计的第十三例啦&#xff0c;本例是一个综合性的例程&#xff0c;基于OLED屏幕显示&#xff0c;和DHT11温湿度采集&#xff0c;将DHT11采集到的温湿度显示到OLED屏幕上。 在开始本例之前&#xff0c;先补充一下&#xff0c;在上例中&#xff0c;代码中…