Java Servlet:Web应用的基石
Java Servlet:Web应用的基石
概述
Servlet是Java Web应用的核心组件,它运行在Web服务器上,处理HTTP请求并生成响应。理解Servlet是学习Java Web开发的基础。
1. Servlet生命周期
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/hello")
public class HelloServlet extends GenericServlet {
@Override
public void init() throws ServletException {
System.out.println("Servlet初始化");
}
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("处理请求");
res.getWriter().write("Hello World!");
}
@Override
public void destroy() {
System.out.println("Servlet销毁");
}
}
2. HttpServlet处理HTTP请求
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/user")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("<h1>Hello, " + name + "</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name = req.getParameter("name");
String email = req.getParameter("email");
System.out.println("注册用户: " + name + ", " + email);
resp.sendRedirect("/success.jsp");
}
}
3. 请求转发与重定向
@WebServlet("/forward")
public class ForwardServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setAttribute("message", "Hello from Forward");
RequestDispatcher dispatcher = req.getRequestDispatcher("/target.jsp");
dispatcher.forward(req, resp);
}
}
@WebServlet("/redirect")
public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.sendRedirect("/target.jsp");
}
}
4. 会话管理
@WebServlet("/session")
public class SessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
session.setAttribute("username", "admin");
session.setMaxInactiveInterval(30 * 60);
String username = (String) session.getAttribute("username");
resp.getWriter().write("Session ID: " + session.getId());
}
}
最佳实践
- 使用注解配置:@WebServlet替代web.xml
- 使用RequestDispatcher:请求转发共享request
- 合理使用Session:避免存储大量数据
- 设置字符编码:避免乱码问题
- 异常处理:统一处理Servlet异常
总结
Servlet是Java Web开发的基础,掌握Servlet的生命周期、请求处理和会话管理,是构建Web应用的重要基础。现代Java Web开发通常使用Spring MVC等框架,但理解Servlet仍然很重要。