什么是Servlet?
Servlet是Java EE(现称Jakarta EE)中的一个组件,通常用于创建动态Web内容。Servlet是运行在Web服务器上的Java程序,它处理客户端的请求并生成响应。Servlet的核心功能是处理HTTP请求和响应。下面是一个servlet例子:
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// 初始化任务
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理GET请求
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Example Servlet</h1>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理POST请求
}
@Override
public void destroy() {
// 清理任务
}
}
一个稍微完整的servlet例子:
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(urlPatterns = {"/hello", "/welcome"})
public class MultiURLServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getServletPath();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if ("/hello".equals(path)) {
out.println("<h1>Hello, World!</h1>");
} else if ("/welcome".equals(path)) {
out.println("<h1>Welcome!</h1>");
} else {
out.println("<h1>Unknown path: " + path + "</h1>");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); // For simplicity, we're handling POST the same way as GET
}
}
什么是Servlet容器?
Servlet容器(也称为Servlet引擎或Web容器)是Web服务器的一部分,负责管理Servlet的生命周期和映射请求到相应的Servlet。Servlet容器提供了运行Servlet所需的环境,包括:
- Servlet生命周期管理:负责实例化、初始化、调用和销毁Servlet对象。
- 请求与响应处理:接收客户端请求,将其传递给相应的Servlet处理,并将响应返回给客户端。
- 并发处理:能够处理多个客户端的并发请求,保证每个请求在独立的线程中运行。
- 会话管理:支持HTTP会话管理,允许在多个请求之间保持用户的状态信息。
- 安全性管理:提供用户认证、授权和加密支持。
常见的Servlet容器包括Tomcat、Jetty、GlassFish等。