Java 访问侦听器中的HttpServletRequest对象

Java 访问侦听器中的HttpServletRequest对象,java,servlets,struts2,Java,Servlets,Struts2,我有一个从支付网关返回url的变量 private static String response_url = "http://1.1.1.1:8001/abc/xyz.html"; // private static String response_url = "http://www.something.com/xyz.html"; 第一个变量用于本地服务器,第二个变量用于生产环境,我根据环境对变量进行注释、取消注释和取消注释 somepage.jsp 控制器映射到该xyz.html上,它

我有一个从支付网关返回url的变量

private static String response_url = "http://1.1.1.1:8001/abc/xyz.html";
// private static String response_url = "http://www.something.com/xyz.html";
第一个变量用于本地服务器,第二个变量用于生产环境,我根据环境对变量进行注释、取消注释和取消注释


somepage.jsp
控制器映射到该
xyz.html
上,它是来自
支付网关的返回URL。现在我想让它变得通用

我计划在现有的侦听器类上设置该变量


in.com.Initializer
我尝试使用
ServletRequestAware
创建
HttpServletRequest
以获取
RequestURI
,但没有成功

public class Initializer implements ServletContextListener
{
    ServletContext context; 


    public Initializer()
    {

    } 

    public void contextInitialized(ServletContextEvent contextEvent)
    {
        // set-up code
    }

    public void contextDestroyed(ServletContextEvent contextEvent)
    {

    }

}
那么如何才能达到这些要求呢?

显然,注释和取消注释不是一种可行的方式,它涉及工作,可能会导致严重的错误

但您也应该考虑在构建过程中提供一个.At.For文件,这是不好的,因为即使自动化,不同环境之间的构建也不同。如果您在

dev.properties
中添加了一个属性,而忘记在
prod.properties
中添加该属性,该怎么办?如果文件由另一个用户使用另一种字符编码的编辑器修改,该怎么办

最好的方法是将这些参数设置为外部参数。

您的web应用程序不应该合并它们,而是应该将它们请求到环境中:数据库中的配置表、一组环境变量等等

这样,WAR总是一样的,不同的服务器提供不同的值(然后由系统管理员在正确的位置写入正确的变量,但这是正常的)


然后,您可以确保仅在一个环境中发生的错误不会是代码问题。

如果采用环境变量方法,我必须在
N
服务器数量上设置环境。在DB方法的情况下,为单个URL创建表是不可行的。有没有办法在侦听器类中选择“localhost:8080\project\u name”(动态主机名)?通常,一个webapp在dev和prod环境之间有很多不同的设置,甚至在环境之间是相等的,但这在将来可能会改变,由于这个原因,它们在表或环境变量中被参数化。。。顺便说一句,对于单个URL的情况,您不能从相对请求的头读取referer吗?