【博学谷学习记录】超强总结,用心分享|【Java Web】Servlet
目录
什么是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请求时,访问流程如下所示
- 先找到Tomcat
- 根据url中的名称找到具体的项目
- 找到项目下的web.xml,然后寻找url-pattern,看有没有哪个pattern对应url中的值
- 找到servlet-mapping中的servlet-name
- 找到前面注册的servlet-name
- 根据servlet-class中的值找到对应的Servlet类并创建实例
- 执行Servlet中的方法
Servlet的生命周期
生命周期
Servlet从创建到销毁的一段时间:
- 初始化:一个Servlet只会初始化一次
生命周期方法
Servlet从创建到销毁期间调用的方法:
- init:初始化方法,在创建servlet的实例时调用该方法。默认情况下,初次访问servlet才会创建实例
- service:当有请求到servlet时调用该方法。该方法可以被执行多次
- 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.2 中台战略 2 数据库架构 2,1 单体架构 2.2 主从读写 2.3 分库分表 3 总结 1 系统架构 1, ...
- [博学谷学习记录]超强总结,用心分享|第07节 常用的API-----笔记篇
目录 1.API 1.1 API概述-帮助文档的使用 1.2 键盘录入字符串 2. String类 2.1 String概述 2.2 String类的构造方法 2.4 创建字符串对象的区别对比 2.5 ...
- [博学谷学习记录]超强总结,用心分享|架构 Nacos入门
提示:学习笔记 欢迎指点 文章目录 前言 一.Nacos安装 二.Nacos服务注册与发现 1.服务提供者Provider 2.服务消费者Consumer 三.Nacos作为配置中心 前言 Nacos ...
- [博学谷学习记录]超强总结,用心分享|架构 敏捷 - 开发管理之道
提示:学习笔记 欢迎指点 文章目录 1.敏捷开发思想之道 2.面向对象开发之道 3.敏捷学习之道 1.敏捷开发思想之道 一名敏捷开发者,敏捷思想的掌握自然首当其冲.在敏捷开发实施的过程中,我们虽然不是 ...
- [博学谷学习记录]超强总结,用心分享|第16节 集合续-----笔记篇
目录 1.HashSet集合 1.1HashSet集合概述和特点[应用] 1.2HashSet集合的基本应用[应用] 1.3哈希值[理解] 1.4哈希表结构[理解] 1.5HashSet集合存储学生对 ...
- [博学谷学习记录] 超强总结,用心分享|陌陌综合案例
注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flin ...
- [博学谷学习记录]超强总结,用心分享|Hive的压缩格式
压缩格式 工具 算法 文件扩展名 是否可切分 DEFAULT 无 DEFAULT .deflate 否 Gzip gzip DEFAULT .gz 否 bzip2 bzip2 bzip2 .bz2 是 ...
- [博学谷学习记录]超强总结,用心分享|软件测试之计算机基础(一)
本周开始学习软件测试,而我也即将开始在平台记录我的学习之路.我会把我的个人心得及掌握的知识发布在此平台,俗话说最好的输入就是输出,希望在输出的同时能有更多的收获,也希望与大家多多交流. 为了更好的学习 ...
- [博学谷学习记录]超强总结,用心分享|人工智能机械学习基础知识线性回归总结分享
1.线性回归的核心是参数学习,线性回归和回归方程(函数)有关 2.线性回归是目标值预期是输入变量的线性组合 3.欠拟合的产生原因是学习到数据的特征过少 4.多元线性回归中的"线性" ...
- [博学谷学习记录] 超强总结,用心分享|JavaEE就业课-尊享无忧+Java基础语法|面向对象(1wk)
学习笔记目录 目录 学习笔记目录 前言 一.变量 1. 关键字:被java赋予特殊含义的字符 2. 常量:不会发生改变的量(数据)编辑 3. 变量:内存中的存储空间. 4. 类型转换 5. 算术运算 ...
最新文章
- java一般会写javadoc吗_怎么写javadoc
- 海洋主题绘画_神奇宝贝:海洋生物的艺术世界绘画比赛获奖作品展来啦!
- 线程的退出 java_(转)Java结束线程的三种方法
- 检索数据_7_拼接列的值
- 如何利用python在一个wen'dang'li_如何利用Python网络爬虫给自己跟朋友来一份穷游攻略!走到哪里穷到哪里的哦!...
- Java集合(一):Java集合概述
- ReactNative实现图集功能
- 后台原理_电气控制原理动图22张,超赞!
- (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载...
- neo4j查询节点的出度与入度的数量
- java递归优化_在Java中谈尾递归--尾递归和垃圾回收的比较
- Windows下打开Url 代码封装 C++
- matlab生猪的出售时机,数学模型程序代码-Matlab-姜启源-第三章-简单的优化模型.doc...
- python3.4勾股定理代码_python计算器代码
- Matlab的中Plot函数的基本用法(详解)
- 在html中页面不全,网页显示不全,教您网页显示不全怎么办
- 网易2019实习生招聘编程题解答
- bing每日壁纸_如何将Bing的每日背景用作Ubuntu壁纸
- 恒生与中国信通院联合发布《证券行业分布式核心系统SRE运维白皮书》
- 网络工程师2017上半年上午试题答案