Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 部署war文件时的数据库设置_Jsp - Fatal编程技术网

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

Jsp 部署war文件时的数据库设置,jsp,Jsp,我用jsp完成了一个项目。我对整个项目进行了war。当我将此war部署到另一台机器上时,会出现登录失败的错误,cz我的数据库SQL server 2005用户名和密码现在在jsp文件中使用的硬编码与另一台机器不同。 我想要一些技巧,我的项目可以在任何机器上运行,而不会造成连接问题。 cz我想为我的项目制作这样的软件,它将被分发到许多机器上。因此,在这种情况下,连接问题不应该发生 Pl z帮助我。您可以在xml文件中配置与数据库相关的凭据,而不是硬编码,然后在部署时可以在xml文件中更改。另一个技

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

您可以在xml文件中配置与数据库相关的凭据,而不是硬编码,然后在部署时可以在xml文件中更改。另一个技巧是,您可以使用属性文件,也可以执行同样的操作

另一种方法是定义数据源,然后使用数据源查找并获取连接


因此,最后这取决于您的需求,然后基于此您可以提供解决方案。

答案是不要将用户名和密码或任何类似的配置细节硬编码到jsp文件中

您需要将连接详细信息外部化,最好是在war文件之外,以便可以将同一war部署到不同的环境中

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


你在什么环境下运行这个Tomcat?Jboss?

当然,您不能在web应用程序中存储硬编码凭据

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

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

1使用java首选项,但是它们有很多bug,尤其是如果在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());
    }
}

}
servlet上下文侦听器在my web.xml中的引用如下:

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

不仅仅是证书。您不应该硬编码任何数据库属性。JavaEE提供了在运行时配置数据源的极好方法:

如果您使用的是Servlet 3.0容器,则可以在web.xml中配置数据源属性并使用数据源 您可以在应用程序中查找具有给定名称的数据源资源,并绑定所需的数据源。如果定义了资源注释,还可以让Servlet容器注入数据源。
是的,但是每当我把这个软件给另一个,每次我必须更改那个xml或属性文件,我不想这样做。你能提供一些关于数据源的文档吗?你是如何构建war文件的?我没有得到它,你能简单地解释一下吗?你能提供一些关于数据源的文档吗?嗨,Ramesh!你遇到什么样的数据源?这是一个阶级,是某种财产还是。。?你能提供一些文件吗?