??xml version="1.0" encoding="utf-8" standalone="yes"?> ================================================================================= l对路径Q绝对\径就是你的主上的文件或目录在硬盘上真正的\径,(URL和物理\?例如Q?br />C:\xyz\test.txt 代表了test.txt文g的绝对\径?a >http://www.sun.com/index.htm也代表了一?br />URLl对路径?/p> 相对路径Q相对与某个基准目录的\径。包含Web的相对\径(HTML中的相对目录Q,例如Q在 另外关于URIQURL,URN{内容,请参考RFC相关文档标准?/p> RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, 2.1服务器端的地址 服务器端的相对地址指的是相对于你的web应用的地址Q这个地址是在服务器端解析?br />Q不同于html和javascript中的相对地址Q他们是由客L(fng)览器解析的Q也是说这时?br />在jsp和servlet中的相对地址应该是相对于你的web应用Q即相对?a >http://192.168.0.1/webapp/的? 其用到的地方有:(x) 2.22、客L(fng)的地址 因此Q一般情况下Q在JSP/HTML面{引用的CSS,Javascript.Action{属性前面最好都加上 3.2 Servlet中获得当前应用的相对路径和绝对\?br /> 根目录所对应的绝对\?request.getServletPath(); 4.java 的Class中获得相对\径,l对路径的方?br />4.1单独的JavacM获得l对路径 public class FileTest { System.out.println(Thread.currentThread().getContextClassLoader().getResource("")); System.out.println(FileTest.class.getClassLoader().getResource("")); System.out.println(ClassLoader.getSystemResource("")); 4.2服务器中的Javac获得当前\径(来自|络Q?br />(1).Weblogic WebApplication的系l文件根目录是你的weblogic安装所在根目录?br />例如Q如果你的weblogic安装在c:\bea\weblogic700..... 在yourwebapp\yourconfig\yourconf.propertiesQ?br />q样使用Q?br />new FileInputStream("./yourconfig/yourconf.properties"); (2).Tomcat 在类中输出System.getProperty("user.dir");昄的是%Tomcat_Home%/bin (3).Resin 不是你的JSP攄相对路径,是JSP引擎执行q个JSP~译成SERVLET (4).如何ȝ对\径哪Q?/p> 在Java文g中getResource或getResourceAsStream均可 例:(x)getClass().getResourceAsStream(filePath);//filePath可以?/filename",q里?代表web 发布根\径下WEB-INF/classes 默认使用该方法的路径是:(x)WEB-INF/classes。已l在Tomcat中测试?/p> 5.d文g时的相对路径Q避免硬~码和绝对\径的使用。(来自|络Q?br />5.1 采用Spring的DI机制获得文gQ避免硬~码?br /> 参考下面的q接内容Q?br /> http://www.javajia.net/viewtopic.php?p=90213& java文g操作详解QJava中文|) JAVA 如何创徏\删除\修改\复制目录?qing)文?br /> http://www.gamvan.com/developer/java/2005/2/264.html ȝQ?br /> 通过上面内容的用,可以解决在Web应用服务器端Q移动文Ӟ查找文gQ复?br /> 删除文g{操作,同时Ҏ(gu)务器的相对地址Q绝对地址概念更加清晰?br />参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.{内容了解透彻 参考资? java.io.File [『J道习(fn)l』]JSP和Servlet中的l对路径和相对\?br />http://w3china.org/blog/more.asp?name=pcthomas&id=9122&commentid=12376 JSP,Servlet,Class获得当前应用的相对\径和l对路径 如何获得当前文g路径 通过Spring注入机制Q取得文?br />http://www.javajia.net/viewtopic.php?p=90213& 配置文g的读? d配置文g,通过虚拟路径或相对\径读取一个xml文gQ避免硬~码Q? 常用 java File 操作c?br />http://www.easydone.cn/014/200604022353065155.htm Java文g操作大全 Java文g操作详解
中相对\径,l对路径{问题。同Ӟ对于Web应用中的相对路径Q绝对\径,以及(qing)Java.io.File
cd?fn)了一下。也找了一些资料。希望大安到类似的问题Q可以更有效的解冟?
1.基本概念的理?/p>
Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表C。例如:(x)"./" 代表当前目录,
"../"代表上目录。这U类似的表示Q也是属于相对\径?/p>
(http://www.ietf.org/rfc/rfc2396.txt)
2.关于JSP/Servlet中的相对路径和绝对\径?/p>
forwardQservlet中的request.getRequestDispatcher(address);q个address?br />在服务器端解析的Q所以,你要forward到a.jsp应该q么写:(x)
request.getRequestDispatcher(?user/a.jsp?q个/相对于当前的web应用webappQ?br />其绝对地址是Q?a >http://192.168.0.1/webapp/user/a.jsp?
sendRedirectQ在jsp?lt;%response.sendRedirect("/rtccp/user/a.jsp");%>
所有的html面中的相对地址都是相对于服务器根目?http://192.168.0.1/)的,
而不?跟目录下的该Web应用的目?http://192.168.0.1/webapp/的?
Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,
所以,如果提交到a.jsp为:(x)actionQ?/webapp/user/a.jsp"或action="<%=request.getContextPath()%>"/user/a.jspQ?br /> 提交到servlet为actiomQ?/webapp/handleservlet"
Javascript也是在客L(fng)解析的,所以其相对路径和form表单一栗?
<%=request.getContextPath()%>,以确保所引用的文仉属于Web应用中的目录?br />另外Q应该尽量避免用类?.","./","../../"{类似的相对该文件位|的相对路径Q这?br />当文件移动时Q很Ҏ(gu)出问题?/p>
3. JSP/Servlet中获得当前应用的相对路径和绝对\?br />3.1 JSP中获得当前应用的相对路径和绝对\?br /> 根目录所对应的绝对\?request.getRequestURI()
文g的绝对\径 ? :application.getRealPath(request.getRequestURI());
当前web应用的绝对\?:application.getRealPath("/");
取得h文g的上层目?new File(application.getRealPath(request.getRequestURI())).getParent()
文g的绝对\径 ?:request.getSession().getServletContext().getRealPath
(request.getRequestURI())
当前web应用的绝对\?:servletConfig.getServletContext().getRealPath("/");
(ServletContext对象获得几种方式Q?br /> javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)
Ҏ(gu)java.io.File的Doc文挡Q可?
默认情况下new File("/")代表的目录ؓ(f)QSystem.getProperty("user.dir")?br /> 一下程序获得执行类的当前\?br />package org.cheng.file;
import java.io.File;
public static void main(String[] args) throws Exception {
System.out.println(FileTest.class.getResource(""));
System.out.println(FileTest.class.getResource("/")); //Class文g所在\径?
System.out.println(new File("/").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
}
}
那么Q你的文件根路径是c:\.
所以,有两U方式能够让你访问你的服务器端的文gQ?br />a.使用l对路径Q?br />比如你的参数文件放在c:\yourconfig\yourconf.propertiesQ?br />直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径Q?br />相对路径的根目录是你的webapplication的根路径Q即WEB-INF的上一U目录,你的参数文件放
q两U方式均可,自己选择?/p>
的\径ؓ(f)?比如用新建文件法试File f = new File("a.htm");
q个a.htm在resin的安装目录下
5.2 配置文g的读?br /> 参考下面的q接内容Q?br /> http://dev.csdn.net/develop/article/39/39681.shtm
5.3 通过虚拟路径或相对\径读取一个xml文gQ避免硬~码
参考下面的q接内容Q?br /> http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8
6.Java中文件的常用操作Q复ӞUdQ删除,创徏{)Q来自网l)
常用 java File 操作c?
http://www.easydone.cn/014/200604022353065155.htm
Java文g操作大全QJSP中)
http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html
http://www.51cto.com/html/2005/1108/10947.htm
对其他方面的理解可以更加深入和透彻?br />==================================================================================
java/docs/
java.io.InputStream
java.io.OutputStream
java.io.FileInputStream
java.io.FileReader;
java.io.FileOutputStream
java.io.FileWriter;
java.net.URI
java.net.URL
l对路径与相对\径祥?br />http://www.webjx.com/htmldata/2005-02-26/1109430310.html
http://cy.lzu.edu.cn/cy/club/clubPage.jsp?ccStyle=0&tID=886&ccID=77
http://www.matrix.org.cn/resource/article/44/44113_java.html
http://dev.csdn.net/develop/article/39/39681.shtm
http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8
http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html
http://www.51cto.com/html/2005/1108/10947.htm
]]>
如果你用q个Ҏ(gu)来杳看你JSP面Q可以发现它的\径很奇怪,其实它是JSP引擎路径。所以当你用
new File(String path);
Ӟ如果用的是相对\径,得相对真实的当前\径,而不是Q何你惛_然的路径 ?br />当然对于q个Ҏ(gu)用”绝对\径“一般是不会(x)出错的。只是这PE序的灵zL就受到了限制。下面就是一个绝对\?的例子:(x)
String xmlPath = "D:\\PublicFiles\\WCI\\navigation.xml";
Part 2
FileStream file = this.getClass().getClassLoader().getResourceAsStream(String xmlPath);
q个有点复杂Q我了解的也不多Q这里就说说现在我所了解的吧Q以后再补充Q?br />System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
如此可以看到相对?”的根\径?br />对 ?FileStream fileStream = this.getClass().getClassLoader().getResourceAsStream(filePath);
q里的filePathg只能用相对\径,臛_我不知道用绝对\径怎么表示Q?br />下面取个相对路径的例子:(x)
String filePath = "/../../Resources/XML/navigation.xml"; //表达规则和LINUX一栗?br />
System.out.println(this.getClass().getClassLoader().getResource(".").getPath());
System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
System.out.println(this.getClass().getClassLoader().getResource("").getPath());
System.out.println(this.getClass().getClassLoader().getResource("..").getPath());
怿Q看q这四个路径l果应该知道在哪放|自q文g了,用什么样的语句能扑ֈ?br />
今天在写一个写JSPӞ到上面的文件\径的问题Q简单的了解下,怿其中定有不少的错误,希望你能提出q改正,我在此谢q了Q?br />
]]>
JSP 中究竟采用绝对\径还是采用相对\径随着所采用技术的来复杂,q个问题也变得越来越难以解决?/span>
Q) 采用相对路径遇到的问?/span>
l 相对路径固然比较灉|Q但如果惛_刉面内的代码却变得比较困难Q因Z同的面h不同的相对\径,复制后必MҎ(gu)一个连接的路径?/font>
l 如果面被多于一个的面所包含Q那么被包含面中的相对路径是不正的?/font>
l 如果采用 Struts ?/span> Action q回面Q那么由于页面\径与 Action 路径不同Q得浏览器无法正确解释面中的路径Q如面?/span> /pages/cust/cust.jsp Q图片所有目录ؓ(f) /images/title.gif Q这时在 /pages/cust/cust.jsp 中的所用的路径?/span> ?./../images/title.gif?/font> Q但是如果某一?/span> Action ?/span> Forward 指向q个 JSP 文gQ而这?/span> Action 的\径ؓ(f) /cust/manage.do Q那么页面内容中 ?./../images/title.gif?/font> ׃再指向正的路径了?/span>
解决以上问题g只有使用l对路径了?/font>
Q) 采用l对路径遇到的问?/span>
l 随着不同?/span> Web 应用发布方式Q绝对\径的g不同。如 Web 应用发布?/span> MyApp Q则路径 ?MyApp/images/title.gif?/font> 是正的Q但发布为另一应用时如 MyApp2 Q这个\径就不对了,也许q个情况比较?yu),但?/span> default 方式发布 Web 应用时以上绝对\径也不同Q?/span> ?images/title.gif?/font> ?/span>
Q) 采用l对路径Q但Z解决不同部v方式的差别,在所有非 struts 标签的\径前?/span> ${pageContext.request.contextPath} Q如原\径ؓ(f)Q?/span>
?images/title.gif?/font> Q改?/span>
?{pageContext.request.contextPath}/images/title.gif?/font> ?/span>
代码 ?${pageContext.request.contextPath}?/font> 的作用是取出部v的应用程序名Q这样不如何部|Ԍ所用\径都是正的?/span>
~点Q?/span>
操作不便Q其他工h法正解?/span> ${pageContext.request.contextPath}
Q) 采用相对路径Q在每个 JSP 文g中加?/span> base 标签Q如Q?/span>
<base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" />
q样所有的路径都可以用相对\径?/font>
~点Q?/span>
对于被包含的文g依然无效?/font>
真正使用旉要灵zd用1Q和Q)Q写出更加健壮的代码?/span>
前提Q假设你?/span>
Http
地址?/span>
http://192.168.0.1/
你的
web
应用?/span>
webapp
Q那么你?/span>
web
应用
URL
?/span>
http://192.168.0.1/webapp/
web
应用的目录结构:(x)
webapp/
web-inf/
classes/
lib/
web.xml
<servlet-mapping>
<servlet-name>handleservlet</servlet-name>
<url-pattern>/handleservlet</url-pattern>
此映是相对于当?/span>
web
应用?/span>
</servlet-mapping>
user/
a.jsp
b.jsp
images/
css/
js/
所有相对\径都是由?/span>
/
”开头的。如Q?/span>
/image/a.gif
Q?/span>
/user/main.jsp
Q大家知道在
html
中的相对路径是这L(fng)Q?/span>
有个
html
文gQ?/span>
a.html
Q其中有
<link href="one.css" rel="stylesheet" type="text/css">
Q其?/span>
href
属性表C引用的
css
文g的\径?/span>
one.css
Q表C?/span>
one.css
?/span>
a.hmtl
处于同一个目?/span>
user/one.css
Q表C?/span>
one.css
处于
a.html
所在目录的子目?/span>
user
中?/span>
../one.css
Q表C?/span>
one.css
位于
a.hmtl
上一U目录下Q?/span>
../../one.css
Q表C?/span>
one.css
位于
a.hmtl
上一U目录的上一U目录下Q?/span>
./
Q表C和
a.hmtl
同一目录
我们UCq相对\径ؓ(f)
html
相对路径
1?/font>
服务器端的地址
服务器端的相对地址指的是相对于你的
web
应用的地址Q这个地址是在服务器端解析的(不同?/span>
html
?/span>
javascript
中的相对地址Q他们是由客L(fng)览器解析的Q也是说这时候在
jsp
?/span>
servlet
中的相对地址应该是相对于你的
web
应用Q即相对?/span>
http://192.168.0.1/webapp/
的?/span>
其用到的地方有:(x)
forwarder
Q?/span>
servlet
中的
request.getRequestDispatcher(address);
q个
address
是在服务器端解析的,所以,你要
forwarder
?/span>
a.jsp
应该q么写:(x)
request.getRequestDispatcher(?user/a.jsp?
q个
/
相对于当前的
web
应用
webapp
Q其l对地址是Q?/span>
http://192.168.0.1/webapp/user/a.jsp
?/span>
sendRedirect
Q在
jsp
?/span>
<%response.sendRedirect("/rtccp/user/a.jsp");%>
2?/font>
客户端的地址
所有的
html
中的相对地址都是相对?/span>
http://192.168.0.1/
的,而不?/span>
http://192.168.0.1/webapp/
的?/span>
Html 中的 form 表单?/span> action 属性的地址应该是相对于 http://192.168.0.1/ 的,所以,如果提交?/span> a.jsp 为:(x) action Q?/span> ?webapp/user/a.jsp?/font> Q提交到 servlet ?/span> action Q?/span> ?webapp/handleservlet?o:p>
Javascript
也是在客L(fng)解析的,所以其相对路径?/span>
form
表单一栗?/span>
3?/font>
站点根目录和
css
路径问题
我们U类DL(fng)相对路径
/webapp/?
为相对于站点根目录的相对路径?/span>
当在
jsp
中引?/span>
css
Ӟ如果其相对\径相对于当前
jsp
文g的,而在一个和q个
jsp
的\径不一L(fng)
servlet
?/span>
forwarder
q个
jsp
Ӟ׃(x)发现q个
css
样式Ҏ(gu)没有起作用。这是因为在
servlet
中{发时
css
的\径就是相对于q个
servlet
的相对\径而非
jsp
的\径了。所以这时候不能在
jsp
中用q样的\径:(x)
<link href="one.css" rel="stylesheet" type="text/css">
或?/span>
<link href="../../one.css" rel="stylesheet" type="text/css">
cM
href="one.css"
?/span>
../../one.css
?/span>
html
相对路径是相对于引用q个
css
的文件的相对路径。而在
servlet
中{发时是相对于这?/span>
servlet
的相对\径了Q因?/span>
jsp
路径?/span>
servlet
路径是不一L(fng)Q所以这L(fng)引用肯定是出错的?/span>
所以这个时候,要用站点根目录,是相对?/span>
http://192.168.0.1/
的目录,以?/span>
/
”开头?/span>
因此上述错误应更正ؓ(f)
href=?webapp/one.css?/font>
cM的站Ҏ(gu)目录的相对目录。这样在
servlet
转发后和
jsp
中都是相对于站点根目录的相对路径Q就能正用所定义?/span>
css
样式了?/span>
说了q么多,不知道你了解没,有什么问题留aQ大家一块交!