目录
一,java中配置文件的三种配置位置及读取方式
① 配置文件有什么好处:
② 各个地方的位置有什么讲究
二,dom4j 的使用
三,xpath 的使用
四,案例
一,java中配置文件的三种配置位置及读取方式
① 配置文件有什么好处:
1.使代码更加灵活
2.维护性更高
② 各个地方的位置有什么讲究
1.同一层级:方便同步编码
编码方式:Demo2.class.getResourceAsStream("students.xml");
完整代码:
package com.ruojuan.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Dome1 {
public static void main(String[] args) throws Exception {
//同包
InputStream in = Dome1.class.getResourceAsStream("db.properties");
// .properties文件有一个专门类解析
Properties p = new Properties();
//此时p 就加载了 db.properties中所有的信息
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
2.根 目 录:一般不做频繁更改
编码方式:Demo2.class.getResourceAsStream("/students.xml");
完整代码:
package com.ruojuan.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Dome1 {
public static void main(String[] args) throws Exception {
//根目录
InputStream in = Dome1.class.getResourceAsStream("/db.properties");
// .properties文件有一个专门类解析
Properties p = new Properties();
//此时p 就加载了 db.properties中所有的信息
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
3.WEB-INF:安全目录
编码方式:context.getResourceAsStream("/WEB-INF/db.properties");
完整代码:
package com.ruojuan.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
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("/Dom1Servlet")
public class Dom1Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//拿到servlet上下文
InputStream in = request.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
Properties p = new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
补充:如何访问安全目录
地址栏输入也不可取
要先在servlet层转发运行
完整代码:
package com.ruojuan.xml;
import java.io.IOException;
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("/aa")
public class aa extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/a.jsp").forward(request, response);
}
}
二,dom4j 的使用
selectNodes 获取多个标签
selectSingleNode 获取单个标签
attributeValue 获取属性值
getText 获取标签值
完整代码:
package com.ruojuan.servlet;
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 Demo2 {
public static void main(String[] args) throws Exception {
//根目录
InputStream in = Demo2.class.getResourceAsStream("students.xml");
SAXReader sr = new SAXReader();
//配置文件中所有内容获取到了
Document read = sr.read(in);
// selectNodes 根据标签名,返回标签集合
// System.out.println(read.asXML());
// List studentsEles = read.selectNodes("students");
// System.out.println(studentsEles.size());
// List studentEles = studentsEles.get(0).selectNodes("student");
// System.out.println(studentEles.size());
// selectNodes 根据标签名,返回单个标签,通常用于已经知晓该标签只会出现一次
Element studentEle = (Element)read.selectSingleNode("students");
List studentEles = studentEle.selectNodes("student");
for (Element stuEle : studentEles) {
System.out.println(stuEle.attributeValue("sid"));//attributeValue是拿到属性值
System.out.println(stuEle.selectSingleNode("name").getText());//getText拿值
}
}
}
三,xpath 的使用
package com.ruojuan.servlet;
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 Demo3 {
public static void main(String[] args) throws Exception {
// /代表层级,代表查找
// @精确定位
InputStream in = Demo3.class.getResourceAsStream("students.xml");
SAXReader sr = new SAXReader();
//配置文件中所有内容获取到了
Document read = sr.read(in);
// Element stus002 = (Element)read.selectSingleNode("/students/student[@sid='s002']/name");
// System.out.println(stus002.getText());
Element studentsEle = (Element)read.selectSingleNode("students");
List stuEles = studentsEle.selectNodes("student");
for (Element stuEle : stuEles) {
if("s002".equals(stuEle.attributeValue("sid"))) {
System.out.println(stuEle.selectSingleNode("name").getText());
}
}
}
}
四,案例
package com.ruojuan.zy;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dome1 {
public static void main(String[] args) throws Exception {
//根目录
InputStream in = Dome1.class.getResourceAsStream("config2.xml");
SAXReader sr = new SAXReader();
//配置文件中所有内容获取到了
Document read = sr.read(in);
Element config = (Element)read.selectSingleNode("config");
List configs = config.selectNodes("action");
for (Element conf : configs) {
System.out.println(conf.attributeValue("type"));
}
}
}
package com.ruojuan.zy;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dome2 {
public static void main(String[] args) throws Exception {
//根目录
InputStream in = Dome1.class.getResourceAsStream("config2.xml");
SAXReader sr = new SAXReader();
//配置文件中所有内容获取到了
Document read = sr.read(in);
Element config = (Element)read.selectSingleNode("/config/action[@path='/loginAction']");
System.out.println(config.attributeValue("type"));
}
}
package com.ruojuan.zy;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dome3 {
public static void main(String[] args) throws Exception {
//根目录
InputStream in = Dome1.class.getResourceAsStream("config2.xml");
SAXReader sr = new SAXReader();
//配置文件中所有内容获取到了
Document read = sr.read(in);
Element config = (Element)read.selectSingleNode("/config/action[@path='/loginAction']");
List conf = config.selectNodes("forward");
for (Element con : conf) {
System.out.println(con.attributeValue("path"));
}
}
}
package com.ruojuan.zy;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dome4 {
public static void main(String[] args) throws Exception {
//根目录
InputStream in = Dome1.class.getResourceAsStream("config2.xml");
SAXReader sr = new SAXReader();
//配置文件中所有内容获取到了
Document read = sr.read(in);
Element config = (Element)read.selectSingleNode("/config/action[@path='/loginAction']");
List conf = config.selectNodes("forward");
for (Element con : conf) {
if("b".equals(con.attributeValue("name"))) {
System.out.println(con.attributeValue("path"));
}
}
}
}



