Servlet的学习笔记

文章目录

  • 基本介绍
  • 入门步骤
  • 执行原理
  • Servlet 生命周期
  • 线程安全问题
    • 解决方式
  • Servlet 注解配置
  • Servlet 继承与实现体系

基本介绍

servlet,server applet,服务器端小程序

servlet 是一个接口,定义了 Java 类被浏览器访问(tomcat 识别)的规则。

我们需要自己定义一个类,实现 Servlet 接口。

入门步骤

1.创建 JavaEE 项目

2.定义一个类,实现 Servlet 接口或者继承自 GenericServlet 或者 HttpServlet

public class ServletDemo01 implements Servlet # 实现多个方法
public class ServletDemo01 extends GenericServlet # 实现service方法
public class ServletDemo01 extends HttpServlet # 覆盖重写doGet和doPost方法

3.实现接口中的抽象方法

4.配置 Servlet
在 web.xml 文件中配置如下:

<servlet><servlet-name>demo01</servlet-name><servlet-class>priv.lwx.javaex.web.servlet.ServletDemo01</servlet-class>
</servlet>
<servlet-mapping><servlet-name>demo01</servlet-name><url-pattern>/demo01</url-pattern>
</servlet-mapping>

执行原理

1.当服务器 tomcat 接受到客户端浏览器的请求后,会解析请求 URL 路径,获取访问的 Servlet 的资源路径
2.解析 web.xml 文件,查找是否有对应的 <url-pattern>
3.如果有,则找到对应的 <servlet-class> 标签,从而找到 Servlet 的全类名
4.tomcat 会将 Servlet 类的字节码文件加载进内存,再通过反射机制创建 Servlet 类的实例对象
5.最后会调用有关的方法

Servlet 生命周期

1.Servlet 被创建:执行 init 方法,只执行一次

web.xml 文件中的 <servlet> 标签下通过 <load-on-startup> 标签配置自然数值可以在服务器启动时创建 Servlet 实例,值越小优先级越高,服务器会按从小到大的顺序创建 Servlet 实例。负数则表示第一次访问 Servlet 时创建实例,默认值是 -1

Servlet 的 init 方法,只执行一次,说明一个 Servlet 在内存中只存在一个对象, Servlet 是单例的。

多个用户同时访问时,可能存在线程安全问题。

2.提供服务:执行 service 方法,每次访问都会执行一次

3.被销毁:执行 destroy 方法,tomcat 正常关闭时执行一次。
服务器关闭时 Servlet 被销毁,在销毁 Servlet 前会执行一次 destroy 方法,用于释放资源。

线程安全问题

Servlet 线程安全问题产生的原因:
在默认情况下,容器只会为每一个 Servlet 类创建唯一的一个实例,当有多个请求到达容器,就有可能有多个线程同时访问同一个实例。

解决方式

1.加锁(可以对整个 service 方法加锁或者对代码块加锁,建议使用代码块加锁)
2.让 Servlet 实现 SingleThreadModle 接口(不建议使用)
SingleThreadModel 接口是一个标识接口(没有定义任何的方法)。容器会为实现该接口的 Servlet 创建多个实例,即一个线程分配一个。这种方式创建了过多的 Servlet 实例,系统开销太多,不建议使用
3.尽量不要在 Servlet 中定义成员变量。如果一定要定义成员变量,则尽量设置成可读的,不要去修改

Servlet 注解配置

Servlet 3.0 及以上版本支持注解配置,可以不需要 web.xml。

步骤:
1.创建 Java EE 项目,选择 Servlet 的版本 3.0 及以上,可以不创建 web.xml
2.定义一个实现 Servlet 接口的类
3.实现抽象方法
4.在类上使用 @WebServlet 注解进行配置
@WebServlet(urlPatterns = "资源路径")
@WebServlet(value = "资源路径")
@WebServlet("资源路径")

以上三种方式都行,推荐最后一种方式。

资源路径的格式:
1./xxx
2./xxx/xxx
3.*.do
@WebServlet("*.do")

Servlet 继承与实现体系

在这里插入图片描述
HttpServlet 类对 http 协议进行了封装,简化操作。
自定义 Servlet 类时,通常是去继承抽象类 HttpServlet,重写 doGet 和 doPost 方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring框架介绍_Spring框架介绍

spring框架介绍这是Spring框架和Spring核心概念的简介。 在本教程中&#xff0c;我们将介绍Spring Framework的主要优点和功能。 在随后的教程中&#xff0c;我们将学习有关Spring和Spring Boot的更多信息。 总览 我们知道&#xff0c; Spring框架是Java开发人员中最受欢迎的应…

Java注解(Annotation)的学习

文章目录注解定义作用分类API 文档注解JDK 预定义的注解自定义注解注解的格式注解的本质注解的属性属性的返回值类型属性的特点属性的赋值元注解TargetRetentionDocumentedInherited解析注解总结注解定义 注解( Annotation)&#xff0c;也叫元数据。一种代码级别的说明。它是 …

oracle数据库硬恢复,Oracle数据库的可恢复性设置

整理自《Oracle 11g OCP/OCA 认证指南》001为了保证数据库的最大可恢复性&#xff0c;必须多路复用控制文件&#xff1b;必须多路复用联机重做日志&#xff1b;必须以归档日志模式运行数据库&#xff0c;并多路复用归档日志文件&#xff1b;最后必须作常规备份。002 保护控制文…

rest api如何创建_创建一个安全的Spring REST API

rest api如何创建“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 “如果有用&#xff0c;它将被修改。” 那些智慧的话来自我的QA老师…

IntelliJ IDEA 的 Build Project/Build Module/构建项目/构建模块/构建工程

文章目录Build ModuleRebuild ModuleBuild Module&#xff0c;构建模块。所谓“构建”&#xff0c;就是“构建”包及字节码文件&#xff0c;其实就是编译源码文件的动作了。所以 Build Module&#xff0c;就是把 src 目录的源代码文件以及 resources 下的资源文件&#xff0c;构…

oracle 修改nls_characterset,ORACLE NLS_CHARACTERSET字符集的更改

ORACLE NLS_CHARACTERSET字符集的更改      数据库创建以后&#xff0c;如果需要修改字符集&#xff0c;通常需要重建数据库&#xff0c;通过导入导出的方式来转换。      我们也可以通过以下方式更改      ALTER DATABASE CHARACTER SET      注意&#xff1a…

commons cli_从Commons CLI迁移到picocli

commons cli最初于2002年发布的Apache Commons CLI可能是使用最广泛的Java命令行解析器&#xff0c;但是它的API显示了它的年龄。 寻找具有最少样板代码的现代方法的应用可能对picocli感兴趣。 为什么要花麻烦的钱进行迁移&#xff0c;以及如何将基于Commons CLI的应用程序迁移…

乘方(幂)的运算法则/规则

文章目录乘方的定义运算法则正分数指数幂法则负分数指数幂法则同底数幂法则负整数指数幂法则乘方的定义 求相同因数的积叫做乘方。乘方运算的结果叫幂。 当 ana^nan 看作 a 的 n 次乘方的结果时&#xff0c;也可读作“a 的 n 次幂”或“ a 的 n 次方”。其中&#xff0c;a 叫…

php响应式布局,响应式布局之弹性布局的介绍

响应式布局的实现是前端工程中一个非常大的跨越&#xff0c;它非常灵活的可塑造性使得同一个网站能在不同的终端设备上展现出不同的活力。就今天这个机会&#xff0c;我想与大家分享并探讨一些常用来实现响应式布局方法中的弹性布局。弹性布局是一种十分方便的&#xff0c;只需…

qt弹簧教程_弹簧启动执行器教程

qt弹簧教程朋友您好&#xff0c;在本教程中&#xff0c;我们将学习弹簧执行器及其所有帮助。 1.什么是弹簧执行器&#xff1f; 2.如何在Maven项目或Gradle项目中添加弹簧执行器&#xff1f; 3.创建一个具有Spring Actuator依赖项的Spring Boot项目。 4.使用弹簧执行器端点监…

驾驶证遗失如何补发

第六十三条机动车驾驶证遗失的&#xff0c;机动车驾驶人应当向机动车驾驶证核发地或者核发地以外的车辆管理所申请补发。申请时应当填写申请表&#xff0c;并提交以下证明、凭证&#xff1a; &#xff08;一&#xff09;机动车驾驶人的身份证明&#xff1b; &#xff08;二&…

两列模糊对比 oracle,excel 模糊比对两列数据并将比对结果显示出来 | excel表格两列数据模糊对比...

excel2016如何将两列完全不一样的数据进行模糊对比&#xff1f;B2单元格输入公式IF(ISNUMBER(FIND(LEFT(A2,3),PHONETIC(G$2:G$8))),"","非类")下拉。 选中A、B列排可出非类似值。对G列的处理也是相同办法&#xff0c;修改一下公式中的单元格或区域引用即可…

JMetro版本5.2已发布

再次问好 JMetro的新更新刚刚发布。 添加了两种新的控件样式&#xff1a;标题窗格和手风琴。 此外&#xff0c;还对现有样式和错误修复进行了调整。 最终&#xff0c;JMetro现在也可以通过Maven Central获得。 在这篇文章中&#xff0c;我将详细介绍刚刚发布的JMetro 5.2版。…

IntelliJ IDEA for Mac 如何创建Java Web项目_创建Java EE项目_创建项目_新建项目

Java EE 项目创建好后如下图所示&#xff1a; 如果你的项目含有多个模块&#xff0c;那么上图的项目结构布局是不合理的&#xff0c;你必须将默认的模块删除掉&#xff08;默认模块的 .iml 文件也要删除&#xff09;。 选择模块&#xff0c;点按鼠标右键&#xff0c;选择【Rem…

注解代替枚举_精选枚举代替开关

注解代替枚举问题及其解决方案 开关/案例是用大多数命令式编程语言实现的通用控制结构。 开关比一系列的if / else更具可读性。 这是一个简单的示例&#xff1a; // Switch with int literal switch (c) {case 1: one(); break;case 2: two(); break;case 3: three(); break;…

oracle表是动态表怎么算排名,Oracle学习动态性能表

按照OracleDocument中的描述&#xff0c;v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sOracle 学习动态性能表 v$locked_object本视图列出系统上的每个事务处理所获得的所有锁。V$LOCKED_OBJECT中的列说明&#xff1a;XIDUSN…

IntelliJ IDEA for Mac 中 Java Web Project 默认的工件(Artifacts)输出目录

你创建 Java Web 项目/模块时&#xff0c;IDEA 会自动创建 Web 模块的工件列表&#xff0c;而工件的默认输出目录如下&#xff1a; war 工件的默认输出目录&#xff1a; /Users/liaowenxiong/Documents/IdeaProjects/java-exercises/模块名称/target exploded 工件的默认输出…

oracle导数的数据乱码,Oracle10g导数据时中文乱码相关处理

1.Oracle导入数据库出现数据库数据中文乱码问题&#xff0c;最后查得是由于数据库安装时&#xff0c;选择编码为默认编码问题分析&#xff1a;使用imp导入数据时&#xff0c;屏幕输出过以下提提示信息&#xff1a;import done in US7ASCII character set and AL16UTF16 NCHAR c…

jdk12 jdk1.8_JDK 12的Files.mismatch方法

jdk12 jdk1.8JDK 12向Files类引入了一种新方法。 方法Files.mismatch(Path,Path)已通过JDK-8202302引入JDK 12&#xff0c;并在JDK 12 Early Access Build 20 &#xff08;支持新{systemProperty} Javadoc标记的相同早期访问版本&#xff09;中可用 。 JDK-8202302 [“用于比较…

tomcat如何查找请求资源的?

用户的请求过来&#xff0c;comcat 会根据虚拟目录先到 webapps 目录查找项目&#xff0c;如果找到了则进入到项目下的 WEB-INF 目录下查找 web.xml 文件&#xff0c;查找到则解析该文件&#xff0c;根据资源路径查找请求资源&#xff0c;如果找到了资源则正常实例化和调用有关…