web工程部署路径与getServletConfig().getRealPath()

简介: 我们都知道,通过ServletContext类可以获取工程路径(虚拟路径)以及工程部署在服务器硬盘上的绝对路径那我们首先应该了解一个工程是怎样部署的,以idea为例不知道大家有没有发现每当我们启动服务器时,都会有这样一个地址

我们都知道,通过ServletContext类可以获取工程路径(虚拟路径)以及工程部署在服务器硬盘上的绝对路径

那我们首先应该了解一个工程是怎样部署的,以idea为例

不知道大家有没有发现每当我们启动服务器时,都会有这样一个地址

8cfaa9b90a7046f0af0ba291cdebe6d2.png

这是一个什么地址呢,我们打开发现它的目录内容如下


f4b9b9b98f024c0983825d6ab1d279b9.png24bf47db3ea64cee8e5659e3c9d59569.png

有没有熟悉感?我们对比一下Tomcat的目录

发现了吗,这个路径其实就是IDEA整合Tomcat之后,Tomcat被拷贝的一些副本内容。


进入这个地址的conf/Catalina/localhost目录,我们发现了这样一个文件




回想一下conf/Catalina/localhost这个路径,我们使用tomcat部署项目的第三种方式是不是也是在这个路径下创建一个.xml的配置文件


显而易见idea部署项目时使用的其实就是第三种tomcat部署项目的方式


因为我们不可能每次创建工程在tomcat的webapps目录下,所以idea会根据我们设置的工程部署路径以及虚拟路径生成出一个配置文件


下图分别为我们设置的虚拟路径以及工程部署路径

bb38666904de4b2984cbb1df839d8d44.png

dfb2777e8bbb4686af6687162187c924.png

然后每当我们部署项目时,就会创建我们所设置的工程部署路径,随后我们在网站访问的其实都是该路径下的内容而不是开发环境文件夹下的内容,但两者内容其实一样,工程部署路径的内容是完全拷贝开发环境中web文件夹下的内容

这样就解释了为什么context.getRealPath("/")获得的路径为什么和我们项目创建的路径不一样(因为获取的是工程的部署路径)

public class ContextServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //获取配置文件中的上下文参数
        ServletContext context = getServletConfig().getServletContext();
        System.out.println(context.getContextPath());
        System.out.println("当前工程部署的路径" + context.getRealPath("/"));
        System.out.println(context.getRealPath("/css"));
        System.out.println(context.getRealPath("/jpg"));
    }
}

上述程序执行后返回结果如下


/myfirst

当前工程部署的路径E:\eclipse-workspace\Javaweb-servlet\out\artifacts\Javaweb_servlet_war_exploded

E:\eclipse-workspace\Javaweb-servlet\out\artifacts\Javaweb_servlet_war_exploded\css

E:\eclipse-workspace\Javaweb-servlet\out\artifacts\Javaweb_servlet_war_exploded\jpg


context.getContextPath()获得工程路径,故输出/myfirst


context.getRealPath("/")获得参数所对应虚拟路径的真实路径


其中“/”表示根目录,项目工程的根目录,即http://ip:port/工程路径


那么context.getRealPath("/")也就是获得工程的真实路径,即工程部署的物理位置


自然也就是上文配置文件中的docBase值

相关文章
|
2月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
221 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
3月前
|
Java 应用服务中间件 Docker
java-web部署模式概述
本文总结了现代 Web 开发中 Spring Boot HTTP 接口服务的常见部署模式,包括 Servlet 与 Reactive 模型、内置与外置容器、物理机 / 容器 / 云环境部署及单体与微服务架构,帮助开发者根据实际场景选择合适的方案。
122 25
|
3月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
154 0
|
5月前
|
人工智能 安全 程序员
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
|
8月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
205 19
|
8月前
|
应用服务中间件 Linux nginx
部署使用 CHAT-NEXT-WEB 基于 Deepseek
本文介绍如何在阿里云轻量服务器上部署基于 `Deepseek` 的 `CHAT-NEXT-WEB` 项目。首先,准备一台 Linux 服务器并安装 Docker,确保防火墙允许特定端口访问。接着,通过阿里云容器镜像服务解决国内网络限制问题,将镜像推送到私有仓库并拉取到本地。配置并启动 `chat-next` 项目,使用 Deepseek API 进行优化。最后,安装 Nginx 和 Certbot 配置 HTTPS 访问,确保安全性和自动续签。整个过程需严格遵循官方文档,以避免因网络问题导致的安装失败。
|
负载均衡 应用服务中间件 持续交付
微服务架构下的Web服务器部署
【8月更文第28天】随着互联网应用的不断发展,传统的单体应用架构逐渐显露出其局限性,特别是在可扩展性和维护性方面。为了解决这些问题,微服务架构应运而生。微服务架构通过将应用程序分解成一系列小型、独立的服务来提高系统的灵活性和可维护性。本文将探讨如何在微服务架构中有效部署和管理Web服务器实例,并提供一些实际的代码示例。
516 0
|
11月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
前端开发 JavaScript
构建你的第一个Web应用:从零到部署
【8月更文挑战第33天】 在这篇文章中,我们将一起踏上构建一个基本Web应用的旅程。不同于传统的“安装这个、运行那个”教程,我们的目标是通过理解每一步的意义和目的来深化你的技术理解。我们将探索HTML、CSS、JavaScript的基础,并学习如何将它们结合起来创建一个简单的个人网站。接着,我们会介绍如何使用GitHub Pages进行免费部署,让你的应用上线。准备好了吗?让我们开始吧!
438 5
|
负载均衡 网络协议 应用服务中间件
web群集--rocky9.2源码部署nginx1.24的详细过程
Nginx 是一款由 Igor Sysoev 开发的开源高性能 HTTP 服务器和反向代理服务器,自 2004 年发布以来,以其高效、稳定和灵活的特点迅速成为许多网站和应用的首选。本文详细介绍了 Nginx 的核心概念、工作原理及常见使用场景,涵盖高并发处理、反向代理、负载均衡、低内存占用等特点,并提供了安装配置教程,适合开发者参考学习。
226 1