1.XML作用
1.1配置
.xml和.propertie
1.2数据交互(获取第三方数据)
XML:webservices(axis2)restful webservices 基于http协议的方式
JSON
2.Java中3种配置位置及读取方式
2.1如何使用Properties读取配置文件
1)*.properties文件以键值对的方式存储数据;
id=001
name=\u5F20\u4E09
2)使用Properties类读取配置文件;
package com.zhouzhuolin.xmlanalysis.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Demo{
public static void main(String[] args) throws Exception {
InputStream is = Demo.class.getResourceAsStream("/config.properties");
//创建Properties
Properties pro=new Properties();
pro.load(is);
System.out.println(pro.getProperty("id"));
System.out.println(pro.getProperty("name"));
}
}
测试结果
2.2 配置位置
1)存放于根目录下,/代表获取src根目录的绝对路径
2)存放于同一类的包下,不加/代表同类名包下的相对路径;
3)存放于WebContent或WebRoot目录下的WEB-INF目录下
ServletContext sc=this.getServletContext();
InputStream is=sc.getResourceAsStream("/WEB-INF/db.properties");
package test;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Q extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext sc = this.getServletContext();
InputStream is = sc.getResourceAsStream("/WEB-INF/cfg.properties");
System.out.println(is);
}
}
3.dom4j+xpath解析xml文件
1)xpath类似数据库中的select语句;
2)Document有节点(Node)组成:元素节点、属性、文本等;
3)selectNodes()获取节点下所有子节点;
4)selectSingleNodes()获取单个节点信息;
5) xpath语法:/(定位路径)、@(获取属性)
作业:config.xml解析
1、获取所有action中的type的值
2、获取第二个action中的type的值
3、获取第二个action的所有forward的path
4、获取第二个action的第二个forward的path
package com.zhouzhuolin.xmlanalysis.test;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Demo3 {
public static void main(String[] args) throws Exception {
// 作业:config.xml解析
// 1、获取所有action中的type的值
// 2、获取第二个action中的type的值
// 3、获取第二个action的所有forward的path
// 4、获取第二个action的第二个forward的path
// 以流的方式获取资源,返回InputStream输入流
InputStream is = Demo3.class.getResourceAsStream("/config.xml");
// 创建SAXReader读取方式
SAXReader sr=new SAXReader();
// 加载输入流转换成Document
Document dc = sr.read(is);
// 节点由元素组成,元素不一定是节点
// 1./:定位
List<Node> list = dc.selectNodes("/config/action");
System.out.println("获取所有action中的type的值");
for (Node node : list) {
Element el=(Element) node;
// 1.以属性名获取属性值
String att = el.attributeValue("type");
System.out.println(att);
/**
* 可以看可不看
*/
// 2.获取所有的属性
// List<Attribute> a = el.attributes();
// for (Attribute aa : a) {
// System.out.println(aa.getName()+"="+aa.getValue());
// }
}
System.out.println("获取第二个action中的type的值");
List<Node> list2 = dc.selectNodes("/config/action[@path='/loginAction']");
for (Node node : list2) {
Element el=(Element) node;
String att = el.attributeValue("type");
System.out.println(att);
}
System.out.println("获取第二个action的所有forward的path");
List<Node> list3 = dc.selectNodes("/config/action[@path='/loginAction']/forward");
for (Node node : list3) {
Element el=(Element) node;
String att = el.attributeValue("path");
System.out.println(att);
}
System.out.println("获取第二个action的第二个forward的path");
List<Node> list4 = dc.selectNodes("/config/action[@path='/loginAction']/forward[@name='b']");
for (Node node : list4) {
Element el=(Element) node;
String att = el.attributeValue("path");
System.out.println(att);
}
}
}
测试结果
作业加强 (第二种方式)
package com.zhouzhuolin.xmlanalysis.test;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Demo4 {
public static void main(String[] args) throws Exception {
// 以流的方式获取资源,返回InputStream输入流
InputStream is = Demo3.class.getResourceAsStream("/config.xml");
// 创建SAXReader读取方式
SAXReader sr=new SAXReader();
// 加载输入流转换成Document
Document dc = sr.read(is);
// 节点由元素组成,元素不一定是节点
// 作业:config.xml解析
// 1、获取所有action中的type的值
// 2、获取第二个action中的type的值
// 3、获取第二个action的所有forward的path
// 4、获取第二个action的第二个forward的path
System.out.println("---获取所有action中的type的值---");
List<Node> list = dc.selectNodes("/config/action");
for (Node node : list) {
Element el=(Element) node;
//1.以属性名获取属性值
String att = el.attributeValue("type");
System.out.println(att);
}
System.out.println("---获取第二个action中的type的值---");
//Element 节点转换成元素
//selectSingleNode 只存储一个节点
Element el3 = (Element) dc.selectSingleNode("/config/action[@path='/loginAction']");
//以属性名获取属性值
String type3 = el3.attributeValue("type");
System.out.println(type3);
System.out.println("---获取第二个action的所有forward的path---");
List<Node> list3 = dc.selectNodes("/config/action[@path='/loginAction']/forward");
for (Node node : list3) {
Element el=(Element) node;
String att = el.attributeValue("path");
System.out.println(att);
}
System.out.println("---获取第二个action的第二个forward的path---");
Element el6 = (Element) dc.selectSingleNode("/config/action[@path='/loginAction']/forward[@name='b']");
String type6 = el6.attributeValue("path");
System.out.println(type6);
}
}