javaxml參數
1. 用java寫一個 webservice 接收參數為xml格式的數據。
拿到的xml數據應該是文件流吧,文件流不是本身就可以通過系統庫讀取的么,可以查一下讀取xml文件的方法,裡面都是先把文件轉成流再讀數據的,如果拿到的是流文件,省去讀文件的一步,其他的代碼都能直接拿來用
2. 通過java怎麼配置xml文件
JAVA與XML文件,可以說是軟體開發的「黃金搭檔」,而如何使用JAVA完成對XML文件的讀取,是我們首先要解決的問題。
一、XML文件
這個示例文件包括了用來打開ORACLE資料庫的各種參數
<?xml version="1.0" encoding="UTF-8"?>
<dbmsg>
<dbinfo>
<drivername>oracle.jdbc.driver.OracleDriver</drivername>
<sConnStr>jdbc:oracle:thin:@11.88.225.80:1521:VOUCHERDB</sConnStr>
<username>SYS AS SYSDBA</username>
<password>voucherdb</password>
</dbinfo>
</dbmsg>
二、編寫類名為ReadXml的類,用於解析XML文件
我們要在應用程序中打開資料庫,就必須完成對該文件中drivername、sConnStr、username、password的讀取,通過查找有關資料,筆者編制了以下程序,用於讀取文件名為filename的XML文件。
package voucher.basic;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class ReadXml {
private String drivername;
private String sConnStr;
private String username;
private String password;
public String getDrivername() {
return drivername;
}
public String getSConnStr() {
return sConnStr;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setDrivername(String drivername) {
this.drivername = drivername;
}
public void setSConnStr(String connStr) {
sConnStr = connStr;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public ReadXml(String fileName){
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
InputStream is=new FileInputStream(fileName);
Document doc=dombuilder.parse(is);
Element root=doc.getDocumentElement();
NodeList dbinfo=root.getChildNodes();
if(dbinfo!=null){
for(int i=0;i<dbinfo.getLength();i++){
Node db=dbinfo.item(i);
for(Node node=db.getFirstChild();node!=null;node=node.getNextSibling()){
if(node.getNodeType()==Node.ELEMENT_NODE){
if(node.getNodeName().equals("drivername")){
setDrivername(node.getFirstChild().getNodeValue());
}
if(node.getNodeName().equals("sConnStr")){
setSConnStr(node.getFirstChild().getNodeValue());
}
if(node.getNodeName().equals("username")){
setUsername(node.getFirstChild().getNodeValue());
}
if(node.getNodeName().equals("password")){
setPassword(node.getFirstChild().getNodeValue());
}
}
}
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
這個以ReadXml命名的類,使用了參數為文件名的構造方法,用戶只要將配置文件我名稱傳遞給該方法,就可以完成對XML文件的解析,進而完成對相應參數數的讀取。三、如何獲取XML文件全路徑並讀取配置參數
獲取XML文件全路徑的方法有兩個,一是在servlet中獲取,二是在單獨的JAVA類中獲取。
1.在servlet中獲取XML文件的全路徑並讀取配置參數
程序片段String dirPath = getServletContext().getRealPath( "/WEB-INF");
String fileName = dirPath + "/conn.xml";
ReadXml xm = new ReadXml(fileName);
String DriverName = xm.getDrivername();
String connStr = xm.getSConnStr();
String user = xm.getUsername();
String pas = xm.getPassword();
將這段程序添加到servlet中dopost()之後即可完成參數的讀取
2.在單獨的JAVA類中獲取全路徑並讀取配置參數
程序片段String dirpath = System.getProperty("user.dir");
String xmlFile = dirpath + "/WebRoot/WEB-INF/conn.xml";
ReadXml rdxml = new ReadXml(xmlFile);
String driverName = rdxml.getDrivername();
String sConnStr = rdxml.getSConnStr();
String userName = rdxml.getUsername();
String passWord = rdxml.getPassword();註:配置文件conn.xml保存在webroot/WEB-INF目錄中。
3. 如何用java在web.xml文件中取值
如果是要取出全部的值.建議解析WEB.XML然後取值.如果是取某個特定的值可以用下面的:
web.xml裡面可以定義兩種參數:
(1)application范圍內的參數,存放在servletcontext中,在web.xml中配置如下:xml 代碼
<context-param>
<param-name>context/param</param-name>
<param-value>avalible ring application</param-value>
</context-param> (2)servlet范圍內的參數,只能在servlet的init()方法中取得,在web.xml中配置如下:xml 代碼
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>com.wes.controller.MainServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>avalible in servlet init()</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet> 在servlet中可以通過代碼分別取用:java 代碼
package com.test;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class TestServlet extends HttpServlet ...{
public TestServlet() ...{
super();
}
public void init() throws ServletException ...{
System.out.println("下面的兩個參數param1是在servlet中存放的");
System.out.println(this.getInitParameter("param1"));
System.out.println("下面的參數是存放在servletcontext中的");
System.out.println(getServletContext().getInitParameter("context/param"));
}
} 第一種參數在servlet裡面可以通過getServletContext().getInitParameter("context/param")得到
第二種參數只能在servlet的init()方法中通過this.getInitParameter("param1")取得init-param屬於一個servlet所有,context-param屬於整個應用程序所有 ,不僅是在servlet中可以得到,jsp文件中也可以得到.在jsp中config就相當於這里的servletContext,<%=config.getServletContext().getInitParameter("...") %>.
action中ServletActionContext.getServletContext().getInitParameter("...").
4. java文件中怎麼獲取web.xml中的全局參數
每個 servlet 中 web.xml 中可以有 <init-param > 參數,在 servlet 的 init 方法中可以把它們取出來並保存在某個地方(比如一個靜態成員變數中,或者一個靜態的 map 變數中,因為這個參數不會改變,因此可以直接放在靜態變數中),其它的 Java 類就能去靜態變數中取得這個參數。
如果你的程序不是一個 web 程序的話,可以把它放在命令行 -Djdbc.drive=org.git.mm.mysql.Driver 這樣的參數中,之後程序可以用 System.getProperty("jdbc.driver"); 讀取出來。或者放在一個 properties 配置文件中,然後讀取這個properties 文件。