在 Listener 中访问 HttpServletRequest 对象
Access HttpServletRequest object in Listener
我有一个来自支付网关的 return 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";
第一个变量是本地服务器的,第二个是生产环境的,我根据环境对变量进行注释和取消注释。
<action name="viewResponseFile" class="controller.RAction" method="viewResponseFile">
<result name="success">somepage.jsp</result>
</action>
控制器映射到 xyz.html
上,它是 payment gateway
中的 return URL。现在我想让它通用。
我打算做的是在现有侦听器上设置该变量 class。
<listener>
<listener-class>in.com.Initializer</listener-class>
</listener>
我尝试使用 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)
{
}
}
那么怎样才能达到这些要求呢?
显然评论和取消评论不是一个可行的方法,它涉及工作并且可能导致严重的错误;
但是您应该考虑在构建过程中也从例如 .properties 文件中提供它并不好,因为即使是自动化的,不同环境之间的构建也不同。如果您在 dev.properties
中添加 属性 而忘记在 prod.properties
中添加怎么办?如果文件被其他用户使用其他字符编码的编辑器修改怎么办?
最好的方法是将这些参数设为外部。
您的 Web 应用程序不应该包含它们,而应该将它们请求到环境中:数据库中的 配置 table,一组 环境变量,等等...
这样WAR总是相同的,不同的值由不同的服务器提供(然后由系统管理员编写正确的变量在正确的地方,但这是正常的)。
然后您可以确定仅在一个环境中发生的错误不会是代码问题。
我有一个来自支付网关的 return 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";
第一个变量是本地服务器的,第二个是生产环境的,我根据环境对变量进行注释和取消注释。
<action name="viewResponseFile" class="controller.RAction" method="viewResponseFile">
<result name="success">somepage.jsp</result>
</action>
控制器映射到 xyz.html
上,它是 payment gateway
中的 return URL。现在我想让它通用。
我打算做的是在现有侦听器上设置该变量 class。
<listener>
<listener-class>in.com.Initializer</listener-class>
</listener>
我尝试使用 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)
{
}
}
那么怎样才能达到这些要求呢?
显然评论和取消评论不是一个可行的方法,它涉及工作并且可能导致严重的错误;
但是您应该考虑在构建过程中也从例如 .properties 文件中提供它并不好,因为即使是自动化的,不同环境之间的构建也不同。如果您在 dev.properties
中添加 属性 而忘记在 prod.properties
中添加怎么办?如果文件被其他用户使用其他字符编码的编辑器修改怎么办?
最好的方法是将这些参数设为外部。
您的 Web 应用程序不应该包含它们,而应该将它们请求到环境中:数据库中的 配置 table,一组 环境变量,等等...
这样WAR总是相同的,不同的值由不同的服务器提供(然后由系统管理员编写正确的变量在正确的地方,但这是正常的)。
然后您可以确定仅在一个环境中发生的错误不会是代码问题。