当前位置:网站首页>Servlet详解
Servlet详解
2022-06-25 15:38:00 【华为云】
概念
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
快速入门
- 创建JavaEE项目
- 定义一个类,实现Servlet接口
public class ServletDemo1 implements Servlet
- 实现接口中的抽象方法
- 配置Servlet
在web.xml中配置:
<!--配置Servlet --><servlet> <servlet-name>demo1</servlet-name> <servlet-class>com.zjq.javabase.base32.web.servlet.ServletDemo1</servlet-class></servlet><servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern></servlet-mapping>执行原理
- 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
- 查找web.xml文件,是否有对应的<url-pattern>标签体内容。
- 如果有,则在找到对应的<servlet-class>全类名
- tomcat会将字节码文件加载进内存,并且创建其对象
- 调用其方法
Servlet中的生命周期方法
- 被创建:执行init方法,只执行一次
Servlet什么时候被创建?
默认情况下,第一次被访问时,Servlet被创建
可以配置执行Servlet的创建时机。
在<servlet>标签下配置
- 第一次被访问时,创建
<load-on-startup>的值为负数
- 在服务器启动时,创建
<load-on-startup>的值为0或正整数
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
多个用户同时访问时,可能存在线程安全问题。
**解决:**尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
- 提供服务:执行service方法,执行多次
每次访问Servlet时,Service方法都会被调用一次。
- 被销毁:执行destroy方法,只执行一次
Servlet被销毁时执行。服务器关闭时,Servlet被销毁
只有服务器正常关闭时,才会执行destroy方法。
destroy方法在Servlet被销毁之前执行,一般用于释放资源
Servlet3.0
好处:
支持注解配置。可以不需要web.xml了。
步骤:
- 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
- 定义一个类,实现Servlet接口
- 复写方法
- 在类上使用@WebServlet注解,进行配置
@WebServlet("资源路径")@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface WebServlet { String name() default "";//相当于<Servlet-name> String[] value() default {};//代表urlPatterns()属性配置 String[] urlPatterns() default {};//相当于<url-pattern> int loadOnStartup() default -1;//相当于<load-on-startup> WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default "";} 边栏推荐
- 商城风格也可以很多变,DIY了解一下!
- MT60B1G16HC-48B:A美光内存颗粒FBGA代码D8BNK[通俗易懂]
- The style of the mall can also change a lot. DIY can learn about it!
- 镁光256Gb NAND Flash芯片介绍
- sql优化的几种方式
- How GC determines whether an object can be recycled
- Several ways of SQL optimization
- Desktop development (Tauri) opens the first chapter
- Differences and solutions of redis cache avalanche, cache penetration and cache breakdown
- Gold three silver four, an article to solve the resume and interview
猜你喜欢

Uncover gaussdb (for redis): comprehensive comparison of CODIS
Power representation in go language

Asynchronous processing of error prone points

AutoK3s v0.5.0 发布 延续简约和友好

Linux-MySQL数据库之高级SQL 语句一

TFIDF与BM25

李飞飞团队将ViT用在机器人身上,规划推理最高提速512倍,还cue了何恺明的MAE
After the project is pushed to the remote warehouse, Baota webhook automatically publishes it

Sword finger offer 06 Print linked list from end to end
How to convert a recorded DOM to a video file
随机推荐
什么是NFT数字藏品?
LeCun预言AGI:大模型和强化学习都是斜道!我的「世界模型」才是新路
Pytest测试框架笔记
地理位置数据存储方案——Redis GEO
什么是oa
合宙Air32F103CBT6开发板上手报告
Go development team technical leader Russ Cox sends a document to share go's version control history
剑指 Offer 07. 重建二叉树
leetcode-8. 字符串转换整数 (atoi)
Mapbox map - inconsistent coordinate system when docking GIS layers?
Yadali brick playing game based on deep Q-learning
What is the NFT digital collection?
Sword finger offer 07 Rebuild binary tree
Time wheel and implementation analysis of time wheel in go zero
剑指 Offer 06. 从尾到头打印链表
说下你对方法区演变过程和内部结构的理解
Geographic location data storage scheme - redis Geo
Source code analysis of nine routing strategies for distributed task scheduling platform XXL job
Tensorflow loading cifar10 dataset
golang reverse a slice