1、什么是 Servlet ?

Servlet(Server Applet)是 Java Servlet 的简称,称为小服务程序或服务连接器,用 Java 编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态 Web 内容。

狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,可以将 Servlet 理解为后者。Servlet 运行于支持 Java 的应用服务器中。

从原理上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。(内容摘自百度百科

* 概念:运行在服务器端的小程序
* Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
* 将来我们自定义一个类,实现Servlet接口,复写方法。

创建项目进行代码演示:

/**
* Created by RookieLi on 2019/4/22.
*/
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {} @Override
public ServletConfig getServletConfig() {
return null;
} // 提供服务的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("hello,servlet");
} @Override
public String getServletInfo() {
return null;
} @Override
public void destroy() {}
}

在 web.xml 中配置:

<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>com.rookie.web.ServletDemo</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping> 当在浏览器中输入路径:http://localhost:8080/demo
控制台会输出:hello,servlet

执行的原理:

A、当服务器接受到客户端浏览器的请求后,会解析请求 URL 路径,获取访问的 Servlet 的资源路径。

B、查找 web.xml 文件,是否有对应的 <url-pattern> 标签体内容。

C、如果有,则在找到对应的 <servlet-class> 全类名

D、tomcat会将字节码文件加载进内存,并且创建其对象

E、调用其 service 方法

Servlet中的生命周期方法:

A、被创建:执行init方法,只执行一次
Servlet 何时被创建?
* 默认情况下,第一次被访问时,Servlet 被创建
* 可以配置执行 Servlet 的创建时机。
* 在 <servlet> 标签下配置
a. 第一次被访问时,创建
* <load-on-startup>的值为负数
b. 在服务器启动时,创建
* <load-on-startup>的值为0或正整数
* Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的。
* 多个用户同时访问时,可能存在线程安全问题。
* 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值。
B、提供服务:执行service方法,执行多次
* 每次访问Servlet时,Service方法都会被调用一次。
C、被销毁:执行destroy方法,只执行一次
* Servlet被销毁时执行。服务器关闭时,Servlet被销毁。
* 只有服务器正常关闭时,才会执行destroy方法。
* destroy方法在Servlet被销毁之前执行,一般用于释放资源。

Servlet 3.0 (重点)

优点:支持注解配置。可以不需要 web.xml 了。

代码演示

@WebServlet("/demo666")
public class ServletDemo2 implements Servlet { @Override
public void init(ServletConfig servletConfig) throws ServletException {} @Override
public ServletConfig getServletConfig() {
return null;
} @Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("servlet 3.0 给力 666");
} @Override
public String getServletInfo() {
return null;
} @Override
public void destroy() {}
} 当在浏览器中输入路径:http://localhost:8080/demo666
控制台会输出:servlet 3.0 给力 666

@WebServlet 源码剖析

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @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 "";
}

Servlet 的体系结构

	Servlet -- 接口
|
GenericServlet -- 抽象类
|
HttpServlet -- 抽象类 A、GenericServlet:将 Servlet 接口中其他的方法做了默认空实现,只将 service() 方法作为抽象
* 将来定义 Servlet 类时,可以继承 GenericServlet ,实现 service() 方法即可 B、HttpServlet:对 http 协议的一种封装,简化操作
* 定义类继承 HttpServlet
* 复写 doGet/doPost 方法 C、Servlet相关配置
* urlpartten:Servlet访问路径
* 一个Servlet可以定义多个访问路径:@WebServlet({"/demo6","/demo66","/demo666"})
在浏览器中输入不同的请求路径,都可以访问到资源。
http://localhost:8080/demo6
http://localhost:8080/demo66
http://localhost:8080/demo666
B、路径定义规则:
1. /xxx:路径匹配
2. /xxx/xxx:多层路径,目录结构
3. *.do:扩展名匹配

深入理解 Servelt的更多相关文章

  1. JavaWeb三大组件——过滤器的运行机制理解

    过滤器Filter 文章前言:本文侧重实用和理解. 一.过滤器的概念. lFilter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有 ...

  2. 深入理解Spring MVC(山东数漫江湖)

    初始工程 使用Spring Boot和web,thymeleaf的starter来设置初始工程.xml配置如下: <parent>   <groupId>org.springf ...

  3. 理解CSS视觉格式化

    前面的话   CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...

  4. 彻底理解AC多模式匹配算法

    (本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...

  5. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  6. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  7. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  8. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  9. ThreadLocal简单理解

    在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...

随机推荐

  1. cf1136E. Nastya Hasn't Written a Legend(二分 线段树)

    题意 题目链接 Sol yy出了一个暴躁线段树的做法. 因为题目保证了 \(a_i + k_i <= a_{i+1}\) 那么我们每次修改时只需要考虑取max就行了. 显然从一个位置开始能影响到 ...

  2. 一个AI产品经理怎么看AI的发展

    一个AI产品经理怎么看AI的发展 https://www.jianshu.com/p/bed6b22ae837 最近一直在思考这个问题,人工智能接下来的几年会有什么样的发展,是否真的能够在很多工作岗位 ...

  3. [新特性]PeopleTools8.54+:PeopleSoft Application Engine新特性

    PeopleTools 8.54 的Application Engine 已经被更新,特别是在AE跟踪设置中有了更多的选项,本文将帮助您了解8.54的新AE特性以及如何使用这些特性. AE trace ...

  4. JVM虚拟机学习一:垃圾回收算法总结

    1.java虚拟机中涉及到的数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某 ...

  5. 山东理工大学SDUT - ACM OJ 题: Python代码 及分析

    Python基础语法学习完成,先刷基础题100道巩固 ,附 题目.代码.知识分析 题目:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index ...

  6. java数据结构 • 面向对象 • 异常 • 随机数·时间

    • 语法基础 • 控制流 • 数据结构 • 面向对象 • 异常 • 随机数 //String常用的方法: indexOf   charAt   charAt   codePointAt   compa ...

  7. (后端)sql手工注入语句&SQL手工注入大全(转)

    转自脚本之家: 看看下面的1.判断是否有注入;and 1=1;and 1=2 2.初步判断是否是mssql;and user>0 3.判断数据库系统;and (select count(*) f ...

  8. mysql之用户权限管理

    本文内容: 什么是用户权限 恰当的用户权限 查看权限 修改权限 删除权限 首发日期:2018-04-19 什么是用户权限: 每个用户都有自己的用户权限,这些用户权限比如有查询表权限.修改表权限.插入表 ...

  9. ORACLE中内部函数SYS_OP_C2C和隐式类型转换

    什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...

  10. DAC连接

    专用管理员连接是一种特殊的SQL Server服务器诊断性质的连接,用于在正常或者说标准连接形式无法连接SQL Server服务器的情况下连接到服务器进行服务器性能或者错误诊断.DAC同样支持安全加密 ...