什么是 Servlet
要编写一个 Servlet
,那么我们要清楚什么是 Servlet
?
它是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层
。
这样的话,它的主要功能就是读取用户的交互并进行处理(比如从数据库查询数据等),然后动态的将 处理好的 HTML
字符串发送给用户浏览器进行渲染。
生命周期
一个 Servlet
一般会经历以下四个步骤:
- 1.实例化(使用构造方法创建对象)
- 2.初始化 执行init方法
- 3.服务 执行service方法
- 4.销毁 执行destroy方法
具体内容看下面代码中的注释
具体实现
这里复制代码的小伙伴需要注意一下:直接复制代码很有可能会直接报错,需要改一下
将代码开头中的 package
语句以及 import
语句中的首个单词需要和 HelloServlet.java
中的一样,但是 java.io
不用改
比如:
我的 HelloServlet.java
是这样的:
package com.example.demo1;
import java.io.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
我的 package
语句一模一样,import
后的首个单词 jakarta
和新建的 HelloServlet.java
保持的一致
// src/java/com.xxx.xxx.TableServlet.java
package com.example.demo1;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "tableServlet", value = "/table-servlet")
public class TableServlet extends HttpServlet {
private String[][] data;
// 生命周期方法:当 Servlet 第一次被创建对象时执行该方法
// 该方法在整个生命周期中只执行一次
public void init() {
data = new String[][]{
{"A1", "B1"},
{"A2", "B2"}
};
}
// 生命周期方法:对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<table border='1'>");
for (int i = 0; i < data.length; i++) {
out.println("<tr>");
for (int j = 0; j < data[i].length; j++) {
out.println("<td>" + data[i][j] + "</td>");
}
out.println("</tr>");
}
out.println("</table>");
out.println("</body></html>");
}
//生命周期方法:当 Servlet 被销毁时执行该方法
public void destroy() {
}
}
更改 index.jsp
使得首页使用 a 元素跳转到使用 Servlet 编写的页面
// webapp/index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %></h1>
<a href="hello-servlet">Hello Servlet</a>
<a href="table-servlet">Table Servlet</a>
</body>
</html>
实现效果