import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/student/add")
public class Test01 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String name = req.getParameter("name");
Integer age = Integer.valueOf(req.getParameter("age"));
ServletContext context = getServletContext();
context.setAttribute("name", name);
context.setAttribute("age", age);
resp.sendRedirect(req.getContextPath() + "/student/list");
System.out.println("添加成功!");
}
}
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Spliterator;
@WebServlet("/student/list")
public class Test02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = getServletContext();
String name = (String) context.getAttribute("name");
Integer age = (Integer) context.getAttribute("age");
resp.setContentType("text/plain");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().println("name: " + name + ", age: " + age);
}
}
定义了两个 Servlet 类:Test01
和 Test02
。
Test01
类继承自 HttpServlet
类,并使用了 @WebServlet
注解,指定了该 Servlet 的 URL 模式为 /student/add
。在 doPost
方法中,代码首先设置了请求的字符编码为 UTF-8
,然后从请求参数中获取了 name
和 age
的值。接下来,代码获取了一个 ServletContext
对象,并将获取到的 name
和 age
值作为属性存储在该对象中。最后,代码使用 sendRedirect
方法将客户端重定向到 /student/list
路径。
Test02
类也继承自 HttpServlet
类,并使用了 @WebServlet
注解,指定了该 Servlet 的 URL 模式为 /student/list
。在 doGet
方法中,代码首先获取了一个 ServletContext
对象,然后从该对象中获取了两个属性:name
和 age
。接下来,代码设置了响应的内容类型和字符编码,并使用 getWriter
方法获取了一个 PrintWriter
对象。最后,代码使用该对象的 println
方法向客户端发送了一条文本消息,包含了从 ServletContext
对象中获取的 name
和 age
属性的值。
这两个 Servlet 类可以协同工作:当客户端向 /student/add
路径发送 POST 请求时,服务器会调用 Test01#doPost()
方法处理该请求;当客户端被重定向到 /student/list
路径时,服务器会调用 Test02#doGet()
方法处理该请求。