java-web学习的头疼问题之一(路径问题)

一 、web开发中路径问题:(关于访问servlet时的路径问题)

在浏览器上访问服务器:
1.超链接(get)
2.表单(get post)
3.javascript(get)   location.href=""
4.直接在浏览器地址栏上输入。  (get)


在页面上访问servlet路径问题分析:

1.绝对路径
1.带协议绝对路径
<a href="http://localhost/07_25_servlet/hello">带协议绝对路径</a>
2.不带协议绝对路径(推荐)
<a href="/07_25_servlet/hello">不带协议的绝对路径</a>
这时它的规律  /工程名(虚拟目录名称)/资源名称 



2.相对路径

http://localhost/07_25_servlet/demo1.html    当前页面路径.

http://localhost/07_25_servlet/demo1         要访问的资源路径.

这时通过上述路径就知道在demo1.html中要访问demo1这个servlet
<a href="demo1">访问Demo1Servlet</a>

改变demo1.html路径
将demo1.html放置在WebRoot/admin目录

这时它们路径之间的关系

http://localhost/day07_25_servlet/admin/demo1.html    当前页面路径.

  http://localhost/07_25_servlet/demo1         要访问的资源路径.

此时的型对路径为    <a href="../hello">相对路径</a>

二、获取资源时的路径

1. String getRealPath(String path) 
获取当前web工程下文件的绝对磁盘路径.
2. URL getResource(String path) 
获取一个指定资源的URL
3. InputStream getResourceAsStream(String path) 
获取一个指向指定资源的一个输入流。


案例:
在myeclipse下创建 day10_3这样web工程,在工程下创建四个文件

1.txt--------src下
2.txt--------WebRoot下
3.txt--------WebRoot/WEB-INF
4.txt--------放置在当前工程下

要求1:创建一个java类分别将这个四个文件内容读取出来,显示在控制台上.
// 读取1.txt文件内容
readFile("src/1.txt");
// 读取2.txt文件内容
readFile("WebRoot/2.txt");
// 读取3.txt文件内容
readFile("WebRoot/WEB-INF/3.txt");
// 读取4.txt文件内容
readFile("4.txt");
   

       要求2:创建一个servlet,在servlet中将部署到tomcat下的所有的x.txt文件内容读取出来.


getRealPath("/")获取的是当前工程在服务器上的的绝对磁盘路径。
例如:D:\apache-tomcat-7.0.26\webapps\day10_3\

分析1.txt 2.txt  3.txt  4.txt文件部署到tomcat下的路径:


1.txt---因为它是在src下,部署到tomcat下时会被放置在WEB-INF/classess目录下.
2.txt---因为它在WebRoot下,部署到tomcat下时会被放置在工程根路径下.
3.txt---因为它在WEB-INF下部署到tomcat下时会被放置在WEB-INF下.
4.txt--因为它在myeclipse工程下,不会被部署到tomcat服务器.

要在servlet中获取1.txt   2.txt  3.txt绝对磁盘路径

this.getServletContext().getRealPath("/WEB-INF/classes/1.txt");
this.getServletContext().getRealPath("/2.txt");
this.getServletContext().getRealPath("/WEB-INF/3.txt");

扩展知识点:
在开发中有另外一种可以获取一个资源的磁盘路径方案:根据Class获取.

可以根据Class获取classpath路径。

java project工程中  java文件编译后的.class文件默认放置在  bin目录下.
web project工程中  java文件编码后的.class文件默认放置在  classess目录下.



Class.getResource("/").getPath();可以获取.class文件所在的路径。

//我们在开发中根据classpath获取路径还有另外一种方式:

Class.getClassLoader().getResource();


Class.getResource()与Class.getClassLoader().getResource()区别?

Class.getResource它依赖于当前类的classLoader来获取,如果在写路径时使用 "/"代表的是从classpath根路径查找.
如果不写"/"代表的是从当前Class所代表的类的路径查找.


Class.getClassLoader().getResource();代表的都是从classpath路径查找.


在开如使用时,如果使用 Class.getResource("/"); 代表从classpath路径查找.
 如果使用Class.getClassLoader().getResource("");都不写"/"  这时得到的就是classpath路径.
如果写了"/"有可以得到null值



结论:
Class.getResource("/");
Class.getClassLoader().getResource("");


补充:

以web工程为例:

Class.getResource("/"); 得到的就是classes目录磁盘路径.  例如:  d:/tomcat/webapps/day10/WEB-INf/classes
Class.getResource(""); 得到的就是Class对应的类它的绝对磁盘路径。 d:/tomcat/webapps/day10/WEB-INf/classes/cn/itcast/servlet

Class.getClassLoader().getResource("");得到的就是classes目录磁盘路径.  例如:  d:/tomcat/webapps/day10/WEB-INf/classes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值