呵呵,我的写法和你不一样,代码如下,使用很正常的
配置文件如下:
<?xml version="1.0" encoding="GB2312"?>
<config>
<weburl>http://172.16.2.118/gstest.asp</weburl>
<jodbc>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=GSTEST</jodbc>
<uid>sa</uid>
<pwd />
</config>部分代码
package voicexml;
import java.util.*;
import java.text.*;
import java.net.*;
import javax.swing.*;
import java.io.*;
import java.net.HttpURLConnection;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument;
import org.xml.sax.*;
import org.w3c.dom.Text;
//*********************读取配置文件**********************
public String GetWebURL(JTextArea weburl,JTextArea jdbc,JTextArea sa,JPasswordField pwd)
{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
try {
db = dbf.newDocumentBuilder();
}
catch (ParserConfigurationException ex) {JOptionPane.showMessageDialog(null,"获取WEBURL地址失败,请检测文件是否存在");
return "";
}
Document doc=null;
try {
//linux下的当前路径,windows下可以改成 doc = db.parse("config.xml");
doc = db.parse("./config.xml"); }
catch (IOException ex1) {JOptionPane.showMessageDialog(null,"获取WEBURL地址失败,请检测文件是否存在");
return "";
}
catch (SAXException ex1) {
}
String textvalue="";
Element root=doc.getDocumentElement();
NodeList nodelist=root.getElementsByTagName("weburl");
Element e=(Element)nodelist.item(0); Text t=(Text) e.getFirstChild();
if(t!=null)
textvalue=t.getNodeValue().trim();
if(weburl!=null)
weburl.setText(textvalue);
NodeList nodelist1=root.getElementsByTagName("jodbc");
Element e1=(Element)nodelist1.item(0);
Text t1=(Text) e1.getFirstChild();
if(t1!=null && jdbc!=null)
jdbc.setText(t1.getNodeValue().trim()); NodeList nodelist2=root.getElementsByTagName("uid");
Element e2=(Element)nodelist2.item(0);
Text t2=(Text) e2.getFirstChild();
if(t2!=null && sa!=null)
sa.setText(t2.getNodeValue().trim()); NodeList nodelist3=root.getElementsByTagName("pwd");
Element e3=(Element)nodelist3.item(0);
Text t3=(Text) e3.getFirstChild();
if(t3!=null && pwd!=null)
pwd.setText(t3.getNodeValue().trim()); //String textvalue=t.getNodeValue();
return textvalue; }象你的那个配置文件只要在这里Element e=(Element)nodelist.item(0);做个循环不用item(0)就行了
配置文件如下:
<?xml version="1.0" encoding="GB2312"?>
<config>
<weburl>http://172.16.2.118/gstest.asp</weburl>
<jodbc>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=GSTEST</jodbc>
<uid>sa</uid>
<pwd />
</config>部分代码
package voicexml;
import java.util.*;
import java.text.*;
import java.net.*;
import javax.swing.*;
import java.io.*;
import java.net.HttpURLConnection;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument;
import org.xml.sax.*;
import org.w3c.dom.Text;
//*********************读取配置文件**********************
public String GetWebURL(JTextArea weburl,JTextArea jdbc,JTextArea sa,JPasswordField pwd)
{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
try {
db = dbf.newDocumentBuilder();
}
catch (ParserConfigurationException ex) {JOptionPane.showMessageDialog(null,"获取WEBURL地址失败,请检测文件是否存在");
return "";
}
Document doc=null;
try {
//linux下的当前路径,windows下可以改成 doc = db.parse("config.xml");
doc = db.parse("./config.xml"); }
catch (IOException ex1) {JOptionPane.showMessageDialog(null,"获取WEBURL地址失败,请检测文件是否存在");
return "";
}
catch (SAXException ex1) {
}
String textvalue="";
Element root=doc.getDocumentElement();
NodeList nodelist=root.getElementsByTagName("weburl");
Element e=(Element)nodelist.item(0); Text t=(Text) e.getFirstChild();
if(t!=null)
textvalue=t.getNodeValue().trim();
if(weburl!=null)
weburl.setText(textvalue);
NodeList nodelist1=root.getElementsByTagName("jodbc");
Element e1=(Element)nodelist1.item(0);
Text t1=(Text) e1.getFirstChild();
if(t1!=null && jdbc!=null)
jdbc.setText(t1.getNodeValue().trim()); NodeList nodelist2=root.getElementsByTagName("uid");
Element e2=(Element)nodelist2.item(0);
Text t2=(Text) e2.getFirstChild();
if(t2!=null && sa!=null)
sa.setText(t2.getNodeValue().trim()); NodeList nodelist3=root.getElementsByTagName("pwd");
Element e3=(Element)nodelist3.item(0);
Text t3=(Text) e3.getFirstChild();
if(t3!=null && pwd!=null)
pwd.setText(t3.getNodeValue().trim()); //String textvalue=t.getNodeValue();
return textvalue; }象你的那个配置文件只要在这里Element e=(Element)nodelist.item(0);做个循环不用item(0)就行了
解决方案 »
- 一个关于实现多个接口的奇怪问题
- 请高手帮忙看一下有没有进程同步的问题
- mvc框架的结构模型
- hibernate左连接问题
- 急需:jsp,struts,hibernate 的好处和介绍
- ActionForm的问题,经常会遇到
- java通过itext操作PDF文件的问题
- 求bean:page使用方法指点
- tomcat环境变量的配置问题
- JBoss-2.4.4_Tomcat-4.0.1版本中数据源问题?
- 请问websphere在那里设置工作目录呀,就如同我要运行的jsp文件所在目录,在tomcat中的conf目录下的server.xml文件中设置一样
- 是不是把struts例子的*.war直接拷贝到Tomcat里webapps就行了
<total>
<wep-add >com.mysql.jdbc.Driver</wep-add>
<wep-app >jdbc:mysql://localhost/USER</wep-app>
</total>jdom类:
package com.logitic.utils;
import java.io.*;
import org.jdom.*;
import java.util.*;
import org.jdom.input.*;
import org.jdom.output.*;
public class XMLOutputter
{
String l_s_driver = null;
String l_s_url = null; public String soft(String driver)
{ try{
this.l_s_driver = driver;
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new FileInputStream("driver.xml"));
Element root = doc.getRootElement();
Element wepOne = root.getChild("wep-add");
driver = wepOne.getText();
}
catch(FileNotFoundException e)
{
e.toString();
}
catch(JDOMException e)
{
e.toString();
}catch(NullPointerException e)
{
e.printStackTrace();
}
return l_s_driver;
} public String nost(String url)
{ try{
this.l_s_url = url;
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new FileInputStream("driver.xml"));
Element root = doc.getRootElement();
Element wepTwo = root.getChild("wep-app");
url = wepTwo.getText();
}
catch(FileNotFoundException e)
{
e.toString();
}
catch(JDOMException e)
{
e.toString();
}
catch(NullPointerException e)
{
e.printStackTrace();
}
return l_s_url;
}}这个类把两个变量driver和url 传递给ConnectionPool类ConnectionPool类:package com.business.databean;
import java.sql.*;
import com.logitic.utils.*;
public class ConnectionPool {
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private String l_s_driver;
private String l_s_url;
public Connection Pool(String driver,String url){ this.l_s_driver=driver;
this.l_s_url=url; try
{
XMLOutputter xml = new XMLOutputter();
driver = xml.soft(driver);
url = xml.nost(url);
Class.forName(driver);
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
}
catch (SQLException e)
{
e.toString();
}
catch (ClassNotFoundException e)
{
e.toString();
}
catch(NullPointerException e)
{
e.printStackTrace();
}
return conn;
}
}程序编译没有问题 可是执行起来总出现NullPointerException
是因为什么问题呢 拜托了
根据NullPointerException提示
指的是一个空的对象异常,触发这种错误通常是没有初始化或者初始化失败,比如象参数错误的情况导致对象初始化失败,你用debug模式调试下找出问题应该很容易的
我不清楚我XMLOutputter类里访问XML的时候有没有写错误 异常是这样的
java.lang.NullPointerException at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:140) at com.business.databean.ConnectionPool.Pool(ConnectionPool.java:21) at com.business.databean.Databean.limit(Databean.java:26) at com.business.user.ConcreteLandUser.login(ConcreteLandUser.java:14) at com.border.action.LoginAction.perform(LoginAction.java:39) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1787) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1586) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125) at java.lang.Thread.run(Thread.java:536)StandardWrapperValve[action]: Servlet.service() for servlet action threw exceptionjava.lang.NullPointerExceptionjava.lang.NullPointerException at com.business.databean.Databean.limit(Databean.java:27) at com.business.user.ConcreteLandUser.login(ConcreteLandUser.java:14) at com.border.action.LoginAction.perform(LoginAction.java:39) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1787) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1586) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125) at java.lang.Thread.run(Thread.java:536)你有邮箱吗? 我把我这个模块给你发过去你看看吧 我的是 [email protected]
另外DEBUG模式怎么弄啊 请指教
和数据库名的话程序就可以执行成功 但是用XML,JDOM就出了这个异常
还是拿你上面贴的哪个XMLOutputter类来做说明吧,你可以改成如下的形式
import java.io.*;
import org.w3c.dom.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument;
import org.xml.sax.*;
import org.w3c.dom.Text;public class XMLOutputter
{ public String driver="";
public String url="";
public String soft(String driver)
{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=null;
try {
builder = dbf.newDocumentBuilder();
}
catch (ParserConfigurationException ex)
{
}
//DocumentBuilderFactory builder = new SAXBuilder();
Document doc = null;
try {
doc = builder.parse("totall.xml");
}
catch (IOException ex1)
{
}
catch (SAXException ex1)
{
}
Element root = doc.getDocumentElement();
Element wepOne = (Element)root.getElementsByTagName("driver").item(0);
driver=wepOne.getAttribute("name");
Element urllink = (Element)root.getElementsByTagName("url").item(0);
url=urllink.getAttribute("name");
}}我觉得你完全没有必要用两个函数分别取参数所以将note函数去掉了这样你
只需
XMLOutputter obj=new XMLOutputter();
obj.soft("");
然后把obj.driver
obj.url值拿出来就ok了(driver和url最好按属性的方式写,我这里简单的写不太合规范)
driver和url最好按属性的方式写的话具体点是什么样式的 请举个例子告诉我吧 谢谢哈
public void setDriver(String s)
{
strDriver=s;
}
public String getDriver()
{
return strDriver;
}
通常的组件编写都采用这种方式,比较灵活
soft里传递多个参数在另一个类里调用,这通常是指针或引用的做法,java不支持指针,可能要传引用类型的数据才行,我还没这样试过,不知道是否可行,因为那样做反倒要做数据类型转换麻烦
我刚才试着在struts-config.xml加标签这个标签里面是驱动名跟数据库名,原先的XML文件不用
如下:
<data-sources>
<data-source>
<set-property property="driver" value="com.mysql.jdbc.Driver" />
<set-property property="url" value="jdbc:mysql://localhost/USER" />
</data-source>
</data-sources>在struys-config.xml加入了这个标签 可是程序编译的时候不能编译过去
出现了servlet异常这是为什么呢 难道我网里面加入标签还要改别的吗??
XMLOutputter obj=new XMLOutputter();
obj.soft(""); System.out.print(obj.driver+"\n"+obj.url);
显示的结果是:
com.mysql.jdbc.Driver
jdbc:mysql://localhost/USER
另外
public String soft(String driver)的参数不要用driver因为已经有个public String driver="";
光标移到你要设置断点的行按F5就可以了,运行工程时选择debug project就会进入断点了
如doc = builder.parse("totall.xml");那么totall.xml是要放在和.jpx工程文件同目录的哦
就是表示当前工程文件目录下的xml文件下的totall.xml
我用断点DEBUG模式下就是 doc = builder.parse("totall.xml");这里错了 就是找不到文件
我试着doc = builder.parse("./xml/totall.xml");也是一样 我原来的程序里头是
Document doc = builder.build(new FileInputStream("driver.xml"));这句错误
一执行到这里就抛NullPointerException 就是没找到文件 之后的语句更别说执行了
能解决吗? 谢谢了
<data-source>
<set-property property="driver" value="com.mysql.jdbc.Driver" />
<set-property property="url" value="jdbc:mysql://localhost/USER" />
</data-source>
</data-sources>添加这个标签 可是执行的时候出现了 servlet异常 往struts-config.xml里添加标签时
还要改web.xml里的servlet标签吗? 改的话如何改呢 ? 非常期待 谢谢
FileOutputStream outFile = new FileOutputStream("test.txt");
OutputStreamWriter outWriter=new OutputStreamWriter(outFile);
outWriter.write("testA\r");
outWriter.write("testB");
outWriter.close();
outFile.close();看生成的test.txt文件在什么地方,然后把xml文件放在哪个地方就行了
程序执行的时候出现了这个错误:PARSE error at line 2 column -1
org.xml.sax.SAXParseException: 组件类型“totall”未被声明。这个totall.xml声明的话在哪儿声明 应该怎么声明呢 请指教