Java Servlet 教程

Java Servlets 教程展示了如何在 Java 中创建简单的 servlet。 我们使用 Java 注解和 XML 文件创建 servlet。

Java Servlet

Servlet 是响应网络请求的 Java 类。 这主要是一个 HTTP 请求。 Java servlet 用于创建 Web 应用。 它们在 servlet 容器(例如 Tomcat 或 Jetty)中运行。 现代 Java Web 开发使用在 servlet 之上构建的框架。 例如,Spring 或 Vaadin 框架使用 servlet。

javax.servletjavax.servlet.http包提供用于编写​​servlet 的接口和类。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

这些示例使用此 Maven 依赖项。 javax.servlet-api提供 Servlet API。 provided范围使依赖项在编译时可用,并指示它在运行时已可用。 包含在 Servlet 容器(Tomcat,Jetty)中。

Java Servlet 注解示例

在下面的示例中,我们使用@WebServlet批注创建 Java Servlet。 从 Servlet 3.0 规范开始可以使用@WebServlet批注。 注解在部署时由容器处理。

$ tree
.
├── nb-configuration.xml
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── zetcode
    │   │           └── web
    │   │               └── MyServlet.java
    │   ├── resources
    │   └── webapp
    │       ├── index.html
    │       ├── META-INF
    │       │   └── context.xml
    │       └── WEB-INF
    └── test
        └── java

这是项目结构。

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/JavaServletAnnotation"/>

在 Tomcat context.xml文件中,我们定义了上下文路径。 它是 Web 应用的名称。

MyServlet.java

package com.zetcode.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/plain;charset=UTF-8");

        ServletOutputStream out = response.getOutputStream();

        out.print("This is MyServlet");
    }
}

MyServlet Servlet 将一条简单的文本消息返回给客户端。

@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})

Java 类用@WebServlet注解修饰。 它映射到MyServlet URL 模式。

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

GET 请求调用doGet()方法。 该方法接收HttpServletRequestHttpServletResponse对象。

response.setContentType("text/html;charset=UTF-8");

Servlet 将以纯文本格式输出数据,并且数据的编码设置为 UTF-8。

ServletOutputStream out = response.getOutputStream();

通过getOutputStream()方法,我们获得了 servlet 输出流。

out.print("This is MyServlet");

我们使用print()方法编写一条短信。

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Home page</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <a href="MyServlet">Call MyServlet</a>
    </body>
</html>

在主页中,我们有一个调用 servlet 的链接。

Java Servlet XML 示例

在第二个示例中,我们在web.xml部署描述符中定义了两个 servlet。 在 Servlet 3.0 规范之前,这是定义 Java Servlet 的唯一方法。

$ tree
.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── zetcode
    │   │           └── web
    │   │               ├── FirstServlet.java
    │   │               └── SecondServlet.java
    │   └── webapp
    │       ├── index.html
    │       ├── META-INF
    │       │   └── context.xml
    │       └── WEB-INF
    │           └── web.xml
    └── test
        └── java

这是项目结构。

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/JavaServletXML"/>

我们定义上下文路径。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>com.zetcode.web.FirstServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>SecondServlet</servlet-name>
        <servlet-class>com.zetcode.web.SecondServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/FirstServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>SecondServlet</servlet-name>
        <url-pattern>/SecondServlet</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>

</web-app>

web.xml文件中,我们定义了两个 Servlet:FirstServletSecondServletweb.xml位于WEB-INF目录中。

<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.zetcode.web.FirstServlet</servlet-class>
</servlet>

我们定义名称和 servlet 类。

<servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>

我们将 servlet 映射到 URL 模式。

FirstServlet.java

package com.zetcode.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/plain;charset=UTF-8");

        ServletOutputStream out = response.getOutputStream();

        out.print("This is First Servlet");
    }
}

这是第一个 servlet。

SecondServlet.java

package com.zetcode.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SecondServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/plain;charset=UTF-8");

        ServletOutputStream out = response.getOutputStream();

        out.print("This is Second Servlet");
    }
}

这是第二个 servlet。

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Home page</title>
        <meta charset="UTF-8">
    </head>
    <body>

        <p>
            Call <a href="FirstServlet">First Servlet</a>
        </p>

        <p>
            Call <a href="SecondServlet">Second Servlet</a>
        </p>    

    </body>
</html>

在主页中,我们有两个链接来调用两个 servlet。

在本教程中,我们展示了如何创建简单的 Java Servlet。

您可能也对以下相关教程感兴趣: Java Servlet 上传文件Java Log4j 教程Java Servlet RESTful 客户端Java servlet 图像教程Java 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程