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值

相关文章
|
3月前
|
中间件 Java 应用服务中间件
Windows部署web应用服务器Jboss中间件
如何在Windows系统上部署JBoss 7.1作为Web应用服务器,包括配置环境变量、自动部署WAR包、访问JBoss控制台、设置管理员账户以及修改端口和绑定地址等操作。
120 1
|
3月前
|
负载均衡 应用服务中间件 持续交付
微服务架构下的Web服务器部署
【8月更文第28天】随着互联网应用的不断发展,传统的单体应用架构逐渐显露出其局限性,特别是在可扩展性和维护性方面。为了解决这些问题,微服务架构应运而生。微服务架构通过将应用程序分解成一系列小型、独立的服务来提高系统的灵活性和可维护性。本文将探讨如何在微服务架构中有效部署和管理Web服务器实例,并提供一些实际的代码示例。
118 0
|
2月前
|
前端开发 JavaScript
构建你的第一个Web应用:从零到部署
【8月更文挑战第33天】 在这篇文章中,我们将一起踏上构建一个基本Web应用的旅程。不同于传统的“安装这个、运行那个”教程,我们的目标是通过理解每一步的意义和目的来深化你的技术理解。我们将探索HTML、CSS、JavaScript的基础,并学习如何将它们结合起来创建一个简单的个人网站。接着,我们会介绍如何使用GitHub Pages进行免费部署,让你的应用上线。准备好了吗?让我们开始吧!
|
2月前
|
负载均衡 网络协议 应用服务中间件
web群集--rocky9.2源码部署nginx1.24的详细过程
Nginx 是一款由 Igor Sysoev 开发的开源高性能 HTTP 服务器和反向代理服务器,自 2004 年发布以来,以其高效、稳定和灵活的特点迅速成为许多网站和应用的首选。本文详细介绍了 Nginx 的核心概念、工作原理及常见使用场景,涵盖高并发处理、反向代理、负载均衡、低内存占用等特点,并提供了安装配置教程,适合开发者参考学习。
|
3月前
|
JavaScript 搜索推荐 前端开发
从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果
【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。
79 1
|
3月前
|
网络协议 Serverless API
现代化 Web 应用构建问题之验证各个服务是否已成功部署如何解决
现代化 Web 应用构建问题之验证各个服务是否已成功部署如何解决
30 1
|
3月前
|
Java Docker 微服务
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。每个服务负责特定功能,通过轻量通信机制协作。利用Spring Boot与Spring Cloud等框架可简化开发流程,支持模块化设计、独立部署、技术多样性和容错性,适应快速迭代的需求。
76 1
|
3月前
|
Java UED 自然语言处理
Struts 2 国际化竟有如此神奇魔力?快来揭开多语言支持的 Web 应用神秘面纱
【8月更文挑战第31天】在全球化背景下,Web应用需适应多种语言环境。Struts 2凭借其强大的国际化(i18n)支持,简化了多语言应用开发。通过不同语言的资源文件,它能自动匹配用户语言偏好,优化用户体验并扩展用户群。下面是一个示例:创建`messages.properties`(英语)与`messages_zh_CN.properties`(中文),并在Struts 2的Action类及JSP页面中调用`getText()`方法及Struts标签展示相应语言内容。此外,在struts.xml中指定资源文件,以确保框架正确加载对应语言包。通过这些步骤,开发者可以轻松实现应用的多语言支持。
65 0
|
3月前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
56 0
|
3月前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
65 0

热门文章

最新文章