欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 通过动态获取项目的上下文路径来确保请求的 URL 兼容两种启动方式(IDEA 启动和 Tomcat 部署)下都能正确解析

通过动态获取项目的上下文路径来确保请求的 URL 兼容两种启动方式(IDEA 启动和 Tomcat 部署)下都能正确解析

2025/4/5 9:24:59 来源:https://blog.csdn.net/seabirdssss/article/details/146889768  浏览:    关键词:通过动态获取项目的上下文路径来确保请求的 URL 兼容两种启动方式(IDEA 启动和 Tomcat 部署)下都能正确解析

背景

因为在不同的启动环境下,获取上下文路径的方式需要有所调整。在 IDEA 中运行时,路径是基于当前页面的 URL(如 index.html),而在 Tomcat 部署时,它是基于项目上下文路径(如 ssm-project)。

为了解决这个问题,我们需要动态适配不同的环境,确保无论是本地开发环境还是部署在 Tomcat 中,contextPath 都能够正确获取。

解决方案:

  1. 使用 window.location.origin 获取根路径:这可以帮助我们从当前的 URL 获取正确的协议(http://https)、主机名(localhost 或其他)以及端口号(如 8080)。然后,我们可以利用它来拼接出正确的 contextPath

  2. 使用 window.location.pathname 获取上下文路径:基于 pathname 来获取正确的项目路径。

改进后的代码:

<script type="text/javascript">$(function(){// 获取当前页面的上下文路径var pathname = window.location.pathname;var contextPath = '';// 判断项目是否部署在子目录下(例如 /ssm-project/)if (pathname.split('/').length > 2) {contextPath = pathname.split('/')[1];  // 提取项目名}// 如果 contextPath 为空,说明是根路径(开发环境),设置为 ''if (contextPath === "") {contextPath = "";  // 根路径}// 确保 contextPath 后面有一个斜杠if (contextPath && !contextPath.endsWith('/')) {contextPath += '/';}// 确保 window.location.origin 以斜杠结尾var origin = window.location.origin;if (!origin.endsWith('/')) {origin += '/';}// 打印 contextPath 和最终请求 URL(用于调试)console.log('contextPath:', contextPath);var requestUrl = origin + contextPath + 'Agency/GetMessage';console.log('Request URL:', requestUrl);  // 确保这里打印出来的 URL 是正确的// 执行 AJAX 请求$.ajax({url: requestUrl,  // 使用拼接的 URLsuccess: function (data) {// 处理返回数据console.log(data);},error: function (jqXHR, textStatus, errorThrown) {// 错误处理console.error('请求失败', textStatus, errorThrown);}});});
</script>

代码解释:

  • window.location.pathname.split('/')[1]:这段代码从 pathname 中提取出项目的上下文路径。

    • 在本地开发环境中,window.location.pathname 可能是 /index.html,从中我们可以提取出项目名(如果有的话)。
    • 在生产环境(Tomcat 部署后)中,window.location.pathname 可能是 /ssm-project/index.html,我们可以从中提取出 ssm-project
  • if (contextPath === ""):如果获取的 contextPath 是空字符串(例如,在开发环境中),我们手动将它设置为根路径 /。这样,在开发环境下可以避免路径拼接错误。

  • 确保 window.location.origin 以斜杠结尾:如果 origin 没有以斜杠结尾,则在拼接前加上斜杠。这可以避免在 origincontextPath 拼接时出现重复的斜杠或缺失斜杠的情况。

  • 确保 contextPath 以斜杠结尾:如果 contextPath 不是空字符串且不以斜杠结尾,则添加斜杠。

  • window.location.origin:它会返回协议、主机名和端口号(如 http://localhost:8080),使得无论是开发环境还是生产环境,contextPath 都能正确拼接到 URL 中。

结果:

  • 本地开发环境(IDEA 启动):URL 会拼接成 http://localhost:8080/Login/GetLoginName
  • Tomcat 部署环境:URL 会拼接成 http://localhost:8080/ssm-project/Login/GetLoginName

调试步骤:

打开浏览器的开发者工具(F12),查看控制台输出的 contextPath 和最终拼接的 URL,确保它们符合预期。
检查浏览器中的请求,确保请求的 URL 正确,无论是在 IDEA 还是 Tomcat 中都能正常工作。

总结:

通过检查并确保 contextPath 的正确性和末尾的斜杠,能够确保无论是在本地开发环境还是在生产环境中都能正确发起请求。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词