You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Servlet/JSP中配置多环境变量并读取(求代码示例)

Servlet/JSP 多环境配置读取实现方案

1. 前置说明

你提供的application.yaml是Kubernetes部署配置片段,作用是将ConfigMap中config的dev键值注入为容器环境变量ENV_DEV。在Servlet/JSP应用中,我们直接读取容器注入的系统环境变量即可实现多环境配置读取。

2. Servlet中读取环境变量

编写Servlet类,通过System.getenv()方法直接读取环境变量:

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

@WebServlet("/env")
public class EnvReaderServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        // 读取K8s注入的环境变量
        String envDevValue = System.getenv("ENV_DEV");
        // 若需区分多环境,可读取通用环境标识变量(比如ENV_TYPE)
        String envType = System.getenv("ENV_TYPE"); // 对应dev/predev/uat/prod
        
        out.println("<h1>当前环境配置</h1>");
        out.println("<p>ENV_DEV: " + (envDevValue != null ? envDevValue : "未配置") + "</p>");
        out.println("<p>当前环境类型: " + (envType != null ? envType : "未知") + "</p>");
    }
}

3. JSP中读取环境变量

方式1:直接使用脚本片段读取

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>环境配置读取</title>
</head>
<body>
    <h1>当前环境配置</h1>
    <p>ENV_DEV: <%= System.getenv("ENV_DEV") != null ? System.getenv("ENV_DEV") : "未配置" %></p>
    <p>环境类型: <%= System.getenv("ENV_TYPE") != null ? System.getenv("ENV_TYPE") : "未知" %></p>
</body>
</html>

方式2:通过EL表达式读取(需提前初始化到ServletContext)

先编写ServletContextListener初始化环境变量到上下文:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class EnvInitListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 将环境变量存入ServletContext,供JSP通过EL读取
        sce.getServletContext().setAttribute("envDev", System.getenv("ENV_DEV"));
        sce.getServletContext().setAttribute("envType", System.getenv("ENV_TYPE"));
    }
}

然后在JSP中使用EL表达式:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>环境配置读取</title>
</head>
<body>
    <h1>当前环境配置</h1>
    <p>ENV_DEV: ${envDev != null ? envDev : '未配置'}</p>
    <p>环境类型: ${envType != null ? envType : '未知'}</p>
</body>
</html>

4. 多环境部署注意事项

  • 针对dev/predev/uat/prod环境,分别创建对应ConfigMap(如config-dev、config-predev等),部署时切换ConfigMap关联即可。
  • 若需统一环境标识,可在K8s部署文件中添加ENV_TYPE环境变量,值对应当前环境(dev/predev/uat/prod),方便应用逻辑区分环境。

内容的提问来源于stack exchange,提问作者sharma vh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 12:59:14