在参考了这篇博文后我陷入了迷惑,什么是web应用程序的根目录?什么又是web站点的根目录?为何在我的intellij idea上跑的web项目根本没用到web站点根目录呢?
javaweb站点根目录和web应用根目录应用场景
先声明:本博客的web环境是java EE 之 Web Application 4.0,tomcat 版本为9;算是最新版本的普通web项目了,如果有什么不一样的地方,那一定是版本的错

1 开门见山

新建一个tomcat web项目,配置tomcat的虚拟目录,取默认值(/项目名_war_exploded)

那么如果你的tomcat的默认站点(即http://localhost:8080)没有更改的话,这个项目的

  • web站点根目录为:http://localhost:8080
  • web应用的根目录为:http://localhost:8080/WebPathDemo_war_exploded

小注意:根目录跟目录的概念不要混淆:
根目录代表的是从最底层目录访问到当前目录,即绝对路径;
目录代表的是当前目录(当前所在文件夹的名称)。

2 查看web应用的根目录的方法

第一种方式查看:
转到tomcat的Server,我们的URL就相当于web应用的根目录(去掉“/”才算当前目录)

第二种方式查看:
在sevlet中使用request.getContextPath();查看,查看的是web应用的相对目录

package org.hc.webpathdemo;@WebServlet("/WebPath")
public class WebPath extends HttpServlet {private static final long serialVersionUID = -8249667430606104921L;@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//得到web应用的相对地址String contextPath = request.getContextPath();// 得到“/WebPathDemo_war_exploded”System.out.println("得到web应用的相对地址为:" + contextPath);}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {doPost(request, response);}
}

浏览器访问http://localhost:8080/WebPathDemo_war_exploded/WebPath
控制台输出结果为得到web应用的相对地址为:/WebPathDemo_war_exploded

request.getContextPath();告诉了我们web应用的相对目录,相对于谁呢?相对于web站点根目录http://localhost:8080

那么一切似乎清晰了,"web应用的根目录"就是在"web站点的根目录"后加入tomcat配置的虚拟目录 (Deployment的Application Context的设置的地址);

3 搞清楚什么时候是根据web站点根目录作为相对目录,什么时候是根据web应用根目录作为相对目录

3.1 如何访问资源

访问一个资源,一定是相对于web应用根目录的,比如在我这个项目中,一定是
http://localhost:8080/WebPathDemo_war_exploded/资源名路径(servlet或者html、jsp),才能访问资源。

  1. 比如我访问demo1下的index1.jsp,是必须要带上web应用根目录在前方的
  2. 直接使用web站点根目录访问,是访问不到的

3.2 a标签,jsp的include,form表单等究竟相对于哪个目录?

拿a标签举例子:

1.web目录下有两个jsp:

2.代码:
index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>index.jsp</title>
</head>
<body>我是index.jsp<br />
<a href="index1.jsp">index1.jsp</a>
</body>
</html>

index1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>index1.jsp</title>
</head>
<body>我是index1.jsp
</body>
</html>

3.这样我在index里点a标签可以跳到index1,是理所当然的。

在a标签里直接写跳转的资源名,如index.jsp,观察地址栏发现,它相对的路径是
http://localhost:8080/WebPathDemo_war_exploded/,也就是web应用根目录

4.更改a标签跳转地址为/index1.jsp

<a href="/index1.jsp">index1.jsp</a>

查看结果:

在a标签里写跳转的“/”+资源名,如/index.jsp,观察地址栏发现,它相对的路径是
http://localhost:8080/,也就是web站点根目录,前面已经说过了,资源只有web应用根目录才能访问,相对于站点是访问不到资源的。

那么如果非要相对于站点如何访问呢?需要加入web应用的相对目录,这样写:

<a href="/WebPathDemo_war_exploded/index1.jsp">index1.jsp</a>

3.3 根据“/”判断是相对于站点还是应用

综上所述,a标签内的相对于web站点根目录还是web应用根目录的判断条件是,最前方有没有“/”

  • 无“/”,代表是相对于web应用根目录,即http://localhost:8080/tomcat配置的虚拟目录/
  • 有“/”,代表是相对于web站点根目录,即http://localhost:8080/

jsp的include、form表单等等也是如此的判断条件。

4.什么是虚拟目录?

tomcat的配置中Deploment的Application context是配置当前项目的虚拟目录,它是实际物理路径的映射。我们可以通过http://localhost:8080/WebPathDemo_war_exploded/demo1/index1.jsp访问一个jsp,那么这个jsp必须在我的本地物理路径上存在,才能访问成功,那么tomcat究竟去哪里寻找这个jsp呢?

答案就在编译后产生的artifacts中,tomcat将实际物理路径映射成了简单的虚拟目录,可以更方便的访问物理路径

编译后打开out(或target)/artifacts

可以看到项目中所有需要发布的资源都集中在out(或target)/artifacts/WebPathDemo_war_exploded这个文件夹中(部分人的out可能是target),artifacts就是发布项目的关键,可以从项目结构中对它进行重命名。

这里就是tomcat配置的虚拟目录所真正访问到的实际物理路径了

总结

1.资源一定是相对于web应用根目录才能访问
2.web站点根目录一般默认为:http://localhost:8080
3.web应用根目录一般默认为:

  • web站点根目录/web应用目录
  • http://localhost:8080/tomcat配置的虚拟目录

4.根据“/”来判断是相对于web站点根目录还是web应用根目录:

  • 无“/”,代表是相对于web应用根目录
  • 有“/”,代表是相对于web站点根目录

5.tomcat虚拟目录一般默认为:/项目名_war_exploded
6.tomcat虚拟目录实际上为本机上实际物理路径的映射,默认为:

  • 项目所在根目录\out(或target)\artifacts\项目名_war_exploded
  • 例如我的项目:D:\idea\WebPathDemo\out\artifacts\WebPathDemo_war_exploded

2021-11-18补充:

  • 本文中的"web应用程序的根目录"与"web站点的根目录"后跟着的资源名都是使用的”相对于“这个词语,该词语的意思是这个资源名还具备本身的路径,比如我的index.jsp在web下的demo1文件夹里,那这个资源的路径就是/demo1/index.jsp,那他的全路径就是web应用根目录/demo1/index.jsp,这一点不用混淆。

如果对你有所帮助,请点个赞支持一下作者,如果有不一样的见解,请在下方评论,作者会及时更正。

【JavaWeb开发】“web应用程序的根目录“与“web站点的根目录“的分析相关推荐

  1. java web应用程序_说说Java Web中的Web应用程序|乐字节

    大家好,我是乐字节的小乐,今天接着上期文章<Javaweb的概念与C/S.B/S体系结构>继续往下介绍Java Web ,这次要说的是web应用程序. 1. Web 应用程序的工作原理 W ...

  2. 渐进式web应用程序_为什么渐进式Web应用程序很棒,以及如何构建一个

    渐进式web应用程序 by Ankita Masand 通过Ankita Masand 为什么渐进式Web应用程序很棒,以及如何构建一个 (Why Progressive Web Apps are g ...

  3. 渐进式web应用程序_通过渐进式Web应用程序吸引用户并增强他们的体验

    渐进式web应用程序 by Dave Gray 戴夫·格雷(Dave Gray) 通过渐进式Web应用程序吸引用户并增强他们的体验 (Engage your users and enhance the ...

  4. 黄聪:用于 Web 应用程序项目部署的 Web.config 转换语法

    Web.config 文件通常包括根据应用程序的运行环境而必须不同的设置. 例如,在部署 Web.config 文件时,您可能必须更改数据库连接字符串或禁用调试. 对于 Web 应用程序项目,ASP. ...

  5. WePY框架开发的小程序如何在微信web开发者工具中运行起来

    2019独角兽企业重金招聘Python工程师标准>>> 一.首先需要安装node.js,安装步骤如下: 首先下载安装包 https://nodejs.org/en/download/ ...

  6. 怎样linux部署web应用程序,Linux系统部署WEB项目(2020最新最详细)

    2020最新Linux系统发行版ContOS7演示部署WEB项目 为防止操作权限不足,建议切换root用户,当然如果你对Linux命令熟悉,能够自主完成权限更新操作,可以不考虑此推荐. 更多命令学习推 ...

  7. [原创]java WEB学习笔记02:javaWeb开发的目录结构

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. 第一章 Web应用程序开发基础

    一.HTTP协议工作机制 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它是一种主流B/S架构中应用的通信 ...

  9. 如何开发Web应用程序(非网站)

    看到这篇原文说,web应用程序和网站的开发不一样,收藏学习一下 这是一个经常被问到的问题,问的理所当然.作为一个程序员,为什么我就非要被认为知道如何开发Web应用程序呢?这个问题没有一个简单的答案,甚 ...

  10. 使用Spring设计和实现Web应用程序 开发指引(一)

    翻译自 http://spring.io/guides/tutorials/web/. 首发于 http://my.oschina.net/u/179755/blog/232777. 在本教程中,您将 ...

最新文章

  1. python试题for循环布尔值_Python自我修炼(升仙中....整数,布尔值,字符串,for循环)
  2. Oracle获取LOB长度的两种方法效率对比
  3. 成熟期滞后状态的云计算:应重视云存储及安全策略
  4. qq分享提示设备未授权_QQ帐号已经可以注销了,过去几天,第一批尝试的人已经放弃了!...
  5. 利用线程池为线程创建一个守护线程
  6. 第三次学JAVA再学不好就吃翔(part25)--成员变量赋值
  7. Redis 面试题补充与汇总
  8. 《大数据》第1期“聚焦”——对大数据的再认识
  9. SHELL中的变量和参数
  10. workbench求解闭合状态尼龙槽环
  11. Kelvin云层效果Ps笔刷
  12. linux fastboot 工具下载,linuxadb fastboot 和VNC工具的安装使用
  13. 微软的APT服务器探针产品,原子探针断层扫描| APT | EAG实验室
  14. pytz.exceptions.UnknownTimeZoneError解决办法
  15. Tampermonkey油猴脚本 jquery 常用组件
  16. vue 播放m3u8视频
  17. 一个真实的用户画像实例。
  18. C语言课程设计之火车订票系统实现
  19. 小白IT:如何快速写出一个前端页面(网页),Python中如何使用前端语言什么是?JavaScript?BOMDOM?Bootstrap??
  20. css原地颠倒 h5_H5案例分享:CSS3 reflect倒影

热门文章

  1. 项目部署发布CruiseControl工具介绍
  2. 8051蜂鸣器程序c语言,蜂鸣器报警声C51程序
  3. 按键精灵手机助手错误:at tempt to compare nu11 with number
  4. 计算机实验报告word的应用,计算机实验报告模板.doc
  5. 【吐血整理,建议收藏】B站上有哪些值得反复观看的Java视频教程?
  6. 直接可以用的Python和OpenCV检测及分割图像的目标区域例子
  7. 嵌入式软件工程师就只需会写C代码吗
  8. android+世界地图高清版大图片,世界地图全图高清版
  9. html js制作地图,前端使用D3.js制作地图
  10. 记录在WIN10家庭版下安装LR11出现问题