实验三 Servlet入门
一、实验目的
1.学会 Servlet的创建、配置及运行方法;
2.掌握Servlet的生命周期。
二、实验内容
1.在IDE中编写一个Servlet类TestServlet,重写init()方法,service()(或者doGet(),doPost())方法,destroy()方法;
2.正确配置该Servlet类TestServlet;
3.启动Tomcat服务器,通过浏览器访问该Servlet类TestServlet,观察init()方法,service()(或者doGet(),doPost())方法,destroy()方法的执行顺序,执行的次数以及执行的时机,示例如下图所示:
4.编写一个类HelloServlet继承于HttpServlet,分别重写doGet(),doPost()方法,编写一个html页面form.html,在该页面提供两个个按钮分别按照get和post方式访问该HelloServlet,观察两种方法调用的不同,如下图所示:
三、实验结果(源代码、运行截图)
TestServlet.java
package com.xxx.servlet;import javax.servlet.*;import javax.servlet.annotation.WebServlet;import javax.servlet.http.*;import java.io.IOException;import java.io.PrintWriter;@WebServlet("/ser01")public class TestServlet extends HttpServlet { // 重写 init() 方法 @Override public void init() throws ServletException { // 初始化代码 System.out.println("TestServlet 初始化"); // 可以在这里加载资源或执行其他初始化操作 } // 重写 service() 方法(或者单独重写 doGet() 和 doPost()) // 注意:通常我们不会直接重写 service() 方法,除非需要处理所有类型的请求 @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 服务端代码 System.out.println("TestServlet service() 方法被调用"); // 根据请求类型调用 doGet 或 doPost super.service(req, resp); // 调用父类的 service 方法,它会根据请求方法调用 doGet 或 doPost } // 重写 destroy() 方法 @Override public void destroy() { // 销毁代码 System.out.println("TestServlet 销毁"); // 可以在这里释放资源或执行其他清理操作 }}
Server.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.xxx.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping></web-app>
HelloServlet.java
package com.xxx.servlet;import javax.servlet.*;import javax.servlet.annotation.WebServlet;import javax.servlet.http.*;import java.io.IOException;import java.io.PrintWriter;//@WebServlet("/HelloServlet")public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp, "GET"); // 处理 GET 请求 System.out.println("HelloServlet doGet() 方法被调用"); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html><body>"); out.println("<h1>HelloServlet GET 请求处理</h1>"); out.println("</body></html>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { processRequest(req, resp, "POST"); System.out.println("HelloServlet doPost() 方法被调用"); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html><body>"); out.println("<h1>HelloServlet POST 请求处理</h1>"); out.println("</body></html>"); } private void processRequest(HttpServletRequest req, HttpServletResponse resp, String method) throws ServletException, IOException { resp.setContentType("text/html;charset=UTF-8"); }}
Test.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Form for GET and POST Requests</title></head><body><h2></h2><form action="HelloServlet" method="post"> <label for="studentIdPost">学号:</label> <input type="text" id="studentIdPost" name="studentIPost" required><br> <label for="namePost">姓名:</label> <input type="text" id="namePost" name="namePost" required><br> <input type="submit" value="post"></form><form action="HelloServlet" method="get"> <label for="studentIdGet">学号:</label> <input type="text" id="studentIdGet" name="studentIdGet" required><br> <label for="nameGet">姓名:</label> <input type="text" id="nameGet" name="nameGet" required><br> <input type="submit" value="get"></form></body></html>