1.JAVA中配置文件的三种配置位置以及读取方式
1.1 存放在同目录下.如图(读取wangcong.xml里面的db.properties)
例如:先写一个文件(如db.properties),内容如下:
uname=onlyK
upass=wangcong
url=jdbc:mysql://localhost:3306/mybatis_ssm
driver_Class=com.mysql.jdbc.Driver
initPoolSize=5
maxPoolSize=20
再编写一个java文件Test1去读取信息:
package wangcong.xml;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 读取同级目录下的配置文件
* (xml、properties、vm....)
* @author only老K
*
*/
public class Test1 {
public static void main(String[] args) throws Exception {
//读取同级目录下的配置文件(例如db.properties)
InputStream in = Test1.class.getResourceAsStream("db.properties");//得到对应的流
Properties p=new Properties();//创建管理对象
//将读取的配置文件对应的流对象交给Properties进行管理
p.load(in);//这里需要抛出异常
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
运行结果如下:
内容对应成功。
1.2与读取配置文件的类在同一包.如图(读取conf下面db.properties)
编写一个新的java文件Test2,如下
package wangcong.xml;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 读取项目根路径下的配置文件
* @author only老K
* 需在要读取的文件前面假一个/如下
*/
public class Test2 {
public static void main(String[] args) throws Exception {
InputStream in = Test2.class.getResourceAsStream("/db.properties");//得到对应的流
Properties p=new Properties();//创建管理对象
//将读取的配置文件对应的流对象交给Properties进行管理
p.load(in);//这里需要抛出异常
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
运行结果如下
内容对应成功
***1.3 WEB-INF(或其子目录下)***(读取WEB-INF里面的db.properties)
1.3.1 首先WEB-INF文件是干什么?
安全目录 含义:不能被外界访问
1.3.2 获取内容。如下代码:
package wangcong.xml;
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;
/**
* 获取web_inf下面的配置文件db.properties
* @author only老K
*
*/
@WebServlet("/demo3")//配置Servlet
public class Test3Servlet extends HttpServlet{
@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 {
InputStream in = req.getServletContext().getResourceAsStream("/WEB-INF/db.properties");//获取流。内容意思是先返回上一级再进入到WEB-INF里面去取
Properties p=new Properties();//创建管理对象
//将读取的配置文件对应的流对象交给Properties进行管理
p.load(in);//这里需要抛出异常
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
运行结果如下:(需要运行服务)
2.XML的作用
首先做配置,然后在2016年之前还会用来做数据交互。(重点是学会解析别人发过来的xml文件)
3. dom4j+xpath解析xml文件(划重点)如图:
3.1 准备工作,先写好student.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>
3.2 导入2个jar包。如图:
再编写一个java文件Test4。如下:
package wangcong.xml;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
/**
* 讲解如何解析xml从中获取我们想要得到的内容
* @author only老K
* xml解析技术: dom4j、sax解析、jdom解析
* 重点是dom4j,后两种已经慢慢被淘汰
*
*/
public class Test4 {
public static void main(String[] args) throws Exception {
InputStream in = Test4.class.getResourceAsStream("students.xml");
SAXReader reader = new SAXReader();//dom4j的
//将配置文件xml内容加载到了内存中
Document doc=reader.read(in);//dom4j的,抛出异常
System.out.println(doc.asXML());
}
}
运行结果如下:
例如:我需要获取到小芳。运行如下代码:
第一种方法:
1. 先得到所有的student元素
package wangcong.xml;
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;
/**
* 讲解如何解析xml从中获取我们想要得到的内容
* @author only老K
* xml解析技术: dom4j、sax解析、jdom解析
* 重点是dom4j,后两种已经慢慢被淘汰
*
*/
public class Test4 {
public static void main(String[] args) throws Exception {
InputStream in = Test4.class.getResourceAsStream("students.xml");
SAXReader reader = new SAXReader();//dom4j的
//将配置文件xml内容加载到了内存中
Document doc=reader.read(in);//dom4j的,抛出异常
//System.out.println(doc.asXML());
List<Element> stuEles=doc.selectNodes("/students/student");//得到所以的student元素
for (Element e : stuEles) {
System.out.println(e.asXML());
}
}
}
运行结果如下:
2.判断是否是sid=“s002”,并得到sid=“s002”内的元素, 如下代码:
package wangcong.xml;
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;
/**
* 讲解如何解析xml从中获取我们想要得到的内容
* @author only老K
* xml解析技术: dom4j、sax解析、jdom解析
* 重点是dom4j,后两种已经慢慢被淘汰
*
*/
public class Test4 {
public static void main(String[] args) throws Exception {
InputStream in = Test4.class.getResourceAsStream("students.xml");
SAXReader reader = new SAXReader();//dom4j的
//将配置文件xml内容加载到了内存中
Document doc=reader.read(in);//dom4j的,抛出异常
//System.out.println(doc.asXML());
List<Element> stuEles=doc.selectNodes("/students/student");//得到所以的student元素
for (Element e : stuEles) {
//System.out.println(e.asXML());
if("s002".equals(e.attributeValue("sid"))) {//得到每个sid的内容
Element nameE=(Element) e.selectSingleNode("name");//得到满足sid="s002"的元素name
System.out.println(nameE.asXML());
}
}
}
}
运行结构果如下:
3.获取标签内的文本内容,代码如下:
package wangcong.xml;
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;
/**
* 讲解如何解析xml从中获取我们想要得到的内容
* @author only老K
* xml解析技术: dom4j、sax解析、jdom解析
* 重点是dom4j,后两种已经慢慢被淘汰
*
*/
public class Test4 {
public static void main(String[] args) throws Exception {
InputStream in = Test4.class.getResourceAsStream("students.xml");
SAXReader reader = new SAXReader();//dom4j的
//将配置文件xml内容加载到了内存中
Document doc=reader.read(in);//dom4j的,抛出异常
//System.out.println(doc.asXML());
List<Element> stuEles=doc.selectNodes("/students/student");//得到所以的student元素
for (Element e : stuEles) {
//System.out.println(e.asXML());
if("s002".equals(e.attributeValue("sid"))) {//得到每个sid的内容
Element nameE=(Element) e.selectSingleNode("name");//得到满足sid="s002"的元素name
//System.out.println(nameE.asXML());
//获取标签内的文本内容
System.out.println(nameE.getText());
}
}
}
}
运行结果如下图:
第二种方法:
直接运行如下代码:
package wangcong.xml;
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;
/**
* 讲解如何解析xml从中获取我们想要得到的内容
* @author only老K
* xml解析技术: dom4j、sax解析、jdom解析
* 重点是dom4j,后两种已经慢慢被淘汰
*
*/
public class Test4 {
public static void main(String[] args) throws Exception {
InputStream in = Test4.class.getResourceAsStream("students.xml");
SAXReader reader = new SAXReader();//dom4j的
//将配置文件xml内容加载到了内存中
Document doc=reader.read(in);//dom4j的,抛出异常
Element stuEle002 = (Element) doc.selectSingleNode("/students/student[@sid='s002']");
Element nameEle = (Element) stuEle002.selectSingleNode("name");
System.out.println(nameEle.getText());
}
}
结果如下:
结果一样
4.config.xml实例
完成目标:
1、获取所有action中的type的值
2、获取第二个action中的type的值
3、获取第二个action的所有forward的path
4、获取第二个action的第二个forward的path
package wangcong.xml;
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;
/**
* 完成目标:
1、获取所有action中的type的值
2、获取第二个action中的type的值
3、获取第二个action的所有forward的path
4、获取第二个action的第二个forward的path
* @author only老K
*
*/
public class work {
public static void main(String[] args) throws Exception {
//读取同级目录下的配置文件
InputStream in = Test1.class.getResourceAsStream("config.xml");//得到对应的流
SAXReader reader = new SAXReader();//dom4j的
Document doc=reader.read(in);//dom4j的,抛出异常
//1、获取所有action中的type的值
List<Element> stuEles = doc.selectNodes("/config/action");
for (Element e : stuEles) {
System.out.println(" 1、获取所有action中的type的值"+e.attributeValue("type"));
//2.获取第二个action中的type的值
if("/loginAction".equals(e.attributeValue("path"))) {
System.out.println("2.获取第二个action中的type的值"+e.attributeValue("type"));
}
}
// 3、获取第二个action的所有forward的path
List<Element> foeEle =doc.selectNodes("/config/action[@type='test.LoginAction']/forward");
for (Element e : foeEle) {
// 3、获取第二个action的所有forward的path
System.out.println("3、获取第二个action的所有forward的path"+e.attributeValue("path"));
// 4、获取第二个action的第二个forward的path
if("success".equals(e.attributeValue("name"))) {
System.out.println("4、获取第二个action的第二个forward的path"+e.attributeValue("path"));
}
}
}
}
结果为: