博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WEB下面路径的问题
阅读量:6768 次
发布时间:2019-06-26

本文共 2492 字,大约阅读时间需要 8 分钟。

web 中的  /  到底代表什么?
-以为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的。 -以引用文件之网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对
 
1.若/交由浏览器来解析,代表当前web站点的根路径;例:   
   
     >超链接:<a href="/TestServlet">Java Web</a><br><br>     此时相当于:   此时是不能连接到servlet的,因为servlet不是直接部署tomcat的webapps目录下,正确的方式应该加上工程路径,即为:    。
    >表单中的action:<form action="/login.jsp" >   此时相当于:   此时也是不能连接到servlet的,,同上。
    
    >请求重定向: request.sendRedirect("/login.jsp") 此时相当于:   原理同上,浏览器直接更换网址
 
 
2.若/交由web服务器来解析代表当前web工程的根路径。例:/shipin/    (shipin即工程名)
 
    >请求转发时:request.getRequestDispatcher("/chapter.jsp").forward(request, response);  此时相当于:
         若此时chapter.jsp在webContent或webRoot根目录下,可以连接,服务器内部转发
   
    >web.xml 中映射servlet的访问路径时
         <servlet-mapping>
                <servlet-name>getinRegisterServlet</servlet-name>
                <url-pattern>/getinRegister</url-pattern>
         </servlet-mapping>
    此时的getinRegisterServlet经过映射,实际路径为    可以连接。
 
    >其他定制标签
 
 
web应用中的“绝对路径”是指相对于工程根目录的路径 request.getContextPath()可获得
此时的路径在工程目录下,例:/shipin
路径应该怎么写 ?
上面的/代表的是被解析完成后路径的第一个/
把所有非字符串的的东西全部转化为字符串后,才开始解析第一个/
例如:<a href="<%=request.getContextPath()%>/Test3Servlet">
  里面有方法,全部转化为字符串后为"/shipin/Test3Servlet" 然后开始解析/
如上,这里/应该被解析为web站点的跟目录即   ,解析完后即为完整的url,http://localhost:8080/shipin/Test3Servlet,
 
 
 
 
正确理解web各个场景路径的/的含义后
该怎么判断写的路径对不对:
步骤:1.把你写的路径当中所有非字符串(例如函数)的东西都转化为字符串
            2.按照 上文中,/到底代表什么,把第一个/解析替换出来
            3.判断最终的解析结果是不是一个完整正确的工程目录,完整正确的工程目录应该是:htttp://localhost:8080/工程名/文件的完整目录(包括文件夹)例:若目标jsp文件在webContent目录下的Get文件夹下,则正确路径为:htttp://localhost:8080/ship/Get/login.jsp
 
 
web应用中的“绝对路径”是指相对于工程根目录的路径 request.getContextPath()可获得
此时的路径在工程目录下,例:/shipin
 
相对路径是指,相对于一个文件或文件夹的路径
设当前文件(即代码执行到哪个文件)为a.jsp,相对路径的作用范围:
若c.jsp处于与当前文件同一级目录:c.jsp
若c.jsp处于与当前文件同一级目录的文件夹下:/文件夹名/c.jsp
若c.jsp处于与当前文件上一级目录:../c.jsp
 
最好写绝对路径getContextPath() + 具体文件相对于工程的文件夹路径,不容易出错。
绝对路径的反例:
把所有非字符串的的东西全部转化为字符串后,才开始解析第一个/,,非常重要,举个反例,request.getRequestDispatcher(request.getContextPath()+"/Test3Servlet").forward(request,response);
此例咋一看没啥问题,但是,先来看,把非字符串转化字符串后:/shipin/Test3Servlet,然后解析/,这是转发,/应该被解析为:/shipin/,然后最终路径就变成了:/shipin/shipin/Test3Servlet,只要/还可以解析,就会向上解析,最终变成了http://localhost/8080/shipin/shipin/Test3Servlet,显然这是错误的。这里就不能加上request.getContextPath(),只要request.getRequestDispatcher("/Test3Servlet").forward(request,response);
则/Test3Servlet被解析为/shipin/Test3Servlet,然后/shipin/Test3Servlet又被解析为http://localhost/8080/shipin/Test3Servlet.
 
相对路径的反例:
从一个a.jsp提交请求到personServlet再转发到b.jsp,当到了personServlet时,此时的当前文件就是personServlet,所以要以personServlet为当前目录去定位b.jsp,即便a.jsp和b.jsp在同一目录下,也不能就写:b.jsp,而要写相对于personServlet的路径。而写绝对路径就没问题,顾名思义,绝对定位,不是相对的。

转载于:https://www.cnblogs.com/fengli9998/p/6505786.html

你可能感兴趣的文章
【爬虫】python 多线程知识
查看>>
由Cocos2dx的部分代码引出的对Lua元表的认识
查看>>
Spring Cloud构建微服务架构--服务网关
查看>>
hello oracle II
查看>>
vue2.0 仿手机新闻站(三)通过 vuex 进行状态管理
查看>>
AvalonJS前端开发源码
查看>>
oracle数据库查询通过一个待查询字段的值组装不同的条件
查看>>
关于数据库存放List
查看>>
3、继承与派生
查看>>
Wannafly summer camp Day2I(思维)
查看>>
正则表达式 小结
查看>>
docker基础
查看>>
MongoDB的安装与python操作MongoDB
查看>>
CF:The Fault in Our Cubes(DFS)
查看>>
[导入]WAP技术与网站建立
查看>>
STM32F4的sct文件理解
查看>>
6、消息发布和订阅功能
查看>>
P4233 射命丸文的笔记
查看>>
剑指offer-合并两个排序的链表
查看>>
SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable
查看>>