getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath、getPathInfo的区别;URI和URL的区别比较;

本篇博客的目的是:在【OA系统十七:请假功能四:编写Controller代码;(实现请假申请的控制器;仅仅涉及新增部分的Controller代码)】中的遇到了【String uri = request.getRequestURI();】,而对【String uri = request.getRequestURI();】有点不清楚;本篇博客就是为了详细阐述这个问题的。

本篇博客参考和转载的博客有:【request.getRequestURL()和request.getRequestURI()的区别】,【getContextPath、getServletPath、getRequestURI、getRealPath、getRequestURL、getPathInfo();的区别】,【URI和URL的区别比较与理解】;

目录

一: getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath、getPathInfo的区别

(1)getContextPath():返回上下文路径(也就是工程名);

(2)getServletPath():返回除去host和工程名部分的路径;

(3)getRequestURI():返回除去host(域名或者ip)部分的路径;

(4)getRequestURL():返回的整个URL的路径请求;

(5)getRealPath():返回的文件所在的绝对路径,相对于当前计算机的真实路径

(6)getPathInfo():这个方法返回请求的实际URL相对于请求的serlvet的url的路径。

一个案例:这个案例是在【OA系统十七:请假功能四:编写Controller代码;(实现请假申请的控制器;仅仅涉及新增部分的Controller代码)】中的项目中演示的

二:URI和URL的区别(这部分没必要深究,瞅一眼就行)

(1)URI

(2)URL

(3)URI和URL的区别


一: getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath、getPathInfo的区别

本部分参考自:request.getRequestURL()和request.getRequestURI()的区别getContextPath、getServletPath、getRequestURI、getRealPath、getRequestURL、getPathInfo();的区别

(1)getContextPath():返回上下文路径(也就是工程名);

          ● 比如某个web工程的工程名是:testWebProject,而且web工程的上下文路径也设置成了/testWebProjec,,那么getContextPath()方法的返回值就是/testWebProjec;

          ● 如果我们把工程的映射为/,那么getContextPath()方法的返回值就是空;

……………………………………………………

(2)getServletPath():返回除去host和工程名部分的路径;

     比如某个web工程的工程名是hahaha,然后这个工程的上下文路径我们也设置成了/hahaha;

          ● 当访问某个url为ppp的Servlet的时候,getServletPath()返回值就是/ppp;(访问url是:http://localhost:8080/hahaha/ppp;getServletPath()返回值是/ppp)

          ● 当访问工程的resource目录下的login.jsp这个文件的时候,getServletPath()返回值就是/resource/login.jsp;(访问url是:http://localhost:8080/hahaha/login.jsp;getServletPath()返回值是/resource/jsp)

     比如某个web工程的工程名是hahaha,然后这个工程的上下文路径我们也设置成了空;

          ● 当访问某个url为ppp的Servlet的时候,getServletPath()返回值就是/ppp;(访问url是:http://localhost:8080/ppp;getServletPath()返回值是/ppp)

          ● 当访问工程的resource目录下的login.jsp这个文件的时候,getServletPath()返回值就是/resource/login.jsp);(访问url是:http://localhost:8080/login.jsp;getServletPath()返回值是/resource/jsp)

……………………………………………………

(3)getRequestURI():返回除去host(域名或者ip)部分的路径;

     比如某个web工程的工程名是hahaha,然后这个工程的上下文路径我们也设置成了/hahaha;

          ● 当访问某个url为ppp的Servlet的时候,getRequestURI()返回值就是/hahaha/ppp;(访问url是:http://localhost:8080/hahaha/ppp;getRequestURI()返回值是/hahaha/ppp)

          ● 当访问工程的resource目录下的login.jsp这个文件的时候,getRequestURI()返回值就是/hahaha/resource/login.jsp;(访问url是:http://localhost:8080/hahaha/login.jsp;getRequestURI()返回值是/hahaha/resource/jsp)

     比如某个web工程的工程名是hahaha,然后这个工程的上下文路径我们也设置成了空;

          ● 当访问某个url为ppp的Servlet的时候,getRequestURI()返回值就是/ppp;(访问url是:http://localhost:8080/ppp;getRequestURI()返回值是/ppp)

          ● 当访问工程的resource目录下的login.jsp这个文件的时候,getRequestURI()返回值就是/resource/login.jsp);(访问url是:http://localhost:8080/login.jsp;getRequestURI()返回值是/resource/jsp)

……………………………………………………

(4)getRequestURL():返回的整个URL的路径请求;

访问url是:http://localhost:8080/hahaha/ppp;getRequestURL()返回值是http://localhost:8080/hahaha/ppp;

访问url是:http://localhost:8080/login.jsp;getRequestURL()返回值是http://localhost:8080/hahaha/login.jsp;

……………………………………………………

(5)getRealPath():返回的文件所在的绝对路径,相对于当前计算机的真实路径

getRealPath()方法返回的就是文件在本地的实际路径;

……………………………………………………

(6)getPathInfo():这个方法返回请求的实际URL相对于请求的serlvet的url的路径。

这一条的真实作用不太明确~~~

……………………………………………………

一个案例:这个案例是在【OA系统十七:请假功能四:编写Controller代码;(实现请假申请的控制器;仅仅涉及新增部分的Controller代码)】中的项目中演示的

创建TestURIURLServlet:(声明:imooc-oa项目的上下文路径设置成空了;)

然后,Servlet的目录层次和url为:

package com.imooc.oa.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "TestURIURLServlet",urlPatterns = "/hehehe")
public class TestURIURLServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("getContextPath:" + request.getContextPath());
        System.out.println("getServletPath" + request.getServletPath());
        System.out.println("getRequestURI():" + request.getRequestURI());
        System.out.println("getRequestURL()" + request.getRequestURL());
        System.out.println("" + request.getRealPath("/"));
        System.out.println("getPathInfo()" + request.getPathInfo());

    }
}

访问这个Servlet后: 

运行结果:

getContextPath:
getServletPath/hehehe
getRequestURI():/hehehe
getRequestURL()http://localhost/hehehe
E:\java\imooc-oa\out\artifacts\imooc_oa_Web_exploded\
getPathInfo()null

二:URI和URL的区别(这部分没必要深究,瞅一眼就行)

这部分转载自:URI和URL的区别比较与理解,该博文的博主是:【风一样的美代码】;

这部分可以辅助理解第一部分【一: getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath、getPathInfo的区别】的内容。

(1)URI

URI,统一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。

URI的结构组成:URI通常由三部分组成:

      ① 资源的命名机制;

      ② 存放资源的主机名;

      ③ 资源自身的名称。

(注意:这只是一般URI资源的命名方式,只要是可以唯一标识资源的都被称为URI,上面三条合在一起是URI的充分不必要条件)

URI举例:如:https://blog.csdn.net/qq_32595453/article/details/79516787;我们可以这样解释它:

      ① 这是一个可以通过https协议访问的资源;(自然除了【通过https协议访问的资源】外,还有其他类资源啦;;;很容易理解,https协议仅仅是沧海一粟啦;资源千千万,https的资源仅仅是一类而已。

      ② 位于主机 blog.csdn.net上,

      ③ 通过“/qq_32595453/article/details/79516787”可以对该资源进行唯一标识(注意,这个不一定是完整的路径)

注意:以上三点只不过是对实例的解释,以上三点并不是URI的必要条件,URI只是一种概念,怎样实现无所谓,只要它唯一标识一个资源就可以了

…………………………………………………… 

(2)URL

URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位 符”。通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL是URI概念的一种实现方式。

URL的一般格式为(带方括号[]的为可选项):

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

URL的格式由三部分组成: 

      ①第一部分是协议(或称为服务方式)。

       自然协议有很多种:

                                      

      ②第二部分是存有该资源的主机IP地址(有时也包括端口号)。

      ③第三部分是主机资源的具体地址,如目录和文件名等。

第一部分和第二部分用“://”符号隔开,

第二部分和第三部分用“/”符号隔开。

第一部分和第二部分是不可缺少的,第三部分有时可以省略。 

……………………………………………………

(3)URI和URL的区别

从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值