sax&xml
- xml解析需要使用到的两个jar包.
根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都分装成对象。
优点:很方便实现增删改操作
缺点:如果文件过大,造成内存溢出
sax解析过程: 采用事件驱动,边解析
*从上到下,一行一行的解析,解析到某一个对象,把对象名返回。
优点:使用sax方式不会造成内存溢出,实现查询
缺点:使用sax方式,不能实现增删改操作
解析xml文件
- 读取到为
.propertites文件
2.1. 类名.class.getResourceAsStream("/db.properties");获取路径字节对象
获取到文件的属性值getProperty(“xxx”).
package com.houzhihong.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Demo1 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//获取字节码对象
InputStream in = Demo1.class.getResourceAsStream("/db.properties");
//读取属性文件
Properties p = new Properties();
//开始读取
p.load(in);
//获取到属性值
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
2.2 显示结果获取到的uname和upass.
2.3 配置文件的三种配置位置和读取方式
存放位置
1 src根目录下 xxx.class.getResourceAsStream("/config.properties");
2 与读取配置文件的类在同一包 Xxx.class.getResourceAsStream(“config2.properties”);
3 WEB-INF(或其子目录下) ServletContext application = this.getServletContext();
InputStream is =
application.getResourceAsStream("/WEB-INF/config3.properties");
dome4j解析xml
- 解析.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student sid="s001">
<name>小明</name>
</student>
<student sid="s002">
<name>小芳</name>
</student>
<student sid='s003'>
<name>小王</name>
</student>
</students>
1.2 判断为s002的id
package com.houzhihong.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import org.apache.jasper.tagplugins.jstl.core.ForEach;
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 IOException, DocumentException {
// TODO Auto-generated method stub
//dome4j解析xml
InputStream in = Demo3.class.getResourceAsStream("/students.xml");
SAXReader r=new SAXReader();
//得到文件对象
Document d = r.read(in);
List<Element> list = d.selectNodes("/students/student");
for (Element el : list) {
//判断找到是否为s002的id
if("s002".equals(el.attributeValue("sid"))) {
//获取到文本name值
Node n =(Node)el.selectSingleNode("name");
//getText通过文本拿到值
System.out.println("sid="+el.attributeValue("sid")+",name="+n.getText());
}
}
}
}
1.3 显示结果,找到为s002id
- 使用servlet读取到为
.propertites文件
propertites文件`放与web-inf下.
package com.houzhihong.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="demo",urlPatterns="/demo")
public class DemoServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletContext context = req.getServletContext();
InputStream in = context.getResourceAsStream("/WEB-INF/db.properties");
Properties p = new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
4.1发布到本地服务器显示结果,获取到了uname和upass值
.