当前位置: 首页 > 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 技术。

http://www.lryc.cn/news/453041.html

相关文章:

  • 【Router】路由功能之IP过滤(IP Filter)功能(基于端口)介绍及实现
  • 数据结构_2.2、顺序表插入删除查找
  • 嵌入式C语言自我修养:编译链接
  • Mac制作Linux操作系统启动盘
  • PHP语言发展历程
  • Notepad++ 之 AndroidLogger插件
  • 开源2+1链动模式AI智能名片O2O商城小程序源码:线下店立体连接的超强助力器
  • 我为什么决定关闭ChatGPT的记忆功能?
  • 如何使用ssm实现中学生课后服务的信息管理与推荐+vue
  • 【分别为微服务云原生】9分钟ActiveMQ延时消息队列:定时任务的革命与Quartz的较量
  • 泛型编程--模板【C++提升】(特化、类属、参数包的展开、static、模板机制、重载......你想知道的全都有)
  • 安卓使用memtester进行内存压力测试
  • Dave Cheney: Go语言之禅
  • SpringMVC源码-AbstractUrlHandlerMapping处理器映射器将实现Controller接口的方式定义的路径存储进去
  • 满填充透明背景二维码生成
  • Python | Leetcode Python题解之第452题用最少数量的箭引爆气球
  • 代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作删除二叉搜索树中的节点修剪二叉搜索树
  • 使用Apifox创建接口文档,部署第一个简单的基于Vue+Axios的前端项目
  • TCP的第三次握手没有回复,会出现哪些问题现象
  • 【工具】arxiv_latex_cleaner 去除latex注释
  • macOS开发环境配置与应用开发
  • 15分钟学 Python :编程工具 Idea 和 vscode 中配置 Python ( 补充 )
  • MyBatis 如何实现延迟加载?深度探讨 MyBatis 的延迟加载:如何优化数据访问效率
  • springboot系列--web相关知识探索三
  • AI冲击下的编程职业未来:你缺的不是技术,而是跨学科思维!
  • 是否是 2 的幂次方
  • 音视频入门
  • C++随心记 续一
  • 消息中间件:RabbitMQ
  • sql-labs:42~65