部署war文件时的数据库设置

时间:2012-06-07 08:25:19

标签: jsp

我在jsp.i做了一个项目已经对整个项目进行了战争。当我将这个战争部署到另一台机器时,它给出了登录失败的错误,cz我的数据库(sql server 2005)用户名和密码(现在是jsp文件中的硬编码使用与另一台机器不同。 我想要一些技巧,我的项目可以在任何机器上运行,而不会产生连接问题。 cz我想制作我的项目的这种软件,它将分发给许多机器。因此,在这种情况下,不应出现这种连接问题 Pl z帮助我。

4 个答案:

答案 0 :(得分:0)

您可以在xml文件中配置数据库相关凭据而不是硬编码,然后在部署时您可以更改xml文件。其他技巧是您可以使用属性文件并且可以完成相同的操作。

您可以通过其他方式定义数据源,然后您可以使用数据源查找并获得连接。

所以最后这取决于你的要求,然后你可以提供解决方案。

答案 1 :(得分:0)

答案是不要将用户名和密码(或者实际上任何配置细节)硬编码到jsp文件中。

您需要外部化连接详细信息,特别是在war文件之外,以便您可以将相同的战争部署到不同的环境中)

您应该将连接详细信息放在属性文件中并从中读取。然后,您可以配置构建过程以为每个环境构建不同的战争 - 或者构建一个war并为每个部署解压缩并覆盖连接属性然后重新打包战争。根据您的Web服务器,还有其他选项。

你在运行这个环境 - Tomcat? JBoss的?

答案 2 :(得分:0)

当然,您无法在网络应用中存储硬编码凭据。

因此,您必须将它们存储在您部署的服务器外部。

在特定容器功能(如数据源)之外,您可以:

1)使用java首选项,但是它们有很多错误,特别是如果在linux上使用tomcat,我不会考虑它们(我做了,我清理了)

2)将连接属性放在外部文件中。我是这样做的:

我的WEB-INF目录中有一个文本文件,列出了这些属性的所有授权位置。此文件在所有服务器上按原样部署。这是一个例子:

# This file lists all the locations where mysoft will look for
# an XML config file when starting.
# It's recommended to use links to simplify parameterization but
# it's also possible to enrich this file.

 # standard windows locations
 c:\mycomp\mysoft\config\config.xml
 d:\mycomp\mysoft\config\config.xml

 # standard linux location
 /var/lib/mycomp/mysoft/config/config.xml

我的webapp只是在初始化时选择第一个找到的文件。   为此,我实现了一个ServletContextListener,我在其中读取文本文件并存储配置。

这是我的听众的一个非常简化的版本:

public class MySoftServletContextListener implements ServletContextListener {

public final static String CONFIG_LIST_PATH = "/WEB-INF/config-paths.txt";

@Override
public void contextInitialized(ServletContextEvent contextEvent) {
    InputStream list = context.getResourceAsStream(WORLD_LIST_PATH);
    try {
        BufferedReader listReader = new BufferedReader(new InputStreamReader(list));
        String line;
        while ((line=listReader.readLine())!=null) {
            if (line.length()<4 || line.charAt(0)=='#') continue;
            File file = new File(line);
            if (file.exists()) {

                // log config from the file and, for example, store it in a singleton

                break;
            } else {
                log.info("No config in file " + line + " (file doesn't exist)");
            }
        }
        list.close();
    } catch (IOException e) {
        e.printStackTrace();
        log.severe("Error while looking for a config : " + e.toString());
    }
}

}

我的web.xml中引用了servlet上下文侦听器,如下所示:

<listener>
    <listener-class>com.mycomp.mysoft.webapp.MySoftServletContextListener</listener-class>
</listener>

答案 3 :(得分:0)

不只是凭据。您不应该硬编码任何数据库属性。 JavaEE提供了在运行时配置数据源的绝妙方法:

  • 如果您使用的是Servlet 3.0容器,则可以在web.xml中配置数据源属性并使用数据源
  • 您可以在应用程序中查找具有给定名称的数据源资源,并绑定所需的数据源。如果定义资源注释,也可以让Servlet Container注入数据源。
相关问题