日期:2014-05-16 浏览次数:20574 次
数据库的用户名、密码、连接驱动、地址等写到了web.xml配置里面,连接数据库时,需要从web.xml里面读取数据库的配置信息,读取方法如下:
?
?
public static String GetWebInfo(String info)
{
String resultinfo=null;
try
{
String fPath=Thread.currentThread().getContextClassLoader().getResource("").getPath().toString();
//得到工程的WEB-INF路径
fPath = fPath.substring(0,fPath.indexOf("WEB-INF")+8)+"web.xml";
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); //never forget this!
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(fPath);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext(new util.PersonalNamespaceContext());
XPathExpression expr=null;
String param = "//pre:context-param[pre:param-name=" + "'" + info + "'" + "]/pre:param-value/text()";
expr = xpath.compile(param);
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++)
{
resultinfo=nodes.item(i).getNodeValue();
}
}
catch(Exception e)
{
e.printStackTrace();
}
return resultinfo;
}
?
?
但是,这种用读取xml文件来读取配置信息的方法其实挺麻烦的,在Java的servlet里面,可以利用init()方法里面的
ServletConfig来读取配置信息,介绍如下:
?
ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
?
1、把需要用到的配置信息放到用到需要此信息的servlet里面,例如:
?
?
<web-app>
<servlet>
<display-name>xxxx</display-name>
<servlet-name>xxxx</servlet-name>
<servlet-class>xxxx</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
</web-app>
?
?
2、下面以取上面的配置为例介绍一下用法,在servlet中要得到ServletConfig对象有两种方法:
在inii()方法中取到:通过init的重载方法传递
public?class?Test?extends?HttpServlet?
{
?? ?ServletConfig?config;
?? ? ?//定义一个静态参数,在doGet或者doPost里面可以直接调用
?? ? ?private static String name = "";
?? ?public?void?init(ServletConfig?config)?throws?ServletException?{
?? ? ? ?this.config?=?config;
config=this.getServletConfig();
name = config.getInitParameter("name");
?? ?}
}
然后在下面的方法中就可以访问config对象。但要注意,为了确保能从构造方法中到当前servlet的config对象,应该调用父类的构造方法:
public?class?Test?extends?HttpServlet?
{
?? ?ServletConfig?config;
?? ??//定义一个静态参数,在doGet或者doPost里面可以直接调用
?? ? ?private static String name = "";
?? ? ? ?super.init(config);
??