Java课题笔记~ Servlet编程
1.Servlet编程基础
(1)什么是Servlet
Servlet是基于Java语言的Web编程技术,部署在服务器端的Web容器里,获取客户端的访问请求,并根据请求生成响应信息返回给客户端。
创建Servlet的方式,有
如下图:一般创建Servlet都是通过继承HttpServlet来实现,如图中的HelloServlet。
(类图快捷键:Ctrl + Alt + U)

1.创建一个基于Maven的web项目。

2.创建java和resources文件夹

3.修改web.xml的版本

4.导入servlet的依赖
<!--servlet的依赖-->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version>
</dependency>

(2)Servlet的生命周期
init():当服务器启动,第一次访问Servlet的时候,servlet进行初始化
service():在服务器启动期间,可以不断的处理请求。
destroy():在服务器停止的时候,去销毁Servlet.
(3)Servlet的主要功能
(1)读取客户端发送到服务器端的显式数据(表单数据)
(2)读取客户端发送到服务器端的隐式数据(请求报头)
(3)服务器端发送显式数据到客户端(HTML)
(4)服务器端发送隐式数据到客户端(状态代码和响应报头)

2.编写Servlet类
1.通过Servlet生成静态网页
package com.ambow.test;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** 作用:通过Servlet,动态生成HTML网页* @author foxbill* @date 2021/11/2 10:58*/
@WebServlet(name = "FirstServlet")
public class FirstServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8");//设置响应的字符集格式为UTF-8response.setContentType("text/html");//设置响应正文的MIME类型PrintWriter out = response.getWriter();//返回一个PrintWriter对象,Servlet使用它来输出字符串形式的正文数据out.println("<!doctype html>");out.println("<html>");out.println("<head><title>动态生成的HTML文档</title></head>");out.println("<body>");out.println("<table border='0' align='center'>");out.println("<tr><td bgcolor='skyblue' colspan=2>动态生成HTML文档</td></tr>");out.println("</table>");out.println("</body>");out.println("</html>");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}
web.xml的相关代码:
<servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first</url-pattern>
</servlet-mapping>

2.通过Servlet生成动态网页
package com.ambow.test;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalTime;/*** @author foxbill* @date 2023/8/9 16:35*/
@WebServlet(name = "TestServlet")
public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//请求处理代码(功能:写一个动态网页)response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();LocalTime now = LocalTime.now();int hour = now.getHour();out.println("<!doctype html>");out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");if (hour>0 && hour < 6){out.println("晚安!");}if (hour>=6 && hour <= 12){out.println("早安!");}if (hour>12){out.println("午安!");}out.println("</body>");out.println("</html>");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}
web.xml的相关代码:
<servlet><servlet-name>TestServlet</servlet-name><servlet-class>com.ambow.test.TestServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/test</url-pattern>
</servlet-mapping>

3.编写web.xml配置文件
(一)配置虚拟路径
1.Servlet的多重映射
方式一:
<servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first01</url-pattern>
</servlet-mapping>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first02</url-pattern>
</servlet-mapping>
方式二:
<servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first01</url-pattern><url-pattern>/first02</url-pattern>
</servlet-mapping>
2.映射路径中使用通配符,格式有两种 :
*.do:优先级最低
/*
<url-pattern>*.do</url-pattern><url-pattern>/*</url-pattern><url-pattern>/test/*</url-pattern>
3.缺省Servlet : /
缺省servlet其实就是servlet-mapping元素中url为/的servlet,在tomcat安装目录中:conf下的web.xml中有这样一个代码:
<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
缺省Servlet的作用就是处理servlet-mapping中url都匹配不到的请求。
在web访问任何资源都是在访问Servlet,当访问tomcat服务中的某个静态html文件和图片时,实际上是在访问这个缺省的servlet。
如果在web应用下的web.xml没有1.html对应的url-pattern,也就是没有相对应的servlet,服务器则会运行缺省servlet,由该servlet对应的org.apache.catalina.servlets.DefaultServlet类将1.html静态页面的数据读取出来显示到页面上。
把上述中的代码注释掉,重启tomcat服务器,输入http://localhost:8080 ,将发现页面中的图片将显示不出,也即是因为这个原因。
相关文章:
Java课题笔记~ Servlet编程
1.Servlet编程基础 (1)什么是Servlet Servlet是基于Java语言的Web编程技术,部署在服务器端的Web容器里,获取客户端的访问请求,并根据请求生成响应信息返回给客户端。 创建Servlet的方式,有 如下图:一般创建Servlet都…...
修改IDEA的idea.vmoptions参数导致IDEA无法打开(ReservedCodeCacheSize)
事发原因 Maven导依赖的时候OOM,因此怀疑是内存太小,尝试修改idea.vmoptions的参数,然后发现IDEA重启后打不开了,卸载重装后也无法打开。。。 实际上如果导包爆出OOM的话应该调整下图参数,不过这都是后话了 解决思路…...
P1321 单词覆盖还原
题目描述 一个长度为 l l l 的字符串中被反复贴有 boy 和 girl 两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy 几个 girl? 输入格式 一行被…...
GODOT游戏引擎简介,包含与unity性能对比测试,以及选型建议
GODOT,是一个免费开源的3D引擎。本文以unity作对比,简述两者区别和选型建议。由于是很久以前写的ppt,技术原因视频和部分章节丢失了。建议当做业务参考。 GODOT目前为止遇到3个比较重大的基于,第一个是oprea的合作奖,…...
Add-in Express for Microsoft Office and Delphi Crack
Add-in Express for Microsoft Office and Delphi Crack 适用于Microsoft Office和Delphi VCL的Add-in Express使您能够在几次点击中为Microsoft Office开发专业插件。它生成基于COM的项目,这些项目包含Microsoft Office外接程序或智能标记的所有必要功能࿰…...
opencv基础-34 图像平滑处理-2D 卷积 cv2.filter2D()
2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区…...
webSocket 与传统的 http 有什么优势
webSocket 与传统的 http 有什么优势 当页面中需要观察实时数据的变化(比如聊天、k 线图)时,过去我们往往使用两种方式完成 第一种是短轮询,即客户端每隔一段时间就向服务器发送消息,询问有没有新的数据 第二种是长轮询…...
如何测试Linux磁盘的读写速度
在Linux系统中也有很多命令可以测试硬盘的读写速度指标。以下是几个常用命令(注意:在执行测试命令之前,请务必备份数据以避免数据丢失! 1、dd 命令 首先挂载磁盘 mount /dev/sdb /testdd 命令可用于进行硬盘读写速度测试。 例…...
Spring Data Redis:在Java中操作Redis
目录 一、Spring Data Redis使用方式 1.1 介绍 1.2 配置 1.3 RedisTemplate 二、环境搭建 2.1 导入Spring Data Redis的maven坐标 2.2 配置Redis数据源 2.3 编写配置类,创建RedisTemplate对象 三、操作常见类型数据 3.1 操作字符串类型数据 …...
Android 面试重点之Framework (Handler篇)
近期在网上看到不少Android 开发分享的面试经验,我发现基本每个面经中多多少少都有Framework 底层原理的影子。它也是Android 开发中最重要的一个部分,面试官一般会通过 Framework底层中的一些逻辑原理由浅入深进行提问,来评估应聘者的真实水…...
基于Node.js的后台管理系统的数据表格导出下载
基于Node.js的后台管理系统的数据表格导出下载 今天在工作的时候接触到一个需求,就是现在有一个简单的后台管理系统是基于node.js来实现的,现在需要将其中的一个表格数据下载下来。乍一听还以为这个是一个简单的需求,以为只要简单的一个小时…...
渗透攻击方法:原型链污染
目录 一、什么是原型链 1、原型对象 2、prototype属性 3、原型链 1、显示原型 2、隐式原型 3、原型链 4、constructor属性 二、原型链污染重现 实例 Nodejs沙箱逃逸 1、什么是沙箱(sandbox) 2、vm模块 一、什么是原型链 1、原型对象 JavaS…...
第四章 kernel函数基础篇
cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…...
JVM:运行时数据区域(白话文)
最近有时间在看一本<深入了解Java虚拟机>的书籍,这本书是一个中国人,名叫周志明的人写的。相比于其他翻译过来的技术书籍,这本书还是挺通俗易懂的。先前有和彬哥在聊,他说如果是自己一个人看的话会很枯燥,很难坚…...
Go语言并发编程(千锋教育)
Go语言并发编程(千锋教育) 视频地址:https://www.bilibili.com/video/BV1t541147Bc?p14 作者B站:https://space.bilibili.com/353694001 源代码:https://github.com/rubyhan1314/go_goroutine 1、基本概念 1.1、…...
CSS革命:用Sass/SCSS引领前端创新
目录 前言SCSSSassSass 和 SCSS 的区别 前言 在现代的前端开发中,CSS已成为呈现网页和应用程序样式的核心。然而,原生的CSS语法在大型项目中可能变得混乱、冗长且难以维护。 为了解决这些问题,SCSS(Sass CSS)和Sass&am…...
MAPPO 算法的深度解析与应用和实现
【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明: 来源:36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章,质量有保障&…...
API接口的涉及思路以及部分代码
在现代软件开发中,API(Application Programming Interface)接口扮演了一个至关重要的角色。通过API接口,不同的应用程序、系统或服务之间可以进行数据交换和相互调用,实现功能的扩展和集成。本文将探讨API接口的设计思…...
Stable Diffusion无需代码连接QQ邮箱的方法
Stable Diffusion用户使用场景: 电商商家在产品测试阶段,通过微信社群日常收集用户对产品设计的反馈,包括对产品的修改建议或外观设计等,并将这些反馈上传至集简云小程序。然后,他们使用Stable Diffusion AI工具生成图…...
Excel表格(一)
1.单一栏的宽度和高度设置 2.大标题的跨栏居中 3.让单元格内的文字------自动适应 4.序号递增 5.货币符号 6.日期格式的选择 选到单元格,选中对应的日期格式 7.自动求和的计算 然后在按住回车键即可求出当前行的金额 点击自动求和 8.冻结表格栏 9.排序 1.单栏排序 …...
2026年婚礼背景音乐素材下载网站TOP5:从版权、曲库到实用场景全面评测
引言:为什么婚礼背景音乐素材越来越需要“可商用、可溯源、可快速下载” 2026年,婚礼内容已经不再只是一支婚礼纪录片,而是拆分成婚礼预告片、接亲快剪、仪式短片、First Look、婚礼跟拍花絮、短视频平台竖版成片、婚庆公司案例展示等多个内…...
一线观察:赣州新房装修公司的可靠细节
上个月,有个老朋友找我帮他参谋新房装修的事。赣州章江新区某刚交付的高端盘,精装改毛坯,180平的大户型。他跟我说,前后跑了五六家装修公司,聊完最大的感觉是——云里雾里。报价单看不懂方案,总觉得藏着坑&…...
从碰撞到安全路径:在MATLAB里为你的机械臂规划一条无碰撞轨迹(附完整代码)
七轴机械臂无碰撞轨迹规划实战:从MATLAB基础到高级避障策略 机械臂在复杂环境中的自主运动一直是工业自动化和服务机器人领域的核心挑战。想象一下,当一台七轴机械臂需要在布满障碍物的空间里精准抓取物品时,如何确保它不会撞上周围的工作台、…...
从零到一:vue-print-nb插件在Vue项目中的实战打印方案
1. 为什么选择vue-print-nb插件 在Vue项目中实现打印功能,开发者通常会面临多种选择。传统的window.print()方法虽然简单,但存在明显的局限性:无法精确控制打印区域、难以自定义打印样式、对移动端支持不佳等。这时候,一个专门为V…...
Windows 11 WSL Ubuntu 环境:安装 Hadoop 完整指南
本文详细介绍了在WSL Ubuntu环境下安装Hadoop的完整流程。主要内容包括:1) 环境准备(安装WSL、Ubuntu及必要工具);2) 配置SSH免密登录;3) 下载安装Hadoop 3.3.6并配置环境变量;4) 详细说明Hadoop核心配置文…...
LongWriter应用案例大全:从旅游指南到爱情故事的10,000+字生成示例
LongWriter应用案例大全:从旅游指南到爱情故事的10,000字生成示例 【免费下载链接】LongWriter [ICLR 2025] LongWriter: Unleashing 10,000 Word Generation from Long Context LLMs 项目地址: https://gitcode.com/gh_mirrors/lo/LongWriter LongWriter是一…...
Configor 自动重载功能深度解析:实现配置热更新的终极指南
Configor 自动重载功能深度解析:实现配置热更新的终极指南 【免费下载链接】configor Golang Configuration tool that support YAML, JSON, TOML, Shell Environment 项目地址: https://gitcode.com/gh_mirrors/co/configor Configor 是 Golang 生态系统中一…...
TVA视觉新范式:工业视觉的百年未有之大变局(2)
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
YOLO26优化:TIP2026 FourierSR | FourierSR引入YOLO C3k2:解决感受野局限,实现高效全局特征交互
💡💡💡现有 YOLO C3k2 模块主要基于卷积与跨阶段部分连接,虽能平衡计算与精度,但仍存在以下问题: 感受野受限:堆叠的小核卷积(如 33)感受野有限,难以捕获全局上下文,对尺度变化大或远距离依赖的目标(如小目标、遮挡目标)特征提取能力不足。 特征混合效率低:通…...
训练和微调
训练和微调微调本质上就是在调整(更新)模型的参数。当我们说“调整参数”时,指的是调整神经网络内部数以亿计的权重(Weights)和偏置(Biases)。全量微调(Full Fine-Tuning)…...
