Servlet 是Java用于创建动态Web应用的服务器端技术。本教程将介绍Servlet的基础知识、开发步骤和实际应用示例。


目录

  1. Servlet 简介
  2. Servlet 生命周期
  3. 开发环境搭建
  4. 创建基本Servlet
  5. 处理HTTP请求
  6. 表单数据处理
  7. 参考资料

1. Servlet 简介

Servlet 是运行在Web服务器上的Java程序,用于处理客户端请求并生成动态响应。常见用途包括:

  • 处理表单提交。
  • 生成动态HTML页面。
  • 与数据库交互。

Servlet 需要运行在Servlet容器中(如Apache Tomcat)。


2. Servlet 生命周期

Servlet 的生命周期由容器管理,包含以下阶段:

  1. 加载:容器加载Servlet类。
  2. 实例化:创建Servlet对象。
  3. 初始化:调用 init() 方法,进行初始化。
  4. 服务:调用 service() 方法处理请求,通常分派到 doGet()doPost()
  5. 销毁:调用 destroy() 方法,释放资源。

示例:

public void init() { System.out.println("Servlet 初始化"); }
public void destroy() { System.out.println("Servlet 销毁"); }

3. 开发环境搭建

所需工具

  • JDK:Java开发工具包(推荐JDK 8或更高)。
  • Tomcat:Servlet容器(下载地址:https://tomcat.apache.org/)。
  • IDE:Eclipse、IntelliJ IDEA 或 VS Code(可选)。

配置步骤

  1. 安装JDK并设置 JAVA_HOME 环境变量。
  2. 下载并解压Tomcat,启动:bin/startup.sh(Unix)或 bin/startup.bat(Windows)。
  3. 验证Tomcat:访问 http://localhost:8080,看到欢迎页面即成功。

项目结构

myapp/
├── WEB-INF/
│   ├── classes/         # 编译后的.class文件
│   └── web.xml         # 部署描述文件
└── index.html          # 静态页面

4. 创建基本Servlet

示例代码:SimpleServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SimpleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>Hello, Servlet World!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

配置 web.xml

<web-app>
    <servlet>
        <servlet-name>SimpleServlet</servlet-name>
        <servlet-class>SimpleServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SimpleServlet</servlet-name>
        <url-pattern>/simple</url-pattern>
    </servlet-mapping>
</web-app>

部署与运行

  1. 编译:javac -cp /path/to/tomcat/lib/servlet-api.jar SimpleServlet.java
  2. .class 文件放入 WEB-INF/classes/
  3. myapp 放入Tomcat的 webapps 目录。
  4. 访问:http://localhost:8080/myapp/simple

5. 处理HTTP请求

GET 请求

doGet() 处理GET请求:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String query = request.getQueryString();
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<h1>GET 请求</h1>");
    out.println("<p>查询字符串: " + (query != null ? query : "无") + "</p>");
}

访问:http://localhost:8080/myapp/simple?name=Alice

POST 请求

doPost() 处理POST请求:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<h1>POST 请求已接收</h1>");
}

6. 表单数据处理

HTML表单:index.html

<!DOCTYPE html>
<html>
<body>
    <form method="POST" action="/myapp/form">
        姓名: <input type="text" name="name"><br>
        年龄: <input type="text" name="age"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

Servlet:FormServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FormServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String name = request.getParameter("name");
        String age = request.getParameter("age");

        out.println("<html><body>");
        out.println("<h1>表单数据</h1>");
        out.println("<p>姓名: " + name + "</p>");
        out.println("<p>年龄: " + age + "</p>");
        out.println("</body></html>");
    }
}

配置 web.xml

<servlet>
    <servlet-name>FormServlet</servlet-name>
    <servlet-class>FormServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FormServlet</servlet-name>
    <url-pattern>/form</url-pattern>
</servlet-mapping>

访问:http://localhost:8080/myapp/index.html,提交表单后显示结果。


7. 参考资料

出站链接

其他资源

  • 《Head First Servlets and JSP》 – Servlet入门书籍。
  • X社区:搜索 #JavaServlet 获取示例。

这篇教程提供了Servlet的基础入门,包括环境搭建和代码示例。如果您需要更深入的内容(如注解配置、会话管理或数据库连接),请告诉我!如果您实际上想要Perl相关内容(如CGI),也请澄清!