目录

什么是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. java一般会写javadoc吗_怎么写javadoc
  2. 海洋主题绘画_神奇宝贝:海洋生物的艺术世界绘画比赛获奖作品展来啦!
  3. 线程的退出 java_(转)Java结束线程的三种方法
  4. 检索数据_7_拼接列的值
  5. 如何利用python在一个wen'dang'li_如何利用Python网络爬虫给自己跟朋友来一份穷游攻略!走到哪里穷到哪里的哦!...
  6. Java集合(一):Java集合概述
  7. ReactNative实现图集功能
  8. 后台原理_电气控制原理动图22张,超赞!
  9. (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载...
  10. neo4j查询节点的出度与入度的数量
  11. java递归优化_在Java中谈尾递归--尾递归和垃圾回收的比较
  12. Windows下打开Url 代码封装 C++
  13. matlab生猪的出售时机,数学模型程序代码-Matlab-姜启源-第三章-简单的优化模型.doc...
  14. python3.4勾股定理代码_python计算器代码
  15. Matlab的中Plot函数的基本用法(详解)
  16. 在html中页面不全,网页显示不全,教您网页显示不全怎么办
  17. 网易2019实习生招聘编程题解答
  18. bing每日壁纸_如何将Bing的每日背景用作Ubuntu壁纸
  19. 恒生与中国信通院联合发布《证券行业分布式核心系统SRE运维白皮书》
  20. 网络工程师2017上半年上午试题答案

热门文章

  1. 脱壳中的附加数据问题(overlay)
  2. Dell T30解决报Alert! Cover was previously removed.
  3. win10音频服务器未修复,win10系统音频服务未启动的修复方案
  4. WPF空心圆角combox
  5. mysql分库分表(一)
  6. 目标IT男的第十七天----面向对象第十天
  7. 使用Winhex查看U盘数据
  8. vr虚拟全景展示,是你推广的最佳选择
  9. 模拟海_BSG商业模拟秀||做自己的网红经纪人
  10. 腾讯副总裁马斌谈腾讯移动互联网规划