一:java中配置文件的三种配置位置及读取方式
1:同包
配置文件和帮助类在同一个包中
package parse; //帮助类 import java.io.InputStream; import java.util.Properties; /** * 配置文件存在位置 * 1,同包 * @author T440s * */ public class Dome { public static void main(String[] args) throws Exception{ //导输入流 InputStream in=Dome.class.getResourceAsStream("db.properties"); Properties p=new Properties(); p.load(in); //输出测试一下 System.out.println(p.getProperty("uname")); System.out.println(p.getProperty("upass")); } }
2:根路径
根路径和同包的配置方式是一样的只是加了一个‘ / ’和换到了另一个源文件夹
源文件夹:
package parse; import java.io.InputStream; import java.util.Properties; /** * 配置文件存在位置 * 1,同包 * @author T440s * */ public class Dome1 { public static void main(String[] args) throws Exception{ //导输入流 InputStream in=Dome1.class.getResourceAsStream("/db.properties"); Properties p=new Properties(); p.load(in); //输出测试一下 System.out.println(p.getProperty("uname")); System.out.println(p.getProperty("upass")); } }
3:WEB-INF安全路径
WEB-INF 安全目录:放在这个目录下的文件不能直接被外界访问 只能间接访问
package parse; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DomeServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub InputStream in=req.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")); } }
二:dom4j的使用
例:
<?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>
dom4j的常用方法:
selectNodes-----获得节点以下所有子节点
selectSingleNode-----获取单个节点信息
attributeValue-----获取属性值
getText-----获取文本内容
package com.sg.parse; import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dome2 { //获取小王人名 public static void main(String[] args) throws Exception{ /** * 1,读取到students.xml的xml串内容 */ InputStream in=Dome2.class.getResourceAsStream("students.xml"); SAXReader sr=new SAXReader(); Document doc=sr.read(in); //2,解析获取到所有的student标签的内容 List<Element> stuEles=doc.selectNodes("/students/student"); for (Element stuEle : stuEles) { //3,获取所有student标签的sid String sid=stuEle.attributeValue("sid"); //4,当sid=s003的时候,获取Name标签内容 if("s003".equals(sid)) { Element nameEle=(Element) stuEle.selectSingleNode("name"); System.out.println(nameEle.getText()); } } } }
三:Xpath的使用
1;Xpath比dom4j可以更快的获得值
以上面的例
package com.sg.parse; import java.io.InputStream; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; //求小芳 public class Dome3 { public static void main(String[] args) throws Exception{ 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()); } }
2;游览器Xpath的使用
第一步:右键打开
第二步:右键
就复制了游览器Xpath
四:练习
<?xml version="1.0" encoding="UTF-8"?>
<!--
config标签:可以包含0~N个action标签
-->
<config>
<!--
action标签:可以饱含0~N个forward标签
path:以/开头的字符串,并且值必须唯一 非空
type:字符串,非空
-->
<action path="/regAction" type="test.RegAction">
<!--
forward标签:没有子标签;
name:字符串,同一action标签下的forward标签name值不能相同 ;
path:以/开头的字符串
redirect:只能是false|true,允许空,默认值为false
-->
<forward name="failed" path="/reg.jsp" redirect="false" />
<forward name="success" path="/login.jsp" redirect="true" />
</action>
<action path="/loginAction" type="test.LoginAction">
<forward name="failed" path="/login.jsp" redirect="false" />
<forward name="success" path="/main.jsp" redirect="true" />
</action>
</config>
package com.sg.parse;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dome4 {
public static void main(String[] args) throws Exception{
InputStream in=Dome2.class.getResourceAsStream("config.xml");
SAXReader sr=new SAXReader();
Document doc=sr.read(in);
//解析获取到所有的action标签的内容
List<Element> stuEles=doc.selectNodes("/config/action");
for (Element stuEle : stuEles) {
//获取所有type属性的内容
String type=stuEle.attributeValue("type");
System.out.println(type);
}
System.out.println("--------------");
//获取第二个type
String type = stuEles.get(1).attributeValue("type");
System.out.println(type);
System.out.println("--------------");
//获取第二个action下的所有forward的所有path
Element element = stuEles.get(1);//获取第二个action节点
List<Element> forwardNodes = element.selectNodes("forward");//获取第二个action下的所有forward节点
for (Element forwardEl : forwardNodes) {
String path=forwardEl.attributeValue("path");
System.out.println(path);
}
System.out.println("--------------");
//获取第二个action下的第二个forward的path
String path=forwardNodes.get(1).attributeValue("path");
System.out.println(path);
}
}