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