思维导图:
1,java配置
a,配置文件的作用:用来维护可能变动的代码(键值对的形式)
将变动的部分做成可配置,就不用改代码,只要改配置文件
b,读取配置文件:当前类名.class.getResourceAsStream(“资源文件路径”),返回一个流,new 一个properties类或者SAXReader类,用这个类拿到输入流,加载这个流之后键值对的值就存进document对象了,通过键名拿值
c,三种配置位置及读取方式
1,同包
InputStream in = Demo1.class.getResourceAsStream("db.properties");
2,根目录下(源文件夹里)
在"db.properties"前多加了一条"/"
InputStream in = Dome1.class.getResourceAsStream("/db.properties");
3,web-inf下
InputStream in = req.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
d,配置文件放源文件夹作开发,方便管理
WEB-INF:安全目录,凡是放在这个目录下的文件不能直接被外界访问到
Properties,xml都是资源文件的一种
properties用properties类解析
xml用SAXReader类解析
2,dom4j的使用
selectNodes:获取对应的节点对象,返回list类型
selectSingleNode:获取对应的节点对象,返回单个
attributeValue:获取指定对象的属性值
getText:拿到元素的值
案例:获取人名(小王)
步骤:1,读取到students.xml的xml串内容
2,解析获取到的所有students标签的内容
3,获取到所有students标签的Sid
4,当Sid=S003时,获取name标签内容
代码如下:
InputStream in = Dome2.class.getResourceAsStream("students.xml");
// Properties pr=new Properties();
// Document doc= pr.load(in);
SAXReader sr=new SAXReader();
Document doc = sr.read(in);
List<Element> stuEles = doc.selectNodes("/students/student");
for (Element stuEle : stuEles) {
String sid = stuEle.attributeValue("sid");
if(sid.equals("s003")) {
Element nameEle =(Element) stuEle.selectSingleNode("name");
System.out.println(nameEle.getText());
}
3,xpath的使用
public static void main(String[] args) throws DocumentException {
InputStream in = Dome3.class.getResourceAsStream("students.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(in);
Element nameEle = (Element)doc.selectSingleNode("/students/student[@sid='s002']/name");
System.out.println(nameEle.getText());
}
语法: “ / ”定位路径
“ @ ” 定义属性
ps:
1,Xpath依赖于dom4j,所以不能单独只导一个包
2,element要导org.dom4j包下的
3,强转成document对象
4,拿到元素属性值://*[@id=”xx”]
鼠标右键-->审查元素-->进页面后鼠标右键-->复制-->复制xpath
作业:
//1获取所有action中所有的type值
List<Element> selectNodes = doc.selectNodes("/config/action");
for (Element element : selectNodes) {
String type = element.attributeValue("type");
System.out.println("所有action中所有的type值:"+type);
}
//2.获取第二个action中所有的type值
List<Element> selectNodes2 = doc.selectNodes("/config/action[@path='/loginAction']");
for (Element element : selectNodes2) {
String type = element.attributeValue("type");
System.out.println("获取第二个action中所有的type值:"+type);
}
//3获取第二个action中所有forward的path
List<Element> selectNodes4 = doc.selectNodes("/config/action[@path='/loginAction']/forward");
for (Element element : selectNodes4) {
String path = element.attributeValue("path");
System.out.println("第二个action中所有forward的path:"+path);
}
//4获取第二个action中第二个forward的path
List<Element> selectNodes3 = doc.selectNodes("/config/action[@path='/loginAction']/forward[@name='success']");
for (Element element : selectNodes3) {
String path = element.attributeValue("path");
System.out.println("第二个action中第二个forward的path:"+path);
}