欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对于java项目的路径问题

程序员文章站 2022-05-31 11:47:19
...

@TOC对于java项目的路径问题

1.绝对路径和相对路径概念的理解

  • 绝对路径:
     绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)

例如:

d:/mp3/test.txt                         代表了test.txt文件的绝对路径.
http://www.sun.com/index.html           也代表了一个URL绝对路径.
http://www.sun.com/upload/car.jpg       也代表了一个URL绝对路径.
  • 相对路径:
      相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录)

例如:

Servlet,
"/"代表Web应用的根目录.和物理路径的相对表示.
"./" 代表当前目录,
"../"代表上级目录.这种类似的表示,也是属于相对路径.

2.关于JSP/Servlet中的相对路径和绝对路径.

2.1服务器端的地址

服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://localhost/webapp/的.
其用到的地方有:

转发和重定向
forward:servlet中的request.getRequestDispatcher(address); 
这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:
request.getRequestDispatcher("/user/a.jsp")这个"/"是相对于当前的web应用webapp来说,其绝对地址就是:http://localhost/webapp/user/a.jsp.

sendRedirect:在jsp中即可以写http://localhost/test.jsp 也可以写相对路径但URL显示发生跳转

2.22客户端的地址

所有的html页面中的相对地址都是相对于服务器根目录(http://localhost/)的,
而不是(跟目录下的该Web应用的目录)http://localhost/webapp/的.
Html中的form表单的action属性的地址应该是相对于服务器根目录(http://localhost/)的,
所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action="/user/a.jsp;
提交到servlet为actiom="/webapp/handleservlet"Javascript也是在客户端解析的,所以其相对路径和form表单一样.
  因此,一般情况下,在jsp/html页面等引用的CSS,Javascript.Action等属性前面最好都加上"/",以确保所引用的文件都属于Web应用中的目录.
另外,应该尽量避免使用类似".","./","…/…/"等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题.

在Jsp,Servlet,Java中详细获得路径的方法!

1.jsp中取得路径:

以工程名为TEST为例:

(1)得到包含工程名的当前页面全路径:request.getRequestURI()
结果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
结果:/TEST
(3)得到当前页面所在目录下全名称:request.getServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/test.jsp
(4)得到页面所在服务器的全路径:application.getRealPath(“页面.jsp”)
结果:D:\resin\webapps\TEST\test.jsp
(5)得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
结果:D:\resin\webapps\TEST

2.在类中取得路径:

(1)类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:System.getProperty(“user.dir”)
结果:D:\TEST

3.在Servlet中取得路径:

(1)得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
(2)得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/TEST/test
(3)得到相对地址:request.getRequestURI()
结果:/TEST/test

4.如何获得当前文件路径

常用:
(1).Test.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
(2).Test.class.getResource("/")
得到的是当前的classpath的绝对URI路径。
(3).Thread.currentThread().getContextClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
(4).Test.class.getClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
(5).ClassLoader.getSystemResource("")
得到的也是当前ClassPath的绝对URI路径。
尽量不要使用相对于System.getProperty(“user.dir”)当前用户目录的相对路径,后面可以看出得出结果五花八门。
(6) new File("").getAbsolutePath()也可用。

5.Web服务器

(1).Tomcat
在类中输出System.getProperty(“user.dir”);显示的是%Tomcat_Home%/bin
(2).Resin
不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
的路径为根.比如用新建文件法测试File f = new File(“a.htm”);
这个a.htm在resin的安装目录下
(3).如何读文件
使用ServletContext.getResourceAsStream()就可以
(4).获得文件真实路径
String file_real_path=ServletContext.getRealPath(“mypath/filename”);
不建议使用request.getRealPath("/");

相关标签: Java基础