← 返回首页

Java Servlet:Web应用的基石

📂 java ⏱ 2 min 237 words

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());
    }
}

最佳实践

  1. 使用注解配置:@WebServlet替代web.xml
  2. 使用RequestDispatcher:请求转发共享request
  3. 合理使用Session:避免存储大量数据
  4. 设置字符编码:避免乱码问题
  5. 异常处理:统一处理Servlet异常

总结

Servlet是Java Web开发的基础,掌握Servlet的生命周期、请求处理和会话管理,是构建Web应用的重要基础。现代Java Web开发通常使用Spring MVC等框架,但理解Servlet仍然很重要。