当前位置:  开发笔记 > 编程语言 > 正文

谁能解释servlet映射?

如何解决《谁能解释servlet映射?》经验,为你挑选了1个好方法。

我正在尝试使用SpringMVC编写Web应用程序.通常情况下,我只是将一些伪造的文件扩展名映射到Spring的前端控制器并幸福地生活,但这次我要使用类似REST的URL,没有文件扩展名.

将我的上下文路径下的所有内容映射到前端控制器(让我们称之为" app ")意味着我也应该处理静态文件,这是我不想做的事情(为什么要重新发明另一个呢?),所以某些与tomcat默认的组合servlet(让我们称之为" tomcat ")似乎是要走的路.

我有工作做的事情


  app
  /



  tomcat
  *.ext

并为我的静态内容的每个文件扩展名重复后者.我只是想知道为什么以下设置,对我来说等同于上面的设置,不起作用.



  app
  /*



  tomcat
  *.ext




  app
  /



  tomcat
  /some-static-content-folder/*

任何人都能解释一下吗?



1> Philip Tinne..:

我想我可能知道发生了什么.

在您正在工作的web.xml中,您已将servlet设置为默认的servlet(/如果没有其他匹配,则调用默认的servlet),它将回答与另一个映射不匹配的任何请求.

在失败1中,您的/*映射似乎确实是有效的路径映射.使用web.xml中的/*映射,它可以响应除其他路径映射之外的所有请求.根据规范,扩展映射是由显式映射覆盖的隐式映射.这就是扩展映射失败的原因.一切都明确映射到应用程序.

在失败2中,除了与静态内容映射匹配的内容之外,App负责所有内容.为了显示我设置的快速测试中发生了什么.这是一个例子. /some-static-content-folder/包含test.png

试图访问test.png我试过:

/some-static-content-folder/test.png

并且找不到该文件.无论如何

/some-static-content-folder/some-static-content-folder/test.png

它出现了.因此,似乎Tomcat默认servlet(至少6.0.16)删除了servlet映射,并将尝试使用剩余路径查找该文件.根据这篇文章Servlet提供静态内容 Jetty给出了你和我期待的行为.

是否有某些原因使您无法执行某些操作,例如为您的其余调用映射根目录.像app映射到/ rest_root/*之类的东西比你负责rest_root文件夹中发生的任何事情,但是其他地方应该由Tomcat处理,除非你做了另一个显式映射.我建议将其余的servlet设置为路径映射,因为它更好地声明了intent.使用/或/*似乎不合适,因为您必须映射异常.以SO为例,我的其余映射就像是

/ users/*用于用户servlet

/ posts/*为post servlet

映射顺序

    显式(路径映射)

    隐式(扩展映射)

    默认(/)

请纠正我错的任何事情.


有点疯狂意识到Servlet不支持像'/ myAppModules/*/Services/*'这样的通配符.我可以想到许多其他服务器可以处理这个,但不是Servlet.有趣的是业余爱好者级WAMP可以做到这一点,但不是"企业级"Servlet.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有