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

Java访问路径相关

程序员文章站 2022-05-09 23:47:46
...

URL , URI

URL是一个地址,URI是一个资源;URI强调的是给资源标记命名,URL强调的是给资源定位
URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。
在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL类可以打开一个到达资源的流

访问路径问题

无论URL或URI一般都分为2部分,资源路径与资源名称
路径最后一个/后的为资源名称,/前面为资源路径,
资源路径能否独立完成资源的准确定位为依据,将访问路径分为绝对路径和相对路径,
绝对路径 = 参照路径 + 相对路径,浏览器或服务器会自动为相对路径添加参照路径
相对路径又分为以/开头的和以路径名称开头的两类
以/开头的又分为前台路径(作用:查找)和后台路径(作用:标识)

## 以/开头的相对路径

以/开头的前台路径:由浏览器解析执行的代码中所包含的路径,如html,css,js中的路径和JSP中的静态路径(html中的路径),前台路径的参照路径是web服务器的根路径,协议+主机地址,即http://127.0.0.1:8080

以/开头的后台路径:由服务器解析执行的代码中所包含的路径,java代码中的路径,jsp中的动态部分路径,xml中配置的路径;后台路径的参照路径是web应用的根路径,即WebRoot,协议+主机地址+项目名称,即http://127.0.0.1:8080/serlvlet_01

## 以路径名称开头的

其参照路径是当前访问路径的资源路径

以/开头的相对路径的举例:

以/开头的前台路径:
示例1:在html中一个图片标签
<*img alt = “car” src = “/imgs/car.jpg”/>
上述是在HTML中所以是一个前台路径,所以加/;其参照路径是http://127.0.0.1:8080,其转换的绝对路径为http://127.0.0.1:8080/imgs/car.jpg,如果在web服务器下是没有imgs这个目录的,就无法显示
<*img alt = “car” src = “/servlet/imgs/car.jpg”/>在web服务器下是有servlet_01这个目录的,所以可以显示,因而这个图片地址还要加上项目名称才行
示例2:html中的表单路径,我们通常访问格式如下
<*form action = “someServlet” method = “POST”>
xxxxxxxxxxxxxxxxxxxx

如果不清楚是否加/,就将action的路径加上/改为前台路径(action = "/someServlet")来考虑;结果是不可以访问,因为web服务器下没有someServlet,所以会报404;如果想加/,必须加上项目名,这个someServlet是someServlet_01这个项目下的;action = "/someServlet_01/someServlet" 示例3:servlet中的后台路径,在someServlet中请求转发到otherServlet request.getRequestDispatcher("/otherServlet").forward(request,response); 我们不知这个otherServlet路径是否加/,那就加/来当做后台路径来考虑, 后台路径参照路径就是http://127.0.0.1:8080/ + serlvlet_01(项目名) 绝对路径就是http://127.0.0.1:8080/serlvlet_01/otherServlet,这是服务器解析的, 而服务器中对OtherServlet指定的访问路径在xml中注册了 /otherServlet,这个注册的后台路径的绝对路径是http://127.0.0.1:8080/serlvlet_01(项目名) + /otherServlet ,与上述请求的路径一致,所以otherServlet需要加/才能访问资源 实例4:关于重定向的特例 response.sendRedirect("/otherServlet");这个后台路径按我们实例3 的分析应该可以访问到资源,但是结果404(实际访问路径http://127.0.0.1:8080/otherServlet),http://127.0.0.1:8080/下没有otherServlet,它少了项目名称;因为sendRedirect方法的本质决定的(这个方法可以跳到其他资源),其参照路径不在是http://127.0.0.1:8080/serlvlet_01,而是http://127.0.0.1:8080;所以需要加上项目的根路径才能跳转response.sendRedirect("/serlvlet_01/otherServlet");而项目根路径不能写死,所以response.sendRedirect(request.getContextPath() + "/otherServlet"); 注意只有这一种是特例,将来我们学习的其他方式实现的重定向不是特例

以路径名称开头的举例:

以路径名称开头,其参照路径是当前访问路径的资源路径
示例5:index.html中的路径
<*img alt = “car” src = “imgs/car.jpg”/>与<*img alt = “car” src = “/servlet_01/imgs/car.jpg”/>这个前台路径都可以显示
<*img alt = “car” src = “imgs/car.jpg”/>的参照路径是当前访问路径的资源路径,即初始化页面的资源路径,http://127.0.0.1:8080/serlvlet_01/index.html中的资源路径
http://127.0.0.1:8080/serlvlet_01,然后加上/和imgs/car.jpg即为
http://127.0.0.1:8080/serlvlet_01/imgs/car.jpg,所以可以显示。form表单的action属性以路径开头也是这个原理
示例6
request.getRequestDispatcher(“otherServlet”).forward(request,response);
这个不加/,其参照路径就是当前访问路径(http://127.0.0.1:8080/serlvlet_01/someServlet)的资源路径(http://127.0.0.1:8080/serlvlet_01);其绝对路径是http://127.0.0.1:8080/serlvlet_01/otherServlet,所以也是可以访问的
response.sendRedirect(“otherServlet”);也是可以访问的,不需要加/,这个以路径开头的不是特例
注意;如果加/,不加/都可以,建议加/,因为加/的路径的参照路径是web服务器或应用的根路径是不可变的;而不加/的参照路径是当前访问路径的资源路径是可变的

相关标签: Java 路径