码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
Servlet快速筑基
目录
Servlet线程安全问题
Servlet不同的映射方式
Servlet多路径映射
Servlet创建时机
默认Servlet
Servlet线程安全问题
由于Servlet采用的是
单例模式
,也就是整个应用中只有一个实例对象
所以我们需要分析这个唯一的实例对象中的类成员是否线程安全
一个浏览器代表一个线程,多个浏览器代表多个线程
按理说我们期望的应该是每个浏览器查看的都应该是自己的用户名,可结果却是浏览器中数据混乱
因此,可以认为
Servlet是线程不安全的
解决:
定义类成员要谨慎
如果是共用的,并且只会在初始化时赋值,其它时间都是获取的话,那么是没问题的
如果不是共用的,或者每次使用都有可能对其赋值,那就要考虑线程安全问题了;可以将其定义到doGet或doPost方法内或者使用同步功能即可
Servlet不同的映射方式
第一种
具体名称的方式
访问的资源路径必须和映射配置完全相同
http://localhost:8080/demo2/cpc
第二种
/开头+通配符的方式
只要符合目录结构即可,不用考虑结尾是什么
http://localhost:8080/demo2/cpc/suibianxie
第三种
通配符+固定格式结尾的方式
只要符合固定结尾格式即可,不用考虑前面的路径
http://localhost:8080/demo2/tjtjtj.cpc
注意:优先级问题
越是具体的优先级越高,越是模糊通用的优先级越低
第一种>第二种>第三种
Servlet多路径映射
可以给Servlet配置多个访问映射,从而根据不同的请求路径来实现不同的功能
场景分析:
如果访问的资源路径是/vip
商品价格打9折
如果访问的资源路径是/svip
商品价格打5折
如果访问的资源路径是其它
商品价格不打折
代码实现
getRequestURI()方法
getRequestURI()方法返回的是一个字符串,内容为整个访问的url的path内容,不带query;
例:输入的url地址为
http://localhost:8080/testproject/test
getRequestURI()返回/testproject/test,为一个String
配置
采用第二种
/开头+通配符的方式
代码
测试
http://localhost:8080/demo2/cpc/vip
http://localhost:8080/demo2/cpc/svip
http://localhost:8080/demo2/cpc
Servlet创建时机
第一次访问时创建
优势:
减少对服务器内存的浪费;提高了服务器启动的效率
弊端:
如果有一些要在应用加载时就做的初始化操作,则无法完成
服务器加载时创建
优势:
提前创建好对象,提高了首次执行的效率;可以完成一些应用加载时要做的初始化操作
弊端:
对服务器内存占用较多,影响了服务器启动的效率
要修改Servlet创建时机的话:
就要在<servlet>标签中,添加<load-on-startup>标签
其中写个整数
正整数代表服务器加载时创建,值越小,优先级越高
负整数或不写代表第一次访问时创建
默认Servlet
默认Servlet是由服务器提供的一个Servlet
它配置在Tomcat的conf目录中的web.xml中
它的映射路径是<url-pattern>/<url-pattern>
我们在发送请求时,首先会在我们项目中的web.xml中查找映射配置,找到则执行
但是当找不到对应的Servlet路径时
就去找默认的Servlet,由默认Servlet处理
所以,一切都是Servlet
相关阅读:
Java8新特性 CompletableFuture
(九)集合 - List
如何通过DBeaver 连接 TDengine?
如何干涉MySQL优化器使用hash join
优思学院|精益和六西格玛如何改变你的工作能力?
git stash使用场景
计算机视觉基础知识(十六)--图像识别
VMware安装Kali操作系统(全网最详细不接受任何反驳)
pandas 识别并取出重复项
vuex+localStorage实现vue-element-admin模板刷新页面记忆选项卡
原文地址:https://blog.csdn.net/weixin_59624686/article/details/125422552
最新文章
从零学习Kafka:幂等与事务
别再说 AI 开发就是调接口了!5 种主流模式一次讲清
让FastAPI Agent真正记住你:聊聊会话记忆与持久化存储的落地实践
AI Coding Agent 时代:代码越便宜,约束越贵
14. 别再硬写提示词了!LangChain PromptTemplate从入门到实战
Agent出现LLM因为历史工具调用消息而误解工具调用方式的问题
[实例] SPI接口的ADC芯片全通道纯硬件驱动——基于HAL库和TLA2518芯片
龙芯2k0300 - 智能车走马观碑组目标检测算法
深度学习进阶(二十)Transformer-XL
10 个示例快速入门 Go-Spring|v1.3.0 正式发布
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
小工具
小游戏
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
京公网安备 11010502049817号