ZetCode

Java ServletConfig

最后修改于 2020 年 7 月 13 日

Java ServletConfig 教程演示了如何使用 ServletConfig 将初始化数据传递给 Servlet。

ServletConfig 是一个 Servlet 配置对象,由 Servlet 容器在初始化期间用于将信息传递给 Servlet。Servlet 容器为 Web 应用程序中的每个 Servlet 创建一个 ServletConfig

Java Servlet

Servlet 是一个 Java 类,它响应特定类型的网络请求——最常见的是 HTTP 请求。Java Servlet 用于创建 Web 应用程序。它们运行在 Tomcat 或 Jetty 等 Servlet 容器中。当今的 Java Web 开发使用构建在 Servlet 之上的框架。

Pure.css

Pure.css 是一组小型、响应式的 CSS 模块,可用于每个 Web 项目。该库由 Yahoo 创建。

Java ServletConfig 示例

在以下 Web 应用程序中,我们有一个简单的 Web 表单。我们将一个 name 参数发送到 Servlet。如果参数为空,我们将通过 ServletConfig 读取初始化参数。在示例中,我们还使用了 Yahoo 的 Pure.css 库。

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

这是项目结构。

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zetcode</groupId>
    <artifactId>JavaServletConfigEx</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>JavaServletConfigEx</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

这是 Maven pom.xml 文件。javax.servlet-api 构件用于 Java Servlet。maven-war-plugin 负责收集 Web 应用程序的所有构件依赖项、类和资源,并将它们打包成 Web 应用程序归档文件 (WAR)。

context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/JavaServletConfigEx"/>

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

index.html
<!DOCTYPE html>
<html>
    <head>
        <title>Home Page</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css">
    </head>
    <body>
        <form class="pure-form" action="MyServlet">
            <fieldset>
                <legend>Enter your name</legend>

                <input type="text" name="name">
                <button type="submit" class="pure-button pure-button-primary">Submit</button>
            </fieldset>
        </form>
    </body>
</html>

这是主页。它包含一个 HTML 表单。提交表单后,处理将发送到 MyServlet

<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css">

我们包含了 Pure.css 库。

<form class="pure-form" action="MyServlet">

form 标签使用 Pure.css 库的 pure-form 类。action 属性指向 MyServlet

<input type="text" name="name">

用户输入的 name 值将作为 name 参数发送到 Servlet。

<button type="submit" class="pure-button pure-button-primary">Submit</button>

Submit 按钮使用 pure-buttonpure-button-primary 类。

com/zetcode/MyServlet.java
package com.zetcode.web;

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

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

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

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

        String name = request.getParameter("name");
        name = name.trim();
        
        if (name.isEmpty()) {

            ServletConfig sc = getServletConfig();

            name = sc.getInitParameter("name");
        }

        ServletOutputStream os = response.getOutputStream();
        os.println("Hello " + name);
    }
}

MyServlet 从请求中读取 name 属性并生成输出。输出是纯文本。

@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"}, initParams = {
    @WebInitParam(name = "name", value = "Guest")})

使用 @WebInitParam,我们将 name 参数初始化为 "Guest" 值。

String name = request.getParameter("name");
name = name.trim();

我们从请求对象中读取 name 参数并去除空格。

if (name.isEmpty()) {

    ServletConfig sc = getServletConfig();

    name = sc.getInitParameter("name");
}

如果用户没有输入值,我们将使用 ServletConfig 读取 name 初始化参数。ServletConfig 使用 getServletConfig 获取。参数使用 getInitParameter 获取。

ServletOutputStream os = response.getOutputStream();
os.println("Hello " + name);

我们将文本消息写入 ServletOutputStream

在本教程中,我们使用了 ServletConfig 在 Java Servlet 中读取初始化参数。