首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Tomcat对某些url映射的上下文路径进行不同的解析?

为什么Tomcat对某些url映射的上下文路径进行不同的解析?
EN

Stack Overflow用户
提问于 2011-05-01 20:04:18
回答 2查看 1.5K关注 0票数 0

因此,我试图编写一个servlet,它可以处理url映射,例如:

域/上下文/servlet/resource_id

以前,当我指定url模式时,我只是做了:

/myServlet

但是,对于我想要完成的事情,我正在做的.

/myServlet/*

--我遇到的问题

对于我的静态文件(css/js/etc),我一直在使用相对路径(所以,只是相对于我的WebContent文件夹的文件位置),现在我使用了/myServlet/*映射,所有静态文件的请求现在都由myServlet处理。因此,基本上,静态资源现在决定:

domain/context/myServlet/relative_path_I_provide

而不是

域/上下文/相对路径_i_提供

我确信我自己可以通过构建资源的绝对路径来解决这个问题,而不是依赖相对路径;但是我只是想知道,当我使用/myServlet/* url模式而不是/myServlet时,为什么静态资源的解析路径会改变呢?

编辑:

我的文件夹结构就像

代码语言:javascript
运行
复制
WebContent
   |
   |
   |-- debug
         |
         |-- css
              |
              |-- file.css

我把它们添加到一个链接标签中,比如:

代码语言:javascript
运行
复制
<link href="debug/css/file.css" rel="stylesheet" type="text/css">
EN

Stack Overflow用户

回答已采纳

发布于 2011-05-02 00:26:09

好吧,这就解释了。您使用的是没有路径信息的相对URL,这意味着浏览器将其解析为与包含这些URL的资源相同的目录。当您的servlet映射到/myServlet时,它在路径中没有显示为“目录”,即它是所引用的最终资源。

因此,servlet的URL是domain/context/myServlet格式的,因此这些相对URL也将解析为domain/context/

但是现在,通过表单/myServlet/*的映射,servlet在URL中显示为一个目录,这意味着当您转到domain/context/myServlet/resource_id时,相对URL被解析到与resource_id相同的目录,即domain/context/servlet/

请参阅为了更多

修复可能是以下几种方法之一:

  1. 使用相对于应用程序根的相对URL,即以/开头的URL。但是,这将要求您在代码中为您的应用程序设置上下文路径,这意味着您永远不能简单地以不同的名称部署它而不需要更改所有内容。总之,不要这么做。
  2. 使用路径信息以../的形式使用相对URL,这将导致URL解析到一个一级上的目录。如果有人决定将资源映射到表单domain/context/myServlet/secondLevel/resource_id的URL,这也是很脆弱的。
  3. 创建相对于应用程序上下文路径的相对URL。可以通过将href值设置为request.getContextPath + "/css/files/file.css"来做到这一点。这将在每个链接的href开头的上下文路径上占优势,因此,对于domain/context/myServlet/resource_id的请求,这将成为/context/css/files/file.css并如您所期望的那样解决。
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5851000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档