当前位置: 首页 > news >正文

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

2. TestServlet03文件演示效果

(1) 通过getServletContext()函数获取参数内容

图 3

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

图 4

3. TestServlet04与TestServlet05文件演示效果

(1) 文件4设置参数,文件5获取参数

图 5

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

图 6

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

图 7

代码段

图 8

四、代码

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】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入&#xff0c;滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…...

Flink时间窗口程序骨架结构

前言 Flink 作业的基本骨架结构包含三部分&#xff1a;创建执行环境、定义数据处理逻辑、提交并执行Flink作业。 日常大部分 Flink 作业是基于时间窗口计算模型的&#xff0c;同样的&#xff0c;开发一个Flink时间窗口作业也有一套基本的骨架结构&#xff0c;了解这套结构有助…...

计算机视觉之可做什么

1、计算机视觉的应用 计算机视觉在我们生活中已经有了很广泛的应用&#xff0c;在我们可见、不可见&#xff1b;可感知、不可感知的地方&#xff0c;深深地影响了我们的生活、生产方式。 日常生活&#xff1a;美颜相机、火车站刷脸进站、线上办理业务的身份认证、自动驾驶等等…...

观察者模式的思考

观察者模式由来 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它的起源可以追溯到20世纪90年代初&#xff0c;由设计模式四人帮&#xff08;Erich Gamma, Richard Helm, Ralph Johnson 和 John Vlissides&#xff09;在其著作《设计模…...

ORACLE SELECT INTO 赋值为空,抛出 NO DATA FOUND 异常

例子&#xff1a; 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; 在查询结果为空的情况下&#xff0c;以上代码会报错&#xff1a;未找到任何数据 解决方…...

GPT提示词

参考 提示词大全&#xff1a; GPT提示词大全&#xff08;中英文双语&#xff09;持续更新 提示词.com...

Redis协议详解及其异步应用

目录 一、Redis Pipeline&#xff08;管道&#xff09;概述优点使用场景工作原理Pipeline 的基本操作步骤C 示例&#xff08;使用 [hiredis](https://github.com/redis/hiredis) 库&#xff09; 二、Redis 事务概述事务的前提事务特征&#xff08;ACID 分析&#xff09;WATCH 命…...

LeetCode213:打家劫舍II

题目链接&#xff1a;213. 打家劫舍 II - 力扣&#xff08;LeetCode&#xff09; 代码如下 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一二三章那些是重点呢

第一章 静态库动态库的区别 什么是库 库文件是计算机上的一类文件&#xff0c;可以简单的把库文件看成一种代码仓库&#xff0c;它提供给使用者一些可以直接 拿来用的变量、函数或类。 如何制作 静态动态库 静态库&#xff1a; GCC 进行链接时&#xff0c;会把静态库中代码打…...

C语言中的程序入口:超越main函数的探索

在C语言中&#xff0c;尽管main函数是标准程序的默认入口点&#xff0c;但借助编译器特性和链接器选项&#xff0c;我们可以指定其他函数作为程序的入口。GCC编译器通过-e选项&#xff0c;允许我们将任何符合签名的函数作为程序的入口。这一特性可以用于特定的实验需求、特定系…...

《面试之MQ篇》

《面试之MQ篇》 1. 为什么要使用MQ 首先,面试官问的第一个问题或者说是逼问的一个问题&#xff1a;“为什么要使用MQ”其实面试官问这个问题就是想考察你MQ的特性&#xff0c;这个时候呢&#xff0c;我们必须要答出三点&#xff1a;解耦、异步、削峰。 1. 解耦 1. 传统系统…...

Git 分支操作-开发规范

一、背景 在实际开发中&#xff0c;一般在主分支的基础上单独创建一个新的分支进行开发&#xff0c;最后合并到master分支&#xff0c;而不是直接在master分支进行开发。 二、新建分支 1、初始状态&#xff0c;local为本地分支&#xff0c;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 中&#xff0c;线程的生命周期管理通过不同的状态来跟踪。一个线程在其生命周期中可以处于多种状态&#xff0c;不同的状态之间会通过特定的事件发生转变。以下是 Java 线程的几种状态及其之间的转移方式&#xff1a; 1. 线程的状态 1.1 NEW&#xff08;新建状态&…...

自注意力机制self-attention中的KV 缓存

在自注意力机制中&#xff0c;KV 缓存&#xff08;Key-Value Caching&#xff09;主要用于加速模型在推理阶段的计算&#xff0c;尤其是在处理长序列或者生成任务&#xff08;如文本生成&#xff09;时&#xff0c;这种缓存机制可以显著提高效率。 1. KV 缓存的背景 在 Trans…...

前端库--nanoid(轻量级的uuid)

文章目录 定义&#xff1a;生成方式&#xff1a;现实使用:NanoID 只有 108 个字节那么大NanoID更安全NanoID它既快速又紧凑 使用步骤1.安装nanoid包2.引入使用3.使用4.自定义字母 定义&#xff1a; UUID 是 通用唯一识别码&#xff08;Universally Unique Identifier&#xff…...

计算机基础-什么是网络端口?

网络端口可以想象成一个大型公寓楼的邮箱。每个公寓楼&#xff08;这里指的是一个计算机或服务器&#xff09;有很多个邮箱&#xff08;即网络端口&#xff09;&#xff0c;每个邮箱都有一个独一无二的编号&#xff08;端口号&#xff09;。当一封信&#xff08;网络数据包&…...

力扣动态规划基础版(斐波那契类型)

70. 爬楼梯https://leetcode.cn/problems/climbing-stairs/ 70.爬楼梯 方法一 动态规划 考虑转移方程和边界条件&#xff1a; f&#xff08;x&#xff09; f&#xff08;x -1&#xff09; f&#xff08;x - 2&#xff09;;f&#xff08;1&#xff09; 1&#xff1b;f&…...

Java重修笔记 InetAddress 类和 Socket 类

InetAddress 类相关方法 1. 获取本机 InetAddress 对象&#xff1a;getLocalHost public static InetAddress getLocalHost() throws UnknownHostException 返回值&#xff1a;本地主机的名字和地址 异常&#xff1a;UnknownHostException - 如果本地主机名无法解析成地址 2…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...