Servlet的生命周期及用户提交表单页面的实现(实验报告)
一、实验目的、要求
1. 掌握Servlet的定义,即Servlet是运行在服务器端的Java程序,用于扩展服务器的功能。
2. 学习和掌握在开发环境中搭建Servlet应用所需的工具,如Tomcat服务器、IDEA等。
二、实验内容
根据本章所学知识,实验内容具体包括一下两部分:
1.请按照以下要求创建Servlet01类,要求如下:
(1)在Web项目中定义一个HelloWorldServlet类,其中定义了 init()、destroy()方法。
(2)在service()、init()、destroy()三个方法中分别添加输出语句。
(3)使用@WebServlet注解配置Servlet02的映射信息,并在tomcat服务器中部署该Web项目。
(4)启动Tomcat服务器,使用浏览器访问Servlet01映射的url地址,观察控制台输出内容。
2.根据本章所学知识,实现用户提交表单页面的编写,并在IDEA控制台打印用户信息,表单页面包含用户名、密码以及爱好三部分。
三、使用仪器
1、硬件:PC电脑一台,网络正常;
2、配置:Windows10系统,内存8G及以上,硬盘500G及以上
3、软件:IntelliJ IDEA 2024.1.6、浏览器
四、实验步骤
1.实验一
(1)创建javaweb项目:在src文件夹下创建TestServlet01、TestServlet02文件。
(2)创建TestServlet01.java文件,在该文件中编写代码,包含基本的Servlet框架,包括处理POST和GET请求的方法。主要代码如课本P76页文件4-2所示:
当部署并启动包含这个Servlet的Web应用后,用户可以通过发送HTTP POST或GET请求到URL /TestServlet01 来触发这个Servlet的相应方法,此时客户端会收到响应 "Hello Servlet"。
(3)创建TestServlet02.java文件,在该文件中编写代码,实现Servlet配置。通过继承 GenericServlet 类和使用 @WebServlet 注解来创建一个简单的Servlet,Servlet的生命周期大致可以分为3个阶段,通过调用 init 方法进行初始化,然后可以接收和处理请求,直到容器决定销毁这个Servlet,并调用 destroy 方法。主要代码如79页文件4-3所示:
当部署并启动包含这个Servlet的Web应用后,用户可以通过访问URL /TestServlet02 来触发这个Servlet的 service 方法,此时控制台会打印 "Hello World"。当Servlet被实例化后,容器(如Tomcat)会调用它来初始化Servlet,这个方法只被调用一次,输出打印 "init method is called" 到控制台;当Servlet即将被容器销毁前调用,输出打印 "destroy method is called" 到控制台。
实验二
(1)创建form的html文件,在该文件中编写实现代码,完成页面中制作导航栏的任务,主要代码如课本P97页文件4-21所示。
2)创建RequestParamsServlet的java文件,在该文件中编写实现代码,主要代码如课本P97页文件4-22所示。
在IDEA中启动Tomcat服务器,在浏览器输入http:localhost:8080/chapter04/form.html访问html文件,填写表单信息。单击“提交”按钮,在IDEA的控制台打印出用户登录信息。
五、实验截图
创建文件:
运行显示出“hello sevrlet”等信息:
创建form表单:
六、实验过程中出现的问题
控制台上没有显示用户信息:StringBuffer 只是将字符串存储在内存中,只有在明确地将其内容打印出来时,才会显示在控制台。出现乱码:在Web开发中,确保请求和响应的字符编码十分重要,以避免出现乱码问题。输出的信息与勾选出来的不一致:确保在HTML表单中,爱好的复选框名称是hobby,并且每个复选框的value属性设置正确。
七、实验心得
Servlet 是 Java EE的一部分,用于在服务器端处理请求和生成动态内容。它是一种运行在服务器上的 Java 类,能够处理客户端(通常是浏览器)发送的请求,并生成响应。Servlet 的生命周期由三个主要阶段组成——加载和实例化:Servlet 容器加载 Servlet 类并创建其实例;初始化:调用 init() 方法进行初始化;请求处理:调用 doGet() 或 doPost()方法处理请求;销毁:调用 `destroy()` 方法进行清理。
HttpServletRequest表示客户端请求的对象,提供了获取请求参数、请求头、请求方法等功能。HttpServletResponse表示服务器响应的对象,允许设置响应状态码、响应头和响应内容。
设置字符编码时使用 `req.setCharacterEncoding("utf-8")` 设置请求的字符编码,以确保正确处理用户输入的非ASCII字符(如中文)。使用 `resp.setCharacterEncoding("utf-8")` 设置响应的字符编码,以确保客户端正确显示响应内容。使用“req.getParameter("paramName")”获取单个请求参数。使用req.getParameterValues("paramName")获取多个请求参数(如复选框)。
在开发和调试过程中,可以使用 System.out.println()`输出信息到控制台。注意,控制台输出通常在服务器的日志中查看,而不是直接在 IDE 控制台中。
确保请求和响应的字符编码一致,避免出现乱码。确保表单的 `action` 属性正确指向 Servlet 的 URL,并且请求方法(GET/POST)与 Servlet 中的方法匹配。
确保在构建字符串后,使用 System.out.println()或 out.println()输出内容。
在表单提交前进行前端验证,确保用户输入有效,减少服务器端的处理负担。:保持代码结构清晰,分离业务逻辑和视图层,便于维护和扩展。
Servlet 是构建动态Web应用程序的基础,理解其工作原理和常见问题对于开发高效、可靠的Web应用至关重要。通过不断实践和调试,可以更深入地掌握 Servlet 技术。
相关文章:

Servlet的生命周期及用户提交表单页面的实现(实验报告)
一、实验目的、要求 1. 掌握Servlet的定义,即Servlet是运行在服务器端的Java程序,用于扩展服务器的功能。 2. 学习和掌握在开发环境中搭建Servlet应用所需的工具,如Tomcat服务器、IDEA等。 二、实验内容 根据本章所学知识,实验…...
【Router】路由功能之IP过滤(IP Filter)功能(基于端口)介绍及实现
IP过滤(IP Filter) IP Filter是一种通过对网络数据包中的 IP 地址进行分析和筛选,以实现对网络流量的控制和管理的技术。 IP过滤(IP Filter)作用 安全防护 可以阻止来自特定 IP 地址或 IP 地址范围的恶意攻击、非法访问等,增强网络的安全性。 流量管理 根据不同的 IP …...

数据结构_2.2、顺序表插入删除查找
1、线性表的顺序存储表示定义: 线性表:是具有相同数据类型的n (n≥0)个数据元素的有限序列 顺序表:用顺序存储的方式实现线性表 顺序存储:把逻辑上相邻的元素存储在物理 位置上也相邻的存储单元中&#…...

嵌入式C语言自我修养:编译链接
源文件生成可执行文件的过程? 源文件经过预处理、编译、汇编、链接生成一个可执行的目标文件。 编译器驱动程序,包括预处理器、编译器、汇编器和链接器。Linux用户可以调用GCC驱动程序来完成整个编译流程。 使用GCC驱动程序将示例程序从ASCII码源文件转换…...

Mac制作Linux操作系统启动盘
前期准备 一个 Mac 电脑 一个 U 盘(8GB 以上) 下载好 Linux 系统镜像(iso 文件) 具体步骤 挂载 U 盘 解挂 U 盘 写系统镜像到 U 盘 完成 一、挂载 U 盘 首先插入 U 盘,打开终端输入下面的命令查看 U 盘是否已经 m…...
PHP语言发展历程
PHP是一种开源的服务器端脚本语言,主要用于Web开发,最初由Rasmus Lerdorf在1994年创建。PHP的发展历程如下: PHP的起源:1994年,Rasmus Lerdorf创建了PHP的第一个版本,最初是一套用于跟踪他个人简历访问的C…...

Notepad++ 之 AndroidLogger插件
背景 最近一段时间在分析Android log 定位问题,Notepad 之前用的比较少,现在看log觉得确实好用,美中不足的是 看Android log的时候不像 logcat -v color 可以区分不同等级的颜色,于是调研了一下,发现大部分都是使用An…...

开源2+1链动模式AI智能名片O2O商城小程序源码:线下店立体连接的超强助力器
摘要:本文将为您揭示线下店立体连接的重大意义,您知道吗?线上越火,线下就得越深入经营。现代门店可不再只是卖东西的地儿,还得连接KOC呢!咱们来看看门店要做的那些超重要的事儿,还有开源21链动模…...

我为什么决定关闭ChatGPT的记忆功能?
你好,我是三桥君 几个月前,ChatGPT宣布即将推出一项名为“记忆功能”的新特性,英文名叫memory。 这个功能听起来相当吸引人,宣传口号是让GPT更加了解用户,仿佛是要为我们每个人量身打造一个专属的AI助手。 在记忆功…...

如何使用ssm实现中学生课后服务的信息管理与推荐+vue
TOC ssm766中学生课后服务的信息管理与推荐vue 第一章 绪论 1.1 选题背景 目前整个社会发展的速度,严重依赖于互联网,如果没有了互联网的存在,市场可能会一蹶不振,严重影响经济的发展水平,影响人们的生活质量。计算…...
【分别为微服务云原生】9分钟ActiveMQ延时消息队列:定时任务的革命与Quartz的较量
ActiveMQ延时消息队列:定时任务的革命与Quartz的较量 摘要: 在现代的消息驱动架构中,ActiveMQ的延迟消息队列功能为定时任务提供了一种新的解决方案。本文将详细介绍ActiveMQ延迟消息队列的功能、应用场景,并与Quartz定时任务进行…...

泛型编程--模板【C++提升】(特化、类属、参数包的展开、static、模板机制、重载......你想知道的全都有)
更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: C系列语法知识_Stark、的博客-CSDN博客 其它专栏: 数据结构与算法_Stark、的博客-CSDN博客 C系列项目实战_Stark、的博客-CSDN博客 座右铭:梦…...

安卓使用memtester进行内存压力测试
memteser简介 memtester 是一个用于测试内存可靠性的工具。 它可以对计算机的内存进行压力测试,以检测内存中的错误,例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行,并且可以针对不同大小的内存进行测试。 下载源码 m…...
Dave Cheney: Go语言之禅
本篇内容是根据2020年3月份The Zen of Go音频录制内容的整理与翻译, Dave Cheney 讲述了 Go 之禅(编写简单、可读、可维护的 Go 代码的十个工程价值)。是什么让 Go 代码变得优秀?编写 Go 代码时,我们应该牢记哪些指导原则&#x…...

SpringMVC源码-AbstractUrlHandlerMapping处理器映射器将实现Controller接口的方式定义的路径存储进去
DispatcherServlet的initStrategies方法用来初始化SpringMVC的九大内置组件 initStrategies protected void initStrategies(ApplicationContext context) {// 初始化 MultipartResolver:主要用来处理文件上传.如果定义过当前类型的bean对象,那么直接获取࿰…...

满填充透明背景二维码生成
前几天项目上线的时候发现一个问题:通过Hutool工具包生成的二维码在内容较少时无法填满(Margin 已设置为 0)给定大小的图片。因此导致前端在显示二维码时样式异常。 从图片中我们可以看到,相同大小的图片,留白内容是不一样的。其中上半部分…...

Python | Leetcode Python题解之第452题用最少数量的箭引爆气球
题目: 题解: class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if not points:return 0points.sort(keylambda balloon: balloon[1])pos points[0][1]ans 1for balloon in points:if balloon[0] > pos:pos balloo…...

代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作删除二叉搜索树中的节点修剪二叉搜索树
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树 主要学习内容: 二叉搜索树的插入删除操作 701.二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作 - 力扣(LeetCode&…...

使用Apifox创建接口文档,部署第一个简单的基于Vue+Axios的前端项目
前言 在当今软件开发的过程中,接口文档的创建至关重要,它不仅能够帮助开发人员更好地理解系统架构,还能确保前后端开发的有效协同。Apifox作为一款集API文档管理、接口调试、Mock数据模拟为一体的工具,能够大幅度提高开发效率。在…...

TCP的第三次握手没有回复,会出现哪些问题现象
从三次握手的一开始来讲,刚开始客户端和服务器都处于close状态 这里不能是2次握手的原因就在于,服务器端即女孩子,无法确认客户端即男孩子,是否已经收到了,我也愿意建立连接即我也爱你,这一条最终确认的信息…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...