服务器端组件Servlet

发布 | 2024-08-23 | JavaWeb

  • Servlet 是 Java 中用于创建动态 Web 内容的服务器端组件。
  • 它运行在 Web 服务器上,可以响应客户端请求(通常是 HTTP 请求)。
  • Servlet 是 Java EE 标准的一部分,通常用于处理表单提交、动态生成网页等。

Servlet 的生命周期

Servlet 生命周期由以下几个阶段组成:

  1. 加载与实例化:Servlet 容器加载 Servlet 类并创建其实例。
  2. 初始化:调用 init() 方法来初始化 Servlet,仅在 Servlet 实例创建时调用一次。
  3. 处理请求:调用 service() 方法来处理客户端请求,方法内根据请求类型调用 doGet()doPost() 等方法。
  4. 销毁:调用 destroy() 方法,在 Servlet 被卸载或服务器关闭时调用。
public class MyServlet extends HttpServlet {
    public void init() throws ServletException {
        // 初始化代码
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 处理 GET 请求
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 处理 POST 请求
    }

    public void destroy() {
        // 销毁时的清理代码
    }
}

处理 HTTP 请求

通过 HttpServletRequestHttpServletResponse 对象,可以轻松获取请求信息并生成响应内容。

使用 service() 方法处理请求

service() 方法根据请求类型自动分派到 doGet()doPost() 等方法。

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    if (req.getMethod().equals("GET")) {
        // 处理 GET 请求
        resp.getWriter().write("GET success");
    } else if (req.getMethod().equals("POST")) {
        // 处理 POST 请求
        resp.getWriter().write("POST success");
    }
}

使用 doGet()doPost() 方法处理请求

通常通过覆盖 doGet()doPost() 方法来分别处理 GET 或 POST 请求。

处理 GET 请求示例

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    // 设置响应的内容类型
    resp.setContentType("text/html");
    
    // 响应输出内容
    resp.getWriter().write("GET success");
}

处理 POST 请求示例

java复制代码@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    // 获取请求参数
    String param = req.getParameter("param");
    
    // 设置响应的内容类型
    resp.setContentType("text/html");
    
    // 响应输出内容
    resp.getWriter().write("POST success. Received param: " + param);
}

请求转发(Request Forwarding)

请求转发将请求从一个 Servlet 转发到另一个 Servlet 或 JSP 页面进行处理,转发在服务器内部完成,客户端不会察觉到。

示例:请求转发

java复制代码@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    // 设置请求属性
    req.setAttribute("message", "This is a forwarded request.");
    
    // 转发请求到另一个 Servlet 或 JSP 页面
    req.getRequestDispatcher("/targetServlet").forward(req, resp);
}

重定向(Redirect)

重定向是将客户端的请求重定向到另一个 URL,服务器会发送一个响应指示客户端浏览器访问新的 URL。

示例:重定向

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    // 重定向到另一个 URL
    resp.sendRedirect("/newPage.jsp");
}
  • HttpServlet 是处理 HTTP 请求的基础工具,覆盖 service()doGet()doPost() 方法可以满足大部分需求。
  • 请求转发:服务器内部完成,适用于需要在多个组件间共享数据的场景。
  • 重定向:服务器告诉客户端浏览器访问新的 URL,适用于需要跳转到另一个页面的场景。

© 著作权归作者所有

本文由 趣代码Blog 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。

评论关闭