Servlet

发布于:2025-06-20 ⋅ 阅读:(12) ⋅ 点赞:(0)

Servlet 是运行在 Web 服务器或应用服务器上的 Java 程序,作为 Web 浏览器或其他 HTTP 客户端与服务器端应用(如数据库)之间的中间层。它的主要作用是接收客户端请求、处理业务逻辑,并将处理结果以网页形式动态返回给客户端。

使用 Servlet 可以实现以下功能:

  • 接收网页表单提交的用户输入;
  • 展示来自数据库或其他数据源的内容;
  • 动态生成 HTML 页面响应用户请求。

Servlet 是 Java EE(现 Jakarta EE)开发中最核心的技术之一,对于理解 Web 应用的请求响应流程、服务器端逻辑处理等具有重要意义。

项目地址:https://download.csdn.net/download/m1154619573/90943348****

创建和使用

首先新建一个项目,按照下面的选项配置项目。然后一直点就可以了。

目录详解

创建完成后,项目会自动生成一系列目录。我们重点关注 src 目录下的内容。

.idea.mvn 是开发工具自动生成的配置目录。

我们主要编写的程序代码应放在:src/main/java/org/example/demo 路径下。

配置 Servlet 路由

我们创建了一个名为 IndexServlet 的类,用于处理客户端发送的 GET 请求。该类位于 com.example.demo12 包下,并继承了 HttpServlet。通过 @WebServlet 注解,我们将该 Servlet 映射到路径 /index-servlet,使得当用户访问该路径时就会触发对应的处理逻辑。在 doGet() 方法中,首先通过 response.setContentType("text/html")设置响应类型为 HTML,然后通过 PrintWriter 输出一段简单的 HTML 页面。页面中显示了“GET 请求处理成功”的提示信息,并尝试从请求中获取名为 id 的参数。如果该参数存在,则将其值显示出来;否则提示“未收到参数”。

测试路由

完成 Servlet 编写后,我们可以通过 Tomcat 启动整个 Web 项目来进行测试。启动服务后,打开浏览器访问项目主页,可以看到我们自定义的 indexServlet 链接。

点击该链接后,浏览器将跳转到我们先前创建的 IndexServlet 类所映射的路由 /index-servlet,并触发对应的 doGet() 方法,页面会显示“GET 请求处理成功”等内容。

通过这种方式,我们可以验证 Servlet 是否配置正确、路由是否生效,以及参数是否能成功接收与显示。

生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 初始化后调用 init () 方法。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 销毁前调用 destroy() 方法。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

初始化阶段

当客户端首次请求某个 Servlet 时,Servlet 容器会首先检查内存中是否已经存在该 Servlet 的实例对象:

  • 如果已存在,则直接复用该对象;
  • 如果不存在,则容器会先创建该 Servlet 的实例,然后调用其 init() 方法进行初始化操作。

需要注意的是:
init() 方法在 Servlet 的生命周期中只会被调用一次,它通常用于加载配置、初始化资源等准备工作。

运行阶段

这是 Servlet 生命周期中最核心的阶段:

  • 每当客户端发起请求,Servlet 容器都会创建两个对象:
    • HttpServletRequest:封装客户端请求信息;
    • HttpServletResponse:用于生成响应结果。
  • 然后,这两个对象会作为参数传递给 Servlet 的 service() 方法。

service() 方法会根据请求的类型(GET、POST 等)自动分发调用相应的 doGet()doPost() 等方法。

需要注意的是:
service() 方法在 Servlet 生命周期中可以被调用多次,即每一次请求都会触发一次 service() 的执行,并伴随新建的请求和响应对象。

销毁阶段

当服务器关闭或 Web 应用被移除(卸载)时,Servlet 对象将被销毁:

  • 在销毁之前,Servlet 容器会调用该对象的 destroy() 方法,用于释放资源,如关闭数据库连接、终止线程等。

和初始化类似,destroy() 方法在整个生命周期中也只会被调用一次

处理http请求

在 Servlet 中,HTTP 请求的处理主要依赖两个重要的接口:HttpServletRequestHttpServletResponse,它们分别用于接收请求和发送响应。

HttpServletRequest接口

该接口是 ServletRequest 的子接口,封装了客户端发送的所有请求信息,如参数、请求头、请求方式等。

常用方法:

  • getParameter(String name)
    获取指定名称的请求参数(单个值),返回类型为 String
    例如:request.getParameter("username")
  • getParameterValues(String name)
    获取指定名称的参数对应的多个值,返回类型为 String[]
    适用于如复选框等同名参数传多个值的情况。
    例如:request.getParameterValues("hobby")
HttpServletResponse接口

该接口是 ServletResponse 的子接口,用于设置服务器响应的内容、格式、编码等信息。

常用方法:

  • setCharacterEncoding(String charset)
    设置响应的编码格式,常用于防止中文乱码。
    例如:response.setCharacterEncoding("UTF-8")
  • setContentType(String type)
    设置响应的 MIME 类型,常与编码一起设置,如:
    response.setContentType("text/html; charset=UTF-8")
  • getWriter()
    获取一个字符输出流 PrintWriter,用于将响应内容输出到客户端(如浏览器)。
PrintWriter out = response.getWriter();
out.println("<h1>Hello Servlet</h1>");

PrintWriter 可以输出字符串类型的内容,是最常用的响应输出方式之一。


网站公告

今日签到

点亮在社区的每一天
去签到