日期:2014-05-16 浏览次数:20463 次
数据库的用户名、密码、连接驱动、地址等写到了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);
??