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