??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览器解析的Q也是说这时?br />在jsp和servlet中的相对地址应该是相对于你的web应用Q即相对?a >http://192.168.0.1/webapp/的? 其用到的地方有: 2.22、客L的地址 因此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均可 例:getClass().getResourceAsStream(filePath);//filePath可以?/filename",q里?代表web 发布根\径下WEB-INF/classes 默认使用该方法的路径是: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 如何创徏\删除\修改\复制目录及文?br /> http://www.gamvan.com/developer/java/2005/2/264.html ȝQ?br /> 通过上面内容的用,可以解决在Web应用服务器端Q移动文Ӟ查找文gQ复?br /> 删除文g{操作,同时Ҏ务器的相对地址Q绝对地址概念更加清晰?br />参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.{内容了解透彻 参考资? java.io.File [『J道习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操作详解 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=704427
前言Q?br /> 前一D|_׃在处理Web应用下的文g创徏与移动等Q因此涉及到很多关于java
中相对\径,l对路径{问题。同Ӟ对于Web应用中的相对路径Q绝对\径,以及Java.io.File
cd习了一下。也找了一些资料。希望大安到类似的问题Q可以更有效的解冟?/p>
1.基本概念的理?/p>
Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表C。例如:"./" 代表当前目录,
"../"代表上目录。这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么写:
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为:actionQ?/webapp/user/a.jsp"或action="<%=request.getContextPath()%>"/user/a.jspQ?br /> 提交到servlet为actiomQ?/webapp/handleservlet"
Javascript也是在客L解析的,所以其相对路径和form表单一栗?
<%=request.getContextPath()%>,以确保所引用的文仉属于Web应用中的目录?br />另外Q应该尽量避免用类?.","./","../../"{类似的相对该文件位|的相对路径Q这?br />当文件移动时Q很Ҏ出问题?/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()
)
Ҏjava.io.File的Doc文挡Q可?
默认情况下new File("/")代表的目录ؓ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>
的\径ؓ?比如用新建文件法试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问?br />
JSP中究竟采用绝对\径还是采用相对\径随着所采用技术的来复杂,q个问题也变得越来越难以解决?br />
Q)采用相对路径遇到的问?br />
l 相对路径固然比较灉|Q但如果惛_刉面内的代码却变得比较困难Q因Z同的面h不同的相对\径,复制后必MҎ一个连接的路径?br />
l 如果面被多于一个的面所包含Q那么被包含面中的相对路径是不正的?br />
l 如果采用Struts的Actionq回面Q那么由于页面\径与Action路径不同Q得浏览器无法正确解释面中的路径Q如面?pages/cust/cust.jspQ图片所有目录ؓ/images/title.gifQ这时在/pages/cust/cust.jsp中的所用的路径为?./../images/title.gif”,但是如果某一个Action的Forward指向q个JSP文gQ而这个Action的\径ؓ/cust/manage.doQ那么页面内容中?./../images/title.gif”就不再指向正确的\径了?br />
解决以上问题g只有使用l对路径了?br />
Q)采用l对路径遇到的问?br />
l 随着不同的Web应用发布方式Q绝对\径的g不同。如Web应用发布为MyAppQ则路径?MyApp/images/title.gif”是正确的,但发布ؓ另一应用时如MyApp2Q这个\径就不对了,也许q个情况比较,但以default方式发布Web应用时以上绝对\径也不同Q?images/title.gif”?br />
二.解决Ҏ
Q) 采用l对路径Q但Z解决不同部v方式的差别,在所有非struts标签的\径前?{pageContext.request.contextPath}Q如原\径ؓQ?br />
?images/title.gif”,改ؓ
?{pageContext.request.contextPath}/images/title.gif”?br />
代码?${pageContext.request.contextPath}”的作用是取出部|的应用E序名,q样不管如何部vQ所用\径都是正的?br />
~点Q?br />
操作不便Q其他工h法正解?{pageContext.request.contextPath}
Q) 采用相对路径Q在每个JSP文g中加入base标签Q如Q?br />
<base href="
http://$
{header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" />
q样所有的路径都可以用相对\径?br />
~点Q?br />
对于被包含的文g依然无效?br />
真正使用旉要灵zd用1Q和Q)Q写出更加健壮的代码?/font>
]]>
用 ?requestDispatcher rd=request.getRequestDispatcher("路径");
rd.forward(request,response);
目地jsp文g中的各种路径都要Ҏ相对于网站根目录?/p>
在MVC的应用中Q从servlet中写ValueBeanQ再转向相应的jsp。是很好的办法,如果处理路径呢,在这U情况下Q如果把各个面的链接,囄的\径,css的\径都Ҏ相对于网站根目录Q是不是很冒险?/p>
我想q在每个资源路径前加上一个变量,自动把相对地址改ؓQ绝对地址QL觉这样太ȝ。开发v来就ȝ透了Q有没有什么更好的办法呢?br />