导图社区 Servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
提示: 本内容由社区用户上传并分享。平台不对内容的真实性、合法性、知识产权归属及是否侵害第三方权利进行事前审核或保证。本内容可能包含受版权保护的图片、字体或其他第三方素材,使用前请自行确认授权范围。
listener 音标['lisnә] 读音 汉语翻译 n. 收听者, 听众 英语解释: 名词listener: someone who listens attentively 同义词:hearer, auditor, attender
Filter过滤器(重要) Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。 1、Filter快速入门 1.1、步骤: 1. 创建一个类实现Filter接口 2. 重写接口中方法 d...
会话的解释 [conversation] 指两人以上的对话(多用于学习别种语言或方言时) 详细解释 (1).聚谈;对话。现多用于学习别种语言或方言时
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
Servlet
介绍
Servlet 是运行在Java服务器端的程序,用于接收和响应来自客户端基于HTTP协议的请求
如果想实现Servlet的功能,可以通过实现javax.servlet.Servlet接口或者继承它的实现类
核心方法:service(),任何客户端的请求都会经过该方法
默认Servlet
默认Servlet是由服务器提供的一个Servlet。它配置在Tomcat的conf目录中的web.xml中。
它的映射路径是<url-pattern>/<url-pattem>,在发送请求时,首先会在项目中的web.xml中查找映射配置,找到则执行。但是当找不到对应的Servlet路径时,就去找默认的Servlet,由默认Servlet处理。所以,一切都是Servlet。
关系视图
实现方式
实现Servlet接口,实现所有的抽象方法。该方式支持最大程度的自定义
继承GenericServlet 抽象类,必须重写 service 方法,其他方法可选择重写。该方式让开发Servlet变得简单。但是这种方式和HTTP协议无关。
继承 HttpServlet抽象类,需要重写doGet和doPost方法。该方式表示请求和响应都需要和HTTP协议相关。
实际开发用的较多
执行过程
生命周期
对象的生命周期,就是对象从出生到死亡的过程。即:出生->活着->死亡。官方说法是对象创建到销毁的过程!
出生
请求第一次到达Servlet时,对象就创建出来,并且初始化成功。只出生一次,将对象放到内存中。
init()方法
活着
服务器提供服务的整个过程中,该对象一直存在,每次都是执行service()方法。
死亡
当服务停止时,或者服务器右机时,对象死亡。
destroy()方法
结论
Servlet对象只会创建一次,销毁一次。所以Servlet对象只有一个实例。如果一个对象实例在应用中是唯一的存在,那么我们就称它为单例模式。
创建时机
种类
第一次访问时创建
优势
减少对服务器内存的浪费。提高了服务器启动的效率
弊端
如果有一些要在应用加载时就做的初始化操作,无法完成
服务器加载时创建
提前创建好对象,提高了首次执行的效率。可以完成一些应用加载时要做的初始化操作
对服务器内存占用较多,影响了服务器启动的效率
配置修改
在<servlet>标签中,添加<load-on-startup>标签。
正整数代表服务器加载时创建,值越小、优先级越高。负整数或不写代表第一次访问时创建
线程安全问题
由于Servlet采用的是单例模式,也就是整个应用中只有一个实例对象。所以需要分析这个唯一的实例对象中的类成员是否线程安全。
一个浏览器代表一个线程,多个浏览器代表多个线程。按理说我们期望的应该是每个浏览器查看的都应该是自己的用户名。而现在的结果是浏览器中数据混乱。因此,可以认为Servlet是线程不安全的!
解决
定义类成员要谨慎。如果是共用的,并且只会在初始化时赋值,其他时间都是获取的话,那么是没问题的。如果不是共用的,或者每次使用都有可能对其赋值,那就要考虑线程安全问题了,可以将其定义到doGet或doPost方法内或者使用同步功能即可
映射方式
1.具体名称的方式。访问的资源路径必须和映射配置完全相同
2./开头+通配符的方式。只要符合目录结构即可,不用考虑结尾是什么
3.通配符+固定格式结尾的方式。只要符合固定结尾格式即可,不用考虑前面的路径
注意
优先级问题。越是具体的优先级越高,越是模糊通用的优先级越低。第1种>第2种>第3种
多路径映射
可以给一个Servlet配置多个访问映射,从而根据不同的请求路径来实现不同的功能
案例
场景分析
如果访问的资源路径是/vip商品价格打9折
如果访问的资源路径是/vvip 商品价格打5折
如果访问的资源路径是其他商品价格不打折
代码
功能类业务功能
配置文件配置
ServletConfig
ServletConfig是Servlet的配置参数对象,在Servlet的规范中,允许为每一个Servlet都提供一些初始化的配置。所以,每个Servlet都有一个自己的ServletConfig
作用
在Servlet的初始化时,把一些配置信息传递给Servlet
配置信息以键值对形式传递
和Servlet相同
配置方式
在<servlet>标签中,通过<init-param>标签来配置。有两个子标签
<param-name>:代表初始化参数的key
<param-value>:代表初始化参数的value。
不同键值对通过不同标签实现
常用方法
String
getlnitParameter(String name)
根据参数名称获取参数的值
Enumeration<String>
getlnitParameterNames()
获取所有参数名称的枚举
getServletName()
获取Servlet的名称
ServletContext
getServletContext()
获取ServletContext对象
实例
获取ServletCongfig
方法演示
ServletContext是应用上下文对象(应用域对象)。每一个应用中只有一个ServletContext对象。
可以配置和获得应用的全局初始化参数,可以实现Servlet之间的数据共享
补充
域对象
域对象指的是对象有作用域。也就是有作用范围。域对象可以实现数据的共享。不同作用范围的域对象,共享数据的能力也不一样。
在Servlet规范中,一共有4个域对象。ServletContext就是其中的一个。它也是web应用中最大的作用域,也叫application域。它可以实现整个应用之间的数据共享!
应用一加载则创建,应用被停止则销毁
在<web-app>标签中,通过<context-param>标签来配置。有两个子标签
<param-name>:代表全局初始化参数的key
<param-value>:代表全局初始化参数的value
getinitParameter(String name)
根据名称获取全局配置的参数
getContextPath()
获取当前应用的访问虚拟目录
getRealPath(String path)
根据虚拟目录获取应用部署的磁盘绝对路径
数据共享
void
setAttribute(String name,Object value)
向应用域对象中存储据
Object
getAttribute(String name)
通过名称获取应用域对象中的数据
removeAttribute(String name)
通过名称移除应用域对象中的数据
获取ServletContext
三种情况下
src文件下
web文件下
WEB-INF文件下
在不同servlet类中数据共享
Servlet3.0规范
Tomcat9版本。JavaEE规范要求是8。对应的Servlet版本应该是4.x版本。但是,在企业开发中,稳定要远比追求新版本要重要。所以我们会降版本使用,用的是Servlet3.1版本。
之前的操作全都是基于Servlet2.5版本规范的,也就是借助于配置文件的方式。后来随着软件开发逐步的演变,基于注解的配置开始流行。而Servlet3.0版本也就开始支持注解开发了!
Servlet3.0版本既保留了2.5版本的配置方式,同时又支持了全新的注解配置方式。它可以完全不需要web.xml配置文件,就能实现Servlet的配置,同时还有一些其他的新特性
对比
基于配置文件方式
基于注解方式
注解详解
@WebServlet
主题