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

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.kler.cn/a/415714.html

相关文章:

  • C 语言静态库与动态库的生成和使用
  • maven,java相关调试等
  • 基于社群生态需求构建小程序 AI 智能名片与 S2B2C 商城系统融合模式的探索与实践
  • Linux -初识 与基础指令1
  • CSS怪异,弹性盒子模型与浏览器内核
  • ChatGPT科研应用、论文写作、课题申报、数据分析与AI绘图
  • Echarts散点图(火山图)自定义配置
  • 【python】OpenCV—Tracking(10.5)—dlib
  • 【AI绘画】DALL·E 3 绘图功能与 DALL·E API 探索
  • 深度学习-47-大语言模型LLM之常用的大模型微调框架选择建议
  • AppFlow:支持飞书机器人调用百炼应用
  • AJAX 实时搜索
  • MySQL快速入门——表的操作
  • Ubuntu 20.04 Server版连接Wifi
  • 【VBA实战】使用Word制作简易的考试及阅卷系统
  • 【Go底层】time包Ticker定时器原理
  • 第三十八篇——高斯分布:大概率事件意味着什么?
  • 利用Python爬虫获取店铺详情:从入门到实践
  • ECCV 2024 | 加速图像超分辨率网络的像素级分类
  • 富文本编辑器图片上传并回显