当前位置:网站首页>Servlet快速筑基
Servlet快速筑基
2022-06-24 08:21:00 【汤键.TJ】
目录
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


边栏推荐
- WindowManager 简单悬浮框的实现
- Threejs MMD model loading + contour loading + animation loading + Audio loading + camera animation loading +ammojs loading gltf model loading +gltf reflection adjustment
- 达梦数据库如何定位锁等待问题解决方法
- Easyexcel single sheet and multi sheet writing
- 支持向量机(SVC,NuSVC,LinearSVC)
- MYCAT read / write separation and MySQL master-slave synchronization
- 百度AI模板 获取知识理解
- 2020 China's provinces and cities, three-level linkage data, data agencies (data from the official website of the National Bureau of Statistics)
- Depens:*** but it is not going to be installed
- Leetcode -- linked list
猜你喜欢

小白学习MySQL - 增量统计SQL的需求

CF566E-Restoring Map【bitset】

20、 Processor scheduling (RR time slice rotation, mlfq multi-level feedback queue, CFS fully fair scheduler, priority reversal; multiprocessor scheduling)

Redis implements a globally unique ID

ggplot2颜色设置总结

Zero foundation self-study SQL course | sub query

NETRCA: AN EFFECTIVE NETWORK FAULT CAUSE LOCALIZATION之论文阅读

医学图像开源数据集汇总(二)

支持向量机(SVC,NuSVC,LinearSVC)

浮点数表示法(总结自CS61C和CMU CSAPP)
随机推荐
Squid proxy application
CF566E-Restoring Map【bitset】
WindowManager 简单悬浮框的实现
可直接套用的Go编码规范
NLP-D59-nlp比赛D28—我想,也好—阶段总结—心态调整
Cdga | how can we do well in data governance?
Event registration Apache pulsar x kubesphere online meetup hot registration
Solution: the word of jmeter5.5 on the win11 lower interface is very small
LeetCode: 240. 搜索二维矩阵 II
Depens:*** but it is not going to be installed
支持向量机(SVC,NuSVC,LinearSVC)
[GDB debugging tool] | how to debug under multithreading, multiprocessing and running programs
实战剖析:app扫码登陆实现原理(app+网页端详细逻辑)附源码
Oracle 12c升级至19c后ORA-28000错误
Go 语言项目开发实战目录
深入了解 border
Easyexcel single sheet and multi sheet writing
Go language project development practice directory
Groovy通过withCredentials获取Jenkins凭据
Some common pitfalls in getting started with jupyter:









