Java对web资源的解析
2016-04-20 22:14
411 查看
通常情况下,资源会有两种放置path,一个是src目录下,经编译会处于web工程下的WEB-INF/classes目录下;一种是WebRoot下,经编译处于工程根目录下。
这里我以对web配置资源作为例子来演示如何解析web资源,web配置通常又会以properties文件和xml文件出现。如上图所示
一、当资源放置在src目录下面时,解析资源可以有两种方式:使用ServletContext和类装载器ClassLoader。
1、使用ServletContext
二、 当资源放置在webroot下时,只需要修改相应的路径可采取同样的方式进行解析。
这里我以对web配置资源作为例子来演示如何解析web资源,web配置通常又会以properties文件和xml文件出现。如上图所示
一、当资源放置在src目录下面时,解析资源可以有两种方式:使用ServletContext和类装载器ClassLoader。
1、使用ServletContext
package com.zpc.servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; public class GetPropDemo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获得InputStream,有两种方式获得,使用getResourceAsStream() InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); //或者使用getRealPath获得 //String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties"); //FileInputStream is = new FileInputStream(new File(path)); //2.如果是properties文件则用Properties类获得 Properties prop = new Properties(); prop.load(is); System.out.println(prop.getProperty("driver")); //3.如果是xml文件 SAXReader reader = new SAXReader(); try { Document documnent = reader.read(is); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } //然后dom4j方式获得xml内的数据,可以参照另一篇专门讲解xml解析的文章 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }2、使用ClassLoader
//得到InputStream,同样有两种方式,,使用getResourceAsStream() //InputStream is = GetPropDemo.class.getClassLoader().getResourceAsStream("db.properties"); //或者使用GetResource() URL url = GetPropDemo.class.getClassLoader().getResource("db.properties"); String path = url.getPath(); //读 FileInputStream in = new FileInputStream(path); //写 FileOutputStream out = new FileOutputStream(path); Properties prop = new Properties(); prop.load(in); prop.setProperty("username", "admin"); //写入propties文件 prop.store(out, "");由上面可以看出,当只需对资源进行读取时,使用代表web工程的对象ServletContext更方便,当需要修改资源的的数据时则使用类装载器。但对资源进行修改在实际开发中并不常见。
二、 当资源放置在webroot下时,只需要修改相应的路径可采取同样的方式进行解析。
InputStream is = this.getServletContext().getResourceAsStream("/db.properties"); Properties prop = new Properties(); prop.load(is); System.out.println(prop.getProperty("driver"));有一点,当读取资源数据较大,超过JVM承载时,则不能用类装载器,而只能使用ServeletContext获取。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- GUI - Web前端开发框架
- 介绍一款信息管理系统的开源框架---jeecg
- Extjs4.0 最新最全视频教程
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序