Servlet细节

目录

 

1 Servlet 是否符合线程安全?

2 Servlet对象的创建时间?

3 Servlet 绑定url 的写法

3.1 一个Servlet 可以绑定多个url

3.2 在web.xml 配置文件中 url-pattern写法


 

1 Servlet 是否符合线程安全?

答案:不安全

判断一个线程是否安全?条件是 是否存在共享元素【全局变量】

举例

因为一个类型的Servlet只有一个实例对象,那么就有可能会现时出一个Servlet同时处理多个请求,那么Servlet是否为线程安全的呢?答案是:“ 不是线程安全的 ”。这说明Servlet的工作效率很高,但也存在线程安全问题!

所以我们不应该在Servlet中便宜创建成员变量,因为可能会存在一个线程对这个成员变量进行写操作,另一个线程对这个成员变量进行读操作。

2 Servlet对象的创建时间?

通过之前的学习,我们知道想要创建Servlet 对象,必须要满足两个条件

  • 首先要启动tomcat服务器
  • 其次要使用浏览器通过url访问Servlet,服务器创建Servlet 对象

在之前的博客中,有提到使用注解@WebServlet("url")【一般来说 :url:  /.... 的方式】 形式关联我们创建的Servlet 比在xml配置文件中添加,更加方便 。

但当浏览器访问时,通过url直接或间接 找到Servlet ,这里有个问题。第一次访问Servlet 时,等待时间比较长!在这里我称这种行为是:第一次惩罚。

注意

1 Servlet 和url 路径,本质上是映射的关系。我们可以通过url 找到与它匹配的Servlet

  • 我们可以理解成map集合中的key-value 键值对的

2 这里的“直接”的意思是:我们指定启动服务器的首页,刚好是要访问的Servlet 的前端页面

3 这里的“间接”的意思是:我们没有指定,而是手动在浏览器的搜索栏中输入和Servlet 匹配的路径,去访问

有什么方式,可以加快Servlet的创建速度,节省创建所需要的时间?

答案:让服务器在启动时就创建Servlet

假设这里我是AServlet 操作

应该怎么做呢?

解决办法

  • 在xml配置文件中添加    <load-on-startup> 数字</load-on-startup>    
  •  @WebServlet 注解上添加

1 在xml配置文件中添加    <load-on-startup> 数字</load-on-startup>    

   <load-on-startup>数字</load-on-startup>	
<servlet><servlet-name>AServlet</servlet-name>
<!--        对应在AServle中的路径:包名.类名--><servlet-class>fs.AServlet</servlet-class><init-param>
<!--            初始化参数--><param-name>key</param-name><param-value>value</param-value></init-param><load-on-startup>1</load-on-startup></servlet>

这样我就把Servlet的创建提前到服务器启动的时候。

启动服务器:

c87a57d9a4be4e18a2c657e8580b6ddf.png

2@WebServlet 注解上添加

注意:使用注解时,要把之前在xml配置文件上的添加url 的标签,要注释掉,否则会报错

原因:问题出在 @WebServlet 注解的使用上。具体来说,错误提示表明存在两个不同的 Servlet 类都尝试映射到同一个 URL 模式 /a

@WebServlet(value = "/a", loadOnStartup = 1)

5319888208104e2fb229a6acaa479310.png

注意

在这里value ,是不能被省略的。原因是只有一个参数时,value可以被省略,其余的不能被省略

3 Servlet 绑定url 的写法

3.1 一个Servlet 可以绑定多个url

注意:但这种方式不推荐

我们一般在@WebServlet 注解的使用

@WebServlet({"/a", "/aa"})

eb6694720fee4b828a61006055d79f06.png

运行

使用/a

2697b2787ebe4180a26755086add3dc3.png

使用/aa

注意:我们第一次访问时创建了AServlet对象,因此之后的访问中,不会再创建该对象,之后调用service()方法

b679669e1e0249cea17fa0423bc467c8.png

fd763b3e0900464f8fe6087cdb2a334a.png

3.2 在web.xml 配置文件中 url-pattern写法

  • 精确匹配:/字符串
  • 借助通配符 *
  • 匹配所有:/*
  • 前缀匹配:/abc/*
  • 后缀匹配:*/.后缀名

 

 

 

 

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

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

相关文章

w~视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12538137 #SIF3D 通过两种创新的注意力机制——三元意图感知注意力&#xff08;TIA&#xff09;和场景语义一致性感知注意力&#xff08;SCA&#xff09;——来识别场景中的显著点云&#xff0c;并辅助运动轨迹和姿态的预测…

fastjson不出网打法—BCEL链

前言 众所周知fastjson公开的就三条链&#xff0c;一个是TemplatesImpl链&#xff0c;但是要求太苛刻了&#xff0c;JNDI的话需要服务器出网才行&#xff0c;BCEL链就是专门应对不出网的情况。 实验环境 fastjson1.2.4 jdk8u91 dbcp 9.0.20 什么是BCEL BCEL的全名应该是…

GitLab使用操作v1.0

1.前置条件 Gitlab 项目地址&#xff1a;http://******/req Gitlab账户信息&#xff1a;例如 001/******自己的分支名称&#xff1a;例如 001-master&#xff08;注&#xff1a;master只有项目创建者有权限更新&#xff0c;我们只能更新自己分支&#xff0c;然后创建合并请求&…

MATLAB GUI设计(基础)

一、目的和要求 1、熟悉和掌握MATLAB GUI的基本控件的使用及属性设置。 2、熟悉和掌握通过GUIDE创建MATLAB GUI的方法。 3、熟悉和掌握MATLAB GUI的菜单、对话框及文件管理框的设计。 4、熟悉和掌握MATLAB GUI的M文件编写。 5、了解通过程序创建MATLAB GUI的方法。 二、内…

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理&#xff08;Message Broker&#xff09;软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP - Advanced Message Queuing Protocol&#xff09;。RabbitMQ 通过高效的消息传递机制&#xff0c;主要应用于分布式系统中解耦应用…

【es6】原生js在页面上画矩形及删除的实现方法

画一个矩形&#xff0c;可以选中高亮&#xff0c;删除自己效果的实现&#xff0c;后期会丰富下细节&#xff0c;拖动及拖动调整矩形大小 实现效果 代码实现 class Draw {constructor() {this.x 0this.y 0this.disX 0this.disY 0this.startX 0this.startY 0this.mouseDo…

【前端】JavaScript中的隐式声明及其不良影响分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;什么是隐式声明&#xff1f;&#x1f4af;隐式声明的常见情景1. 赋值给未声明的变量2. 非严格模式下的隐式声明3. 函数中的变量漏掉声明4. for 循环中的隐式声明5. 使用…

windows基础之病毒编写

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

家校通小程序实战教程02口令管理

目录 1 创建数据源2 搭建后台功能3 生成口令4 调用API总结 我们的小程序上线之后&#xff0c;必然面临家长要加入的问题。微搭有登录验证的功能&#xff0c;但是手机验证的机制是&#xff0c;如果你未注册就给你自动注册一个账号&#xff0c;如果以注册了收到验证码就可以登录系…

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch中的节点&#xff08;比如共20个&#xff09;&#xff0c;其中的10个选了一个master&#xff0c;另外10个选了另一个master&#xff0c;怎么办&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch中的节…

阿里发布 EchoMimicV2 :从数字脸扩展到数字人 可以通过图片+音频生成半身动画视频

EchoMimicV2 是由阿里蚂蚁集团推出的开源数字人项目&#xff0c;旨在生成高质量的数字人半身动画视频。以下是该项目的简介&#xff1a; 主要功能&#xff1a; 音频驱动的动画生成&#xff1a;EchoMimicV2 能够使用音频剪辑驱动人物的面部表情和身体动作&#xff0c;实现音频与…

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化&#xff1f; 重要性&#xff1a;★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&am…

C#基础控制台程序

11.有一个54的矩阵&#xff0c;要求编程序求出其中值最大的那个元素的值&#xff0c;以及其所在的行号和列号。 12.从键盘输入一行字符&#xff0c;统计其中有多少个单词&#xff0c;单词之间用空格分隔开。 13.输入一个数&#xff0c;判断它是奇数还是偶数&#xff0c;如果…

三六零[601360]行情数据接口

1、三六零&#xff1a;实时行情 Restful API # 测试接口&#xff1a;可以复制到浏览器打开 https://tsanghi.com/api/fin/stock/XSHG/realtime?tokendemo&ticker601360获取股票实时行情&#xff08;开、高、低、收、量&#xff09;。 请求方式&#xff1a;GET。 Python示例…

eclipse-git项目提示NO-HEAD

1、出现该问题的过程 本人在用eclipse拉取git代码&#xff0c;刚拉取完&#xff0c;可能还没来得及跟本地的分支合并&#xff0c;电脑就卡动了。无奈只能重启电脑&#xff0c;打开eclipse&#xff0c;maven项目后面就出现了xxx NO-HEAD的提示。 2、问题解决 根据错误提示&am…

Cross-Site Scripting(XSS)攻击

简介 XSS&#xff08;跨站脚本攻击&#xff09;是一种常见的 Web 安全漏洞&#xff0c;攻击者通过在目标网站的输入框中注入恶意脚本&#xff0c;当其他用户&#xff08;如管理员&#xff09;查看包含恶意脚本的页面时&#xff0c;脚本会在他们的浏览器中执行。XSS 攻击可以分…

uniapp中使用uni-forms实现表单管理,验证表单

前言 uni-forms 是一个用于表单管理的组件。它提供了一种简化和统一的方式来处理表单数据&#xff0c;包括表单验证、字段绑定和提交逻辑等。使用 uni-forms可以方便地创建各种类型的表单&#xff0c;支持数据双向绑定&#xff0c;可以与其他组件及API进行良好的集成。开发者可…

android 11添加切换分屏功能

引言 自Android 7开始官方就支持分屏显示,但没有切换分屏的功能,即交换上下屏幕。直到Android 13开始才支持切换分屏,操作方式是:分屏模式下双击中间分割线就会交换上下屏位置。本文的目的就是在Android 11上实现切换分屏的功能。 下图是Android13切换分屏演示 切换分屏…

springboot项目使用maven打包,第三方jar问题

springboot项目使用maven package打包为可执行jar后&#xff0c;第三方jar会被打包进去吗&#xff1f; 答案是肯定的。做了实验如下&#xff1a; 第三方jar的项目结构及jar包结构如下&#xff1a;&#xff08;该第三方jar采用的是maven工程&#xff0c;打包为普通jar&#xf…

13 —— 开发环境调错-source map

问题&#xff1a;代码被压缩后&#xff0c;无法正确定位源代码的位置&#xff08;行数和列数&#xff09; source map&#xff1a;准确追踪error和warning在原始代码的位置 —— webpack.config.js配置devtool选项 module.exports { devtool: inline-source-map }; inline-s…