1.若/交由浏览器来解析,代表当前web站点的根路径;例:http://localhost:8080/  
   
     >超链接:<a href="/TestServlet">Java Web</a><br><br>     此时相当于:http://localhost:8080/TestServlet  此时是不能连接到servlet的,因为servlet不是直接部署tomcat的webapps目录下,正确的方式应该加上工程路径,即为:http://localhost:8080/shipin/TestServlet   。
    >表单中的action:<form action="/login.jsp" >   此时相当于:http://localhost:8080/longin.jsp  此时也是不能连接到servlet的,,同上。
    
    >请求重定向: request.sendRedirect("/login.jsp") 此时相当于: http://localhost:8080/longin.jsp 原理同上,浏览器直接更换网址
2.若/交由web服务器来解析代表当前web工程的根路径。例:/shipin/    (shipin即工程名)
    >请求转发时:request.getRequestDispatcher("/chapter.jsp").forward(request, response);  此时相当于:
     http://localhost/shipin/chapter.jsp  
若此时chapter.jsp在webContent或webRoot根目录下,可以连接,服务器内部转发
   
    >web.xml 中映射servlet的访问路径时
         <servlet-mapping>
                <servlet-name>getinRegisterServlet</servlet-name>
                <url-pattern>/getinRegister</url-pattern>
         </servlet-mapping>
    此时的getinRegisterServlet经过映射,实际路径为 http://localhost:8080/shipin/getinRegister 
可以连接。
 
    >其他定制标签
 
 
web应用中的“绝对路径”是指相对于工程根目录的路径 request.getContextPath()可获得
此时的路径在工程目录下,例:/shipin
路径应该怎么写 ?
上面的/代表的是被解析完成后路径的第一个/
把所有非字符串的的东西全部转化为字符串后,才开始解析第一个/
例如:<a href="<%=request.getContextPath()%>/Test3Servlet">
  里面有方法,全部转化为字符串后为"/shipin/Test3Servlet" 然后开始解析/
如上,这里/应该被解析为web站点的跟目录即http://localhost:8080/ 
,解析完后即为完整的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的路径。而写绝对路径就没问题,顾名思义,绝对定位,不是相对的。
src下文件的路径问题
Web工程的根目录指的是WebRoot/WEB-INF/classes开始的。java的class文件只能读到这个目录的的文件。如果想读取其他地方的文件,可以用绝对路径
如果是通过java的class读文件,比如xxx.properties,只能放到WebRoot/WEB-INF/classes目录下。也就是放到工程src下,会自动编译到WebRoot/WEB-INF/classes目录下的

web工程的路径问题详解的更多相关文章

  1. web工程常用路径的获取方法

    此文章是基于 搭建SpringMVC+Spring+Hibernate平台 一. 利用 Spring 取得web工程根路径 1. web.xml 中添加如下: <context-param> ...

  2. 自学Zabbix4.2 web监控项创建+item详解

    自学Zabbix4.2 web监控项创建+item详解 1. web监控项创建 1.1  Scenario 选项卡 Name: 监控项的名称 Application: 放到哪个应用中 Authenti ...

  3. nginx高性能WEB服务器系列之四配置文件详解

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  4. eclipse中的项目Java build path (Java创建路径)详解

    1.Source标签页,指定本工程的源码目录和输出目录.Projects标签页,指定本工程所依赖的其他工程.Libraries标签页,指定本工程所需的jar包和class目录等.Order And E ...

  5. ASP.net 路径问题 详解

    各位有没有碰到在日常工作中经常在路径设置的时候把 "~/ ../ .../ . / .http://www.cnblogs.com/"这些符号搞混搞乱了?偶尔还会因路径的问题郁闷了 ...

  6. web端自动化——selenium3用法详解

    selenium中文学习文档链接:https://selenium-python-zh.readthedocs.io/en/latest/getting-started.html selenium3+ ...

  7. Visual Studio的Web Performance Test提取规则详解(3)

    总结 Visual Studio的Web Performance Test是基于HTTP协议层的,它不依赖于浏览器,通过直接接收,发送HTTP包来和Web服务器交互.Web Performance T ...

  8. ASP.NET中的路径(path) 详解

    一 ASP.NET常用路径(path)获取方法与格式对照表 假设我们的网址为http://localhost:1897/ News/Press/Content.aspx?id=1019 跟 Brows ...

  9. web.xml配置以及一些详解

    web.xml的根元素定义如下所示(代表当前使用哪个模版): <?xml version="1.0" encoding="UTF-8"?> < ...

随机推荐

  1. IDEA run下output标签悬浮/弹出状态

    就是这样,在哪儿有一个恢复布局标签

  2. 微信调用itchat库 实现发消息

    import itchat,timefrom itchat.content import * itchat.auto_login(enableCmdQR=-1)while True: for i in ...

  3. leetcode23

    public class Solution { public ListNode MergeKLists(ListNode[] lists) { var ary = new List<int> ...

  4. Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块

    Auth模板 1. 什么是Auth模块,有什么用? django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块 2. 使用Auth组件的默认aut ...

  5. saltstack的封装和内网使用

    0.客户端使用 linux:把linux的ragent文件夹拷贝到内网linux /opt目录下,运行初始化脚本 salt服务端:# @Master:"/opt/ragent/python/ ...

  6. javascript:控制台详解

    javascript工具——浏览器控制台详解  大神这篇博客是写在2011年,主要介绍 “Firefox” 浏览器插件 “Firebug” 的操作,如今主流浏览器对控制台都已经提供了很好的支持.我自己 ...

  7. CentOS6.5搭建OpenVas完全搭建手册(搭建过程总结及小记)

    一.OpenVAS 介绍 1.关于OpenVAS OpenVAS(Open Vulnerability Assessment System)是一套开源的漏洞扫描系统,早期Nessus 是其中一个最流行 ...

  8. vue.js插值,插入图片,属性

    <html><head><title>Insert title here</title><script type="text/javas ...

  9. MySQL二进制日志(binary log)总结

    本文出处:http://www.cnblogs.com/wy123/p/7182356.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  10. quick pdf library控件

    quick pdf library库只能在windows环境下运行 1.下载quick pdf library 2.注册控件 进入cmd  regsvr32 "C:\Program File ...