日期:2014-05-16  浏览次数:20463 次

关于连接数据库时读web.xml配置的问题

数据库的用户名、密码、连接驱动、地址等写到了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 = "";

?? ?public?void?init(ServletConfig?config)?throws?ServletException?{
?? ? ? ?super.init(config);
??