一、实验目的、要求
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 技术。