Web编程---Servlet技术
文章目录
- 一、目的
- 二、原理
- 三、过程
- 1. TestServlet02文件演示效果
- 2. TestServlet03文件演示效果
- 3. TestServlet04与TestServlet05文件演示效果
- 4. 控制台展示生命周期过程
- 四、代码
- web.xml文件
- TestServlet02.java文件
- TestServlet03.java文件
- TestServlet04.java文件
- TestServlet05.java文件
- SomeServlet.java文件
一、目的
-
Servlet接口及其实现类的使用
-
Servlet虚拟路径映射的配置
-
使用Eclipse工具开发Servlet
-
Servlet的生命周期
二、原理
Servlet由Servlet容器提供,所谓的Servlet容器是指提供了Servlet 功能的服务器(本书中指Tomcat),Servlet容器将Servlet动态的加载到服务器上。

Servlet的生命周期

Servlet的生命周期是指Servlet从被Servlet容器加载、初始化,到处理客户端请求,直至销毁的整个过程。以下是Servlet生命周期的详细介绍:
三、过程
1. TestServlet02文件演示效果
(1) 通过getServletConfig()函数获取初始化参数里面内容。

(2) 通过get()展示获取到的参数内容

2. TestServlet03文件演示效果
(1) 通过getServletContext()函数获取参数内容

(3) 通过get()展示获取到的参数内容

3. TestServlet04与TestServlet05文件演示效果
(1) 文件4设置参数,文件5获取参数

(2) 通过get()展示获取到的参数内容

4. 控制台展示生命周期过程

代码段

四、代码
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" id="WebApp_ID" version="5.0"><!-- <display-name>chapter03</display-name> --><!-- 3.4.1 小结配置信息 --><servlet><servlet-name>TestServlet02</servlet-name><servlet-class>cn.itcast.servlet.TestServlet02</servlet-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></servlet><servlet-mapping><servlet-name>TestServlet02</servlet-name><url-pattern>/TestServlet02</url-pattern></servlet-mapping><!-- 3.4.2 配置信息 --><context-param><param-name>companyName</param-name><param-value>itcast</param-value></context-param><context-param><param-name>address</param-name><param-value>beijing</param-value></context-param><servlet><servlet-name>TestServlet03</servlet-name><servlet-class>cn.itcast.servlet.TestServlet03</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet03</servlet-name><url-pattern>/TestServlet03</url-pattern></servlet-mapping><servlet><description></description><display-name>TestServlet04</display-name><servlet-name>TestServlet04</servlet-name><servlet-class>cn.itcast.servlet.TestServlet04</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet04</servlet-name><url-pattern>/TestServlet04</url-pattern></servlet-mapping><servlet><description></description><display-name>TestServlet05</display-name><servlet-name>TestServlet05</servlet-name><servlet-class>cn.itcast.servlet.TestServlet05</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet05</servlet-name><url-pattern>/TestServlet05</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file><!-- <welcome-file>index.jsp</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.jsp</welcome-file><welcome-file>default.htm</welcome-file> --></welcome-file-list>
</web-app>
TestServlet02.java文件
package cn.itcast.servlet;
import java.io.*;import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;public class TestServlet02 extends HttpServlet {/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stub
// super.doGet(req, resp);PrintWriter out = resp.getWriter();// 获得ServletConfig对象ServletConfig config = this.getServletConfig();// 获得参数名为encoding对应的参数值String param = config.getInitParameter("encoding");out.println("encoding=" + param);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doPost(req, resp);}
}
TestServlet03.java文件
package cn.itcast.servlet;
import java.io.*;
import java.util.*;import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;public class TestServlet03 extends HttpServlet {/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubPrintWriter out = resp.getWriter();// 得到ServletContext对象ServletContext context = this.getServletContext();// 得到包含所有初始化参数名的Enumeration对象Enumeration<String> paramNames = context.getInitParameterNames();// 遍历所有的初始化参数名,得到相应的参数值,打印到控制台out.println("all the paramName and paramValue are following:");// 遍历所有的初始化参数名,得到相应的参数值并打印while (paramNames.hasMoreElements()) {String name = paramNames.nextElement();String value = context.getInitParameter(name);out.println(name + ": " + value);out.println("<br>");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doPost(req, resp);}
}
TestServlet04.java文件
package cn.itcast.servlet;
import java.io.*;import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;public class TestServlet04 extends HttpServlet {/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stub
// super.doGet(req, resp);ServletContext context = this.getServletContext();// 通过setAttribute()方法设置属性值context.setAttribute("data", "this servlet save data");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doPost(req, resp);}
}
TestServlet05.java文件
package cn.itcast.servlet;
import java.io.IOException;
import java.io.PrintWriter;import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;public class TestServlet05 extends HttpServlet {/*** */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stub
// super.doGet(req, resp);ServletContext context = this.getServletContext();Object object = context.getAttribute("data");PrintWriter out = resp.getWriter();out.println(object.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doPost(req, resp);}
}
SomeServlet.java文件
package com.powernode.servlets;import java.io.IOException;import jakarta.servlet.Servlet;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;public class SomeServlet implements Servlet {private ServletConfig config;@Overridepublic void init(ServletConfig config) throws ServletException {// TODO Auto-generated method stubthis.config = config;System.out.println("init");}@Overridepublic ServletConfig getServletConfig() {// TODO Auto-generated method stubreturn config;}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// TODO Auto-generated method stub
// 获取servlet名称String servletName = config.getServletName();System.out.println("获取servlet名称:" + servletName);// 获取servletContext对象ServletContext servletContext = config.getServletContext();System.out.println("获取servletContext对象" + servletContext);
// 获取初始化参数String initParameter1 = config.getInitParameter("name");System.out.println("name:" + initParameter1);System.out.println("service");}@Overridepublic String getServletInfo() {// TODO Auto-generated method stubreturn null;}@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("destroy()");}}相关文章:
Web编程---Servlet技术
文章目录 一、目的二、原理三、过程1. TestServlet02文件演示效果2. TestServlet03文件演示效果3. TestServlet04与TestServlet05文件演示效果4. 控制台展示生命周期过程 四、代码web.xml文件TestServlet02.java文件TestServlet03.java文件TestServlet04.java文件TestServlet05…...
【cocos creator】输入框滑动条联动小组建
滑动条滑动输入框内容会改变 输入框输入,滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…...
Flink时间窗口程序骨架结构
前言 Flink 作业的基本骨架结构包含三部分:创建执行环境、定义数据处理逻辑、提交并执行Flink作业。 日常大部分 Flink 作业是基于时间窗口计算模型的,同样的,开发一个Flink时间窗口作业也有一套基本的骨架结构,了解这套结构有助…...
计算机视觉之可做什么
1、计算机视觉的应用 计算机视觉在我们生活中已经有了很广泛的应用,在我们可见、不可见;可感知、不可感知的地方,深深地影响了我们的生活、生产方式。 日常生活:美颜相机、火车站刷脸进站、线上办理业务的身份认证、自动驾驶等等…...
观察者模式的思考
观察者模式由来 观察者模式(Observer Pattern)是一种行为型设计模式,它的起源可以追溯到20世纪90年代初,由设计模式四人帮(Erich Gamma, Richard Helm, Ralph Johnson 和 John Vlissides)在其著作《设计模…...
ORACLE SELECT INTO 赋值为空,抛出 NO DATA FOUND 异常
例子: DECLARE ORDER_NUM VARCHAR2(20); BEGIN SELECT S.ORDER_NUM INTO ORDER_NUM FROM SALES_ORDER S WHERE S.ID122344; DBMS_OUTPUT.PUT_LINE(单号: || ORDER_NUM); END; 在查询结果为空的情况下,以上代码会报错:未找到任何数据 解决方…...
GPT提示词
参考 提示词大全: GPT提示词大全(中英文双语)持续更新 提示词.com...
Redis协议详解及其异步应用
目录 一、Redis Pipeline(管道)概述优点使用场景工作原理Pipeline 的基本操作步骤C 示例(使用 [hiredis](https://github.com/redis/hiredis) 库) 二、Redis 事务概述事务的前提事务特征(ACID 分析)WATCH 命…...
LeetCode213:打家劫舍II
题目链接:213. 打家劫舍 II - 力扣(LeetCode) 代码如下 class Solution { public:int rob(vector<int>& nums) {if(nums.size() 0) return 0;if(nums.size() 1) return nums[0];if(nums.size() 2) return max(nums[0…...
linux一二三章那些是重点呢
第一章 静态库动态库的区别 什么是库 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接 拿来用的变量、函数或类。 如何制作 静态动态库 静态库: GCC 进行链接时,会把静态库中代码打…...
C语言中的程序入口:超越main函数的探索
在C语言中,尽管main函数是标准程序的默认入口点,但借助编译器特性和链接器选项,我们可以指定其他函数作为程序的入口。GCC编译器通过-e选项,允许我们将任何符合签名的函数作为程序的入口。这一特性可以用于特定的实验需求、特定系…...
《面试之MQ篇》
《面试之MQ篇》 1. 为什么要使用MQ 首先,面试官问的第一个问题或者说是逼问的一个问题:“为什么要使用MQ”其实面试官问这个问题就是想考察你MQ的特性,这个时候呢,我们必须要答出三点:解耦、异步、削峰。 1. 解耦 1. 传统系统…...
Git 分支操作-开发规范
一、背景 在实际开发中,一般在主分支的基础上单独创建一个新的分支进行开发,最后合并到master分支,而不是直接在master分支进行开发。 二、新建分支 1、初始状态,local为本地分支,remote为远程分支 2、单击 “Remot…...
JSONArray根据指定字段去重
JSONArray dataList new JSONArray();这儿省略dataList 加数据的过程 dataList new JSONArray(dataList.stream().distinct().collect(Collectors.toList())); Set<String> timestamps new HashSet<>();根据时间字段去重 dataList dataList.stream().map(obj -…...
线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式?
在 Java 中,线程的生命周期管理通过不同的状态来跟踪。一个线程在其生命周期中可以处于多种状态,不同的状态之间会通过特定的事件发生转变。以下是 Java 线程的几种状态及其之间的转移方式: 1. 线程的状态 1.1 NEW(新建状态&…...
自注意力机制self-attention中的KV 缓存
在自注意力机制中,KV 缓存(Key-Value Caching)主要用于加速模型在推理阶段的计算,尤其是在处理长序列或者生成任务(如文本生成)时,这种缓存机制可以显著提高效率。 1. KV 缓存的背景 在 Trans…...
前端库--nanoid(轻量级的uuid)
文章目录 定义:生成方式:现实使用:NanoID 只有 108 个字节那么大NanoID更安全NanoID它既快速又紧凑 使用步骤1.安装nanoid包2.引入使用3.使用4.自定义字母 定义: UUID 是 通用唯一识别码(Universally Unique Identifierÿ…...
计算机基础-什么是网络端口?
网络端口可以想象成一个大型公寓楼的邮箱。每个公寓楼(这里指的是一个计算机或服务器)有很多个邮箱(即网络端口),每个邮箱都有一个独一无二的编号(端口号)。当一封信(网络数据包&…...
力扣动态规划基础版(斐波那契类型)
70. 爬楼梯https://leetcode.cn/problems/climbing-stairs/ 70.爬楼梯 方法一 动态规划 考虑转移方程和边界条件: f(x) f(x -1) f(x - 2);f(1) 1;f&…...
Java重修笔记 InetAddress 类和 Socket 类
InetAddress 类相关方法 1. 获取本机 InetAddress 对象:getLocalHost public static InetAddress getLocalHost() throws UnknownHostException 返回值:本地主机的名字和地址 异常:UnknownHostException - 如果本地主机名无法解析成地址 2…...
DeepSeek LintCode 3866.有效子数组的数量 public int validSubarrays(int[] nums)
这是关于LintCode 3866 “有效子数组的数量”的问题。这是一个典型的单调栈应用问题,需要计算数组中所有满足特定条件的子数组数量。 问题理解 有效子数组的定义: 对于数组 nums 中的某个子数组 nums[i..j](i ≤ j),如…...
Windows音频捕获新方案:实现进程级精准录音的技术实践
Windows音频捕获新方案:实现进程级精准录音的技术实践 【免费下载链接】win-capture-audio An OBS plugin that allows capture of independant application audio streams on Windows, in a similar fashion to OBSs game capture and Discords application stream…...
【数电】组合逻辑电路模块:从原理到系统级应用
1. 组合逻辑电路基础入门 第一次接触数字电路时,我被那些密密麻麻的逻辑门符号搞得头晕眼花。直到真正理解了组合逻辑电路的精髓,才发现它就像搭积木一样有趣。组合逻辑电路的特点是输出只取决于当前的输入状态,不像时序电路那样需要考虑历史…...
深入剖析YOLOv8核心模块:从架构设计到实战应用全解析
1. YOLOv8架构设计揭秘 YOLOv8作为目标检测领域的标杆模型,其架构设计处处体现着工程师的巧思。我第一次拆解它的代码时,最惊艳的是它的模块化设计——就像搭积木一样,每个组件都能灵活替换。核心的Backbone部分采用CSPDarknet53结构…...
OpenClaw极简部署:nanobot镜像+手机Termux方案
OpenClaw极简部署:nanobot镜像手机Termux方案 1. 为什么要在手机上部署OpenClaw? 去年夏天,我在咖啡馆等朋友时突发奇想:如果能用手机随时调用AI助手处理文件该多好。当时尝试了几款云端AI工具,但要么功能受限&#…...
保姆级教程:在WSL上用AWS CLI配置MinIO临时访问凭证(含时区避坑指南)
在WSL中实战MinIO临时凭证:从配置到避坑的全流程指南 如果你正在Windows系统上使用WSL进行开发,并且需要为MinIO对象存储生成临时访问凭证,那么这篇文章将为你提供完整的解决方案。我们将从环境准备开始,逐步深入到凭证生成、策略…...
SEO_避开这些常见误区,让你的SEO效果翻倍
<h2>避开这些常见误区,让你的SEO效果翻倍</h2> <p>在当今的互联网时代,搜索引擎优化(SEO)已经成为了每个网站和博客运营者必须掌握的技能之一。许多人在进行SEO时却会犯一些常见的错误,这些错误不仅…...
华为光猫配置解密工具技术架构解析与实现机制
华为光猫配置解密工具技术架构解析与实现机制 【免费下载链接】HuaWei-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/hu/HuaWei-Optical-Network-Terminal-Decoder 在网络设备运维领域,华为光猫配置文件的安全加密机制为设备…...
Zotero Reference插件完全指南:5步实现PDF文献自动化管理
Zotero Reference插件完全指南:5步实现PDF文献自动化管理 【免费下载链接】zotero-reference PDF references add-on for Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reference Zotero Reference是一款革命性的Zotero插件,专门…...
3分钟解决Word论文格式难题:免费获取APA第7版参考文献样式终极指南
3分钟解决Word论文格式难题:免费获取APA第7版参考文献样式终极指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为Word中找不到APA第…...
