servlet映射路径是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet映射路径是啥意思相关的知识,希望对你有一定的参考价值。

我讲一下原理吧、下面是一个简单的servlet、
<servlet> <display-name> this is a servlet test</display-name>--描述信息、可有可无 <servlet-name> HelloServlet </servlet-name>--servlet的内部名称 <servlet-class>包名****.类名***</servlet-class>--映射的类</servlet>
<servlet-mapping> <servlet-name> HelloServlet </servlet-name>--通过servlet的内部名称把URL与CLASS绑定 <url-pattern>/HelloServlet</url-pattern> --用户访问serlvet的URL</servlet-mapping>
可能上面看的不太懂、我简单的说下、首先、从*.jsp页面提交、这个时候form里的为:<form action="HelloServlet">、然后通过HelloServlet这个访问路径得到servlet的名称、也就是我们定义的HelloServlet、当然action里面的名称可以随便改、但注意配置<url-pattern>这个节点时也要保证一致、得到servlet内部名称后、就会根据这个名称找到相应的<servlet>节点、然后就找到了我们映射的类了、就这么简单了、最终执行映射类的内容、我是这样理解的、谢谢、
今天情人节、祝你情人节快乐、也祝全天人的情人终成眷属、
参考技术A 简单的说就是通过一个 “mapping url” 路径把 jsp 页面文件 与 java 文件连起来。

servlet 映射 url 模式上的双通配符 (*) 是啥意思?

【中文标题】servlet 映射 url 模式上的双通配符 (*) 是啥意思?【英文标题】:What does the double wildcard (*) on a servlet mapping url-pattern mean?servlet 映射 url 模式上的双通配符 (*) 是什么意思? 【发布时间】:2012-11-30 08:46:47 【问题描述】:

我想知道在 servlet 映射上使用 singledouble 通配符 来描述 url 模式有什么区别。

例如:下面有什么区别?

1)

<servlet-mapping id="...">
    <servlet-name>BuyServlet</servlet-name>
    <url-pattern>/buy/*</url-pattern>
</servlet-mapping>

2)

<servlet-mapping id="...">
    <servlet-name>ShopServlet</servlet-name>
    <url-pattern>/shop/**</url-pattern>
</servlet-mapping>

编辑: @Andrew 是对的,规范只讨论了一个通配符 (*)。

我仔细检查了我的代码,发现我发现双通配符 (**) 的位置是在 Spring SimpleUrlHandlerMapping bean 中。

在这种情况下,这是有道理的。根据the class doc,它使用AntPathMatcher,其中指出:

映射使用以下规则匹配 URL: ?匹配一个 特点 * 匹配零个或多个字符 ** 匹配路径中的零个或多个“目录”

【问题讨论】:

我认为只有第一个* 将用作通配符,第二个* 被视为literal *。 AFAIK,* 仅在与/ 一起使用时被视为通配符。 你在哪里见过这种用法? 见***.com/questions/15479213,双星号可以在&lt;mvc:resources mapping="/static/**" location="/static/" /&gt;配置中使用,并在Spring的AntPathMatcher中定义 【参考方案1】:

servlet 规范(2.5 版)的第 11.2 节规定如下:

在 Web 应用程序部署描述符中,使用以下语法来定义 映射:

使用以“/”字符开头并以“/*”后缀结尾的字符串 用于路径映射。 以“*.”前缀开头的字符串用作扩展映射。 仅包含“/”字符的字符串表示“默认”servlet 应用程序。在这种情况下,servlet 路径是请求 URI 减去上下文 路径,路径信息为空。 所有其他字符串仅用于完全匹配。

所以我猜第二个变体 (**) 没有意义。

附:我刚刚尝试设置这样的映射,似乎只有这个确切的 url /shop/** 会被匹配(Tomcat 6.0.32)。

【讨论】:

【参考方案2】:

Servlet 规范本身(3.0 版,第 12.2 章)只定义了两种通配符映射:

如果 URL 模式以“/*”结尾,它将匹配到前面路径的所有请求。 如果 URL 模式以“*.”开头,它将匹配对任何以以下扩展名结尾的资源的所有请求。

例如“/foo/*”将匹配所有以“http://server/context/foo/”开头的 URL 请求,“*.jsp”将匹配所有以“.jsp”结尾的 URL 请求。

按照规范,空字符串(“”)和单斜杠(“/”)具有特定含义。 "所有其他字符串仅用于完全匹配。"

严格遵循规范,您的第二个示例根本不是通配符模式,而应仅与“/shop/**”完全匹配。然而,大多数 Servlet 容器不那么严格,允许在任意位置使用 * 通配符,或者提供更复杂的模式匹配选项。

【讨论】:

【参考方案3】:

规范中没有提到第二种情况。

根据servlet specification 12.2

以“/”字符开头并以“/*”后缀结尾的字符串用于 路径映射

All other strings are used for exact matches only.

根据规范,仅考虑精确匹配秒。它可能因服务器提供商而异。

【讨论】:

以上是关于servlet映射路径是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

各位侠客,form表单中action路径后面加“.do”是啥意思???

servlet虚拟路径映射

Servlet路径映射

servlet映射路径

001_JavaWeb之Servlet的路径映射问题

Servlet映射路径首字母变成小写