当前位置:网站首页>Servlet快速筑基

Servlet快速筑基

2022-06-24 08:21:00 汤键.TJ

目录

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
原网站

版权声明
本文为[汤键.TJ]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_59624686/article/details/125422552