当前位置: 首页 > 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次握手的原因就在于,服务器端即女孩子,无法确认客户端即男孩子,是否已经收到了,我也愿意建立连接即我也爱你,这一条最终确认的信息…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...