Java Servlet
外观
Java Servlet[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Java Servlet 是运行在Web服务器或应用服务器上的Java程序,用于扩展服务器的功能,动态生成Web内容。Servlet是Java EE(现Jakarta EE)规范的核心组件,主要用于处理HTTP请求(如GET、POST)并返回响应(如HTML、JSON)。与传统的CGI(Common Gateway Interface)相比,Servlet具有更高的性能和可移植性,因为它们在服务器启动时加载并常驻内存,无需为每个请求创建新进程。
核心特点[编辑 | 编辑源代码]
- 平台无关性:基于Java编写,可在任何支持Java的服务器上运行。
- 高效性:多线程处理请求,资源消耗低于CGI。
- 生命周期管理:通过
init()
、service()
、destroy()
方法控制。 - 集成性:与JSP、JDBC等技术无缝协作。
生命周期[编辑 | 编辑源代码]
Servlet生命周期由容器(如Tomcat)管理,分为三个阶段:
1. 初始化:容器调用init()
方法,加载配置(如@WebServlet
注解或web.xml
)。
2. 请求处理:对每个请求,容器调用service()
方法,后者根据请求类型(GET/POST)分发给doGet()
或doPost()
。
3. 销毁:容器关闭时调用destroy()
释放资源。
代码示例[编辑 | 编辑源代码]
以下是一个简单的Servlet实现,返回"Hello World":
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.*;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello World!</h1>");
out.println("</body></html>");
}
}
输入与输出[编辑 | 编辑源代码]
- 请求:用户访问
http://localhost:8080/your-app/hello
- 响应:浏览器显示HTML页面,标题为"Hello World!"。
实际应用场景[编辑 | 编辑源代码]
用户登录系统[编辑 | 编辑源代码]
Servlet常与HTML表单结合处理用户输入。例如,处理登录请求:
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("admin".equals(username) && "1234".equals(password)) {
response.sendRedirect("welcome.jsp");
} else {
response.sendRedirect("error.html");
}
}
}
配合JSP使用[编辑 | 编辑源代码]
Servlet处理逻辑,JSP负责视图渲染,遵循MVC模式:
高级特性[编辑 | 编辑源代码]
过滤器(Filter)[编辑 | 编辑源代码]
在请求到达Servlet前预处理数据(如日志记录、权限检查):
@WebFilter("/*")
public class LogFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("Request URI: " + ((HttpServletRequest)request).getRequestURI());
chain.doFilter(request, response); // 传递给下一个过滤器或Servlet
}
}
异步处理[编辑 | 编辑源代码]
处理长时间任务时不阻塞线程:
@WebServlet(urlPatterns="/async", asyncSupported=true)
public class AsyncServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
AsyncContext asyncCtx = request.startAsync();
asyncCtx.start(() -> {
// 模拟耗时操作
try { Thread.sleep(5000); } catch (InterruptedException e) {}
asyncCtx.getResponse().getWriter().write("Async Complete");
asyncCtx.complete();
});
}
}
数学公式示例[编辑 | 编辑源代码]
Servlet吞吐量计算(假设每秒请求数为,平均处理时间为秒):
总结[编辑 | 编辑源代码]
Java Servlet是构建动态Web应用的基石,适合从简单页面到复杂企业级系统。初学者应掌握生命周期和HTTP方法处理,进阶用户可探索过滤器、异步处理等高级特性。