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

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所示:

当部署并启动包含这个ServletWeb应用后,用户可以通过访问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对象,那么直接获取&#xff0…...

满填充透明背景二维码生成

前几天项目上线的时候发现一个问题:通过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次握手的原因就在于,服务器端即女孩子,无法确认客户端即男孩子,是否已经收到了,我也愿意建立连接即我也爱你,这一条最终确认的信息…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

【机器视觉】单目测距——运动结构恢复

ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛&#xf…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...