跳转至

Java Servlet 教程

原文: http://zetcode.com/articles/javaservlet/

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 RequestDispatcher从 Java servlet 提供纯文本Java servlet 图像教程Java 教程



回到顶部