本示例演示了使用初始化参数来配置 Java Web 应用程序

初始化参数非常适合设置变量,将来可能需要更改。 例如,您可以使用初始化参数来存储数据库连接或存储外部 API 密钥或 URL。 使用初始化参数的好处是,您可以轻松更改配置,而无需重新编译整个应用程序。

使用初始化参数配置 Java Web 应用程序 - 图1

使用init-paramcontext-param配置 Java Web 应用程序

注解与部署描述符

在前面的示例中,我们演示了使用注解配置 Servlet 的用法。 尽管您可以使用注解来设置初始化参数,但我不建议您这样做。 原因是,如果使用注解来设置初始化参数,则每次需要更改参数时都必须重新编译应用程序。 使用部署描述符来设置初始化参数要好得多。 一旦将初始化参数值放入web.xml文件中并需要更改它们,您要做的就是用更改后的值重新启动应用程序。 无需重新编译,无需重新部署!

@WebInitParam注解

下面的示例显示 Servlet 声明中@WebInitParam注解的用法

  1. @WebServlet(
  2. name = "servletParamAnnotation",
  3. urlPatterns = {"/servletParamAnnotation"},
  4. initParams = {
  5. @WebInitParam(name = "server", value = "https://javatutorial.net"),
  6. @WebInitParam(name = "api-key", value = "h6Thd5guE4Kl12g3")
  7. } )
  8. public class InitParamServletAnnotations extends HttpServlet {
  9. // ...
  10. }

如前所述,如果您选择设置初始化参数,则需要重新编译和重新部署应用程序。

上下文初始化参数

如果要在整个应用程序中共享参数,那么上下文初始化参数是一个很好的选择。 应用程序中的每个 Servlet 都共享这些初始化参数,并且它们的值在所有 Servlet 中都相同。 您可以使用以下<context-param><param-name><param-value>标记在web.xml文件中设置上下文参数:

  1. <context-param>
  2. <param-name>url</param-name>
  3. <param-value>https://javatutorial.net</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>api-key</param-name>
  7. <param-value>h6Thd5guE4Kl12g3</param-value>
  8. </context-param>

稍后,您可以像这样简单地在 servlet 或其他组件中使用此参数:

  1. package net.javatutorial.tutorials;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletContext;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class ServletContextParams extends HttpServlet {
  10. private static final long serialVersionUID = -3462096555274971485L;
  11. @Override
  12. protected void doGet(HttpServletRequest reqest, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. ServletContext c = this.getServletContext();
  15. PrintWriter writer = response.getWriter();
  16. writer.append("URL: ").append(c.getInitParameter("url")).append(", API KEY: ")
  17. .append(c.getInitParameter("api-key"));
  18. }
  19. }

Servlet 初始化参数

web.xml文件中的<init-param>标记创建特定于给定 Servlet 的初始化参数。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5. version="3.1">
  6. <display-name>Servlet with Init Parameters</display-name>
  7. <servlet>
  8. <servlet-name>servletInitParams</servlet-name>
  9. <servlet-class>net.javatutorial.tutorials.ServletInitParams</servlet-class>
  10. <init-param>
  11. <param-name>url</param-name>
  12. <param-value>https://javatutorial.net</param-value>
  13. </init-param>
  14. <init-param>
  15. <param-name>api-key</param-name>
  16. <param-value>h6Thd5guE4Kl12g3</param-value>
  17. </init-param>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>servletInitParams</servlet-name>
  21. <url-pattern>/servletInitParams</url-pattern>
  22. </servlet-mapping>
  23. </web-app>

在您的 Servlet 中,您可以像这样调用参数:

  1. package net.javatutorial.tutorials;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletConfig;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class ServletInitParams extends HttpServlet {
  10. private static final long serialVersionUID = -1242096555274971485L;
  11. @Override
  12. protected void doGet(HttpServletRequest reqest, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. ServletConfig c = this.getServletConfig();
  15. PrintWriter writer = response.getWriter();
  16. writer.append("URL: ").append(c.getInitParameter("url")).append(", API KEY: ")
  17. .append(c.getInitParameter("api-key"));
  18. }
  19. }

注意上下文参数之间的区别,它们的用法如下:

  1. ServletContext c = this.getServletContext();

和初始化参数:

  1. ServletConfig c = this.getServletConfig();