目录

什么是Servlet?

Servlet快速入门

Servlet的执行过程

Servlet的生命周期

ServletConfig

ServletContext


什么是Servlet?

Servlet是一个运行于Web服务器的Java程序,用于接受和响应客户端的http请求。

主要是配合动态资源使用,当然静态资源也需要使用servlet访问,只不过Tomcat里面已经定义好了一个DefaultServlet。

Servlet快速入门

1.创建Servlet

创建一个普通类,实现Servlet接口

2.配置Servlet

在web.xml中配置Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><!-- 名称需要和项目名一致 --><display-name>servlet_practice</display-name><!-- 向Tomcat注册Servlet servlet-name:Servlet的名称, servlet-class:具体的路径 --><servlet><servlet-name>TestServlet</servlet-name><servlet-class>cn.liuwei.servlet.TestServlet</servlet-class></servlet><!-- 注册servlet的映射。 servlet-name:找到上面注册的servlet, url-pattern:地址栏的路径 --><servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/testServlet</url-pattern></servlet-mapping></web-app>

3.运行web项目

Servlet的执行过程

当使用url进行对Tomcat请求时,访问流程如下所示

  1. 先找到Tomcat
  2. 根据url中的名称找到具体的项目
  3. 找到项目下的web.xml,然后寻找url-pattern,看有没有哪个pattern对应url中的值
  4. 找到servlet-mapping中的servlet-name
  5. 找到前面注册的servlet-name
  6. 根据servlet-class中的值找到对应的Servlet类并创建实例
  7. 执行Servlet中的方法

Servlet的生命周期

生命周期

Servlet从创建到销毁的一段时间:

  1. 初始化:一个Servlet只会初始化一次

生命周期方法

Servlet从创建到销毁期间调用的方法:

  1. init:初始化方法,在创建servlet的实例时调用该方法。默认情况下,初次访问servlet才会创建实例
  2. service:当有请求到servlet时调用该方法。该方法可以被执行多次
  3. destroy:servlet销毁时调用该方法

Servlet提前执行init方法

默认情况地下,只有在初次访问Servlet时才会执行init方法。有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。这个时候就需要让init方法提前执行,免得影响初次访问的体验。

想要让init方法提前执行,需要在web.xml文件中对需要提前执行的Servlet进行设置

<!-- 向Tomcat注册Servlet servlet-name:Servlet的名称, servlet-class:具体的路径 --><servlet><servlet-name>TestServlet</servlet-name><servlet-class>cn.liuwei.servlet.TestServlet</servlet-class><!-- 设置Servlet的init方法提前执行 --><load-on-startup>2</load-on-startup></servlet>

load-on-startup的值越小,提前执行的优先级越高。并且一般不设置为1,因为1是Tomcat的的Servlet的优先级

ServletConfig

ServletConfig用于获取Servlet的配置信息

//1.获取ServletConfig对象, 获取的是用于配置的信息
ServletConfig config = this.getServletConfig();

ServletConfig类中有4个方法:

  • getServletName:获取Servlet的配置名称
  • getInitParameter("name"):获取Servlet配置时的某个参数的值
String initName = config.getInitParameter("name");

参数在web.xml文件中配置

<servlet><servlet-name>HelloServletConfig</servlet-name><servlet-class>cn.liuwei.servlet.HelloServletConfig</servlet-class><init-param><param-name>name</param-name><param-value>Andrew</param-value></init-param></servlet>
  • getInitParameterNames:获取Servlet配置时的所有参数的值
Enumeration<String> names = config.getInitParameterNames();

为什么需要ServletConfig?

当jar包的编写者需要一个由jar包的使用者定义的变量时,可以提前在Servlet代码中用ServletConfig获取变量,然后让使用者在web.xml文件中定义这个变量的值

ServletContext

每个Web应用只有一个ServletContext对象,即不管在哪个Servlet中,他们获取到的ServletContext对象都是同一个

通过getServletContext()方法获取ServletContext对象

ServletContext context = getServletContext();

ServletContext的作用

1.可以获取全局配置参数

在web.xml中配置全局参数

 <context-param><param-name>address</param-name><param-value>上海杨浦</param-value>
</context-param>

通过getInitParameter方法获取全局参数

2.获取web应用中的资源

通过getRealPath方法获取给定文件的绝对路径

String path = context.getRealPath("");

通过getResourceAsStream方法获取Web工程下的资源,并转换成流对象

//使用context的getResourceAsStream方法时的根路径是Tomcat中的项目文件的路径
InputSream is = context.getResourceAsStream("");

3.使用ClassLoader获取资源文件

//获取该Java文件的class类,然后获取到加载这个class到虚拟机中的那个类加载器对象
//通过这个方法的根路径是项目文件下的WEB-INF/classes
InputStream is = this.getClass().getClassLoader().getResourceAsStream("");

4.使用ServletContext存取数据

5.ServletContext的生命周期

服务器启动时,会为托管的每一个web应用程序创建一个ServletContext对象

从服务器移除托管,或者关闭服务器是会销毁ServletContext对象

6.ServletContext的作用范围

同一个项目的ServletContext对象是一致的

【博学谷学习记录】超强总结,用心分享|【Java Web】Servlet相关推荐

  1. {博学谷学习记录} 超强总结,用心分享|狂野架构师-前置互联网架构演变过程

    本章以系统架构,数据架构,两种维度来进行讲解 目录 1 系统架构 1,1 单体架构 1.2 中台战略 2 数据库架构 2,1 单体架构 2.2 主从读写 2.3 分库分表 3 总结 1 系统架构 1, ...

  2. [博学谷学习记录]超强总结,用心分享|第07节 常用的API-----笔记篇

    目录 1.API 1.1 API概述-帮助文档的使用 1.2 键盘录入字符串 2. String类 2.1 String概述 2.2 String类的构造方法 2.4 创建字符串对象的区别对比 2.5 ...

  3. [博学谷学习记录]超强总结,用心分享|架构 Nacos入门

    提示:学习笔记 欢迎指点 文章目录 前言 一.Nacos安装 二.Nacos服务注册与发现 1.服务提供者Provider 2.服务消费者Consumer 三.Nacos作为配置中心 前言 Nacos ...

  4. [博学谷学习记录]超强总结,用心分享|架构 敏捷 - 开发管理之道

    提示:学习笔记 欢迎指点 文章目录 1.敏捷开发思想之道 2.面向对象开发之道 3.敏捷学习之道 1.敏捷开发思想之道 一名敏捷开发者,敏捷思想的掌握自然首当其冲.在敏捷开发实施的过程中,我们虽然不是 ...

  5. [博学谷学习记录]超强总结,用心分享|第16节 集合续-----笔记篇

    目录 1.HashSet集合 1.1HashSet集合概述和特点[应用] 1.2HashSet集合的基本应用[应用] 1.3哈希值[理解] 1.4哈希表结构[理解] 1.5HashSet集合存储学生对 ...

  6. [博学谷学习记录] 超强总结,用心分享|陌陌综合案例

    注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flin ...

  7. [博学谷学习记录]超强总结,用心分享|Hive的压缩格式

    压缩格式 工具 算法 文件扩展名 是否可切分 DEFAULT 无 DEFAULT .deflate 否 Gzip gzip DEFAULT .gz 否 bzip2 bzip2 bzip2 .bz2 是 ...

  8. [博学谷学习记录]超强总结,用心分享|软件测试之计算机基础(一)

    本周开始学习软件测试,而我也即将开始在平台记录我的学习之路.我会把我的个人心得及掌握的知识发布在此平台,俗话说最好的输入就是输出,希望在输出的同时能有更多的收获,也希望与大家多多交流. 为了更好的学习 ...

  9. [博学谷学习记录]超强总结,用心分享|人工智能机械学习基础知识线性回归总结分享

    1.线性回归的核心是参数学习,线性回归和回归方程(函数)有关 2.线性回归是目标值预期是输入变量的线性组合 3.欠拟合的产生原因是学习到数据的特征过少 4.多元线性回归中的"线性" ...

  10. [博学谷学习记录] 超强总结,用心分享|JavaEE就业课-尊享无忧+Java基础语法|面向对象(1wk)

    学习笔记目录 目录 学习笔记目录 前言 一.变量 1. 关键字:被java赋予特殊含义的字符 2. 常量:不会发生改变的量(数据)​编辑 3. 变量:内存中的存储空间. 4. 类型转换 5. 算术运算 ...

最新文章

  1. mysql建索引 字段截取_提高MySQL索引策略一:隔离查询列
  2. python3 替换字符串中指定位置字符
  3. Linux平台swift语言开发学习环境搭建
  4. Socket阻塞与非阻塞,同步与异步、I/O模型
  5. oracle decode_ORACLE常见问题-100问(系列一)
  6. 【C语言】如何安装CLion并在CLion中Run一个程序
  7. php有几种数据结构,PHP数据结构有几种_后端开发
  8. 超详细CookieSession的原理与用法
  9. linq 动态拼接where条件 类似 T_SQL And Or
  10. 节日仪式感海报PSD分层模板,快来pick一下!
  11. Java操作某方法时报错:java.lang.NoSuchMethodError
  12. 配置豪华的 Windows 开发环境
  13. 关于do{}while()的代码讨论
  14. Sharepoint学习笔记--- 快速确定VisualStudio2010当前Project的assembly name
  15. nexus下载地址分享
  16. c语言bim的题目,BIM考试选择题精选
  17. 全网最全网络安全站点汇总!还不赶快放到收藏夹里吃灰
  18. 刽子手游戏 做题笔记
  19. bsoj 1512 金明的预算方案(树型DP)
  20. gitlab同步代码时https证书错误

热门文章

  1. 合理利用正则表达式搞定算法题
  2. PowerDesigner 将pdm模型表 用命令导出成Excel表格
  3. Windows远程访问服务
  4. 外贸软件成本核算丨采购出入库有磅差怎么办
  5. Spring Boot教程系列 ImportNew
  6. C语言从函数返回数组
  7. 怎么用css设置字体小于12px
  8. 利用队列实现打印杨辉三角
  9. this 指向以及修改this 指向的方法
  10. 关于 iMindMap7 的使用介绍