web.xml中url-pattern有啥意义,servlet如何配置?
Posted
技术标签:
【中文标题】web.xml中url-pattern有啥意义,servlet如何配置?【英文标题】:What is the significance of url-pattern in web.xml and how to configure servlet?web.xml中url-pattern有什么意义,servlet如何配置? 【发布时间】:2012-12-10 16:35:04 【问题描述】:我已经为我的应用程序手动配置了web.xml
。现在,我在运行我的应用程序时遇到了问题。我正在尝试从我的jsp
页面访问我的servlet
。但是,它会以page not found
的形式抛出错误。
servlet 位于以下文件夹位置
<application folder>/WEB-INF/classes/<package>
那么,url-pattern
和 servlet-mapping
中的 servlet 条目应该是什么。这样,servlet
就可以通过 URL 访问了。
【问题讨论】:
首先阅读 servlet 规范和映射。请参阅@var_ 给出的答案。如果您再次遇到问题或异常粘贴有问题的异常,社区将尝试调试问题。 您应该接受一个答案,让社区从中受益。 【参考方案1】:url-pattern
用于 web.xml
将您的 servlet
映射到特定 URL。请参阅下面的 xml 代码,您可以在 web.xml
配置文件中找到类似的代码。
<servlet>
<servlet-name>AddPhotoServlet</servlet-name> //servlet name
<servlet-class>upload.AddPhotoServlet</servlet-class> //servlet class
</servlet>
<servlet-mapping>
<servlet-name>AddPhotoServlet</servlet-name> //servlet name
<url-pattern>/AddPhotoServlet</url-pattern> //how it should appear
</servlet-mapping>
如果您将url-pattern
的AddPhotoServlet
从/AddPhotoServlet
更改为/MyUrl
。然后,可以使用/MyUrl
访问AddPhotoServlet
servlet。出于安全原因,您希望在其中隐藏您的实际页面 URL。
Java Servlet url-pattern
规范:
以 '/' 字符开头并以 '/*' 结尾的字符串 后缀用于路径映射。 以'*.'开头的字符串 前缀用作扩展映射。 仅包含 '/' 字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径 是请求 URI 减去上下文路径,路径信息是 空值。 所有其他字符串仅用于完全匹配。
参考:Java Servlet Specification
您也可以阅读此Basics of Java Servlet
【讨论】:
补充一下,如果OP使用的是支持Servlet 3.0的Web Application servlet,则无需在web.xml中配置servlet。 our Servlets Wiki中有很好的解释 对于/AddPhotoServlet
示例——该Servlet 是否可以通过http://AddPhotoServlet.company.com/
之类的链接访问?还是会被http://company.com/AddPhotoServlet
访问?【参考方案2】:
Servlet-mapping 有两个子标签,url-pattern 和 servlet-name。 url-pattern 指定应该调用 servlet-name 中给出的 servlet 的 url 类型。请注意,容器将使用区分大小写的字符串比较来进行 servlet 匹配。
第一个规范 url-pattern
web.xml
文件在 server .com 的 servlet 容器上的服务器上下文与 <url-pattern>/status/*</url-pattern>
中的模式匹配,如下所示:
http://server.com/server/status/synopsis = Matches
http://server.com/server/status/complete?date=today = Matches
http://server.com/server/status = Matches
http://server.com/server/server1/status = Does not match
第二个规范 url-pattern
位于example.com 代理上路径/examples 的上下文与<url-pattern>*.map</url-pattern>
中的模式匹配,如下所示:
http://server.com/server/US/Oregon/Portland.map = Matches
http://server.com/server/US/server/Seattle.map = Matches
http://server.com/server/Paris.France.map = Matches
http://server.com/server/US/Oregon/Portland.MAP = Does not match, the extension is uppercase
http://example.com/examples/interface/description/mail.mapi =Does not match, the extension is mapi rather than map`
第三规范 url-mapping
,如果没有其他模式匹配,则包含模式<url-pattern>/</url-pattern>
的映射匹配请求。这是默认映射。映射到此模式的 servlet 称为默认 servlet。
默认映射通常指向应用程序的第一页。显式提供默认映射还可以确保应用程序返回的格式错误的 URL 请求由应用程序处理,而不是返回错误。
下面的 servlet-mapping 元素将server
servlet 实例映射到默认映射。
<servlet-mapping>
<servlet-name>server</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
对于包含此元素的上下文,任何未被其他映射处理的请求都将转发到server
servlet。
最重要的是我们应该了解URL路径映射规则
-
容器将尝试查找请求路径与 servlet 路径的完全匹配。成功匹配选择 servlet。
容器将递归地尝试匹配最长的路径前缀。这是通过使用“/”字符作为路径分隔符一次将路径树下移一个目录来完成的。最长的匹配决定了选择的 servlet。
如果 URL 路径中的最后一段包含扩展(例如 .jsp),则 servlet 容器将尝试匹配处理扩展请求的 servlet。扩展名定义为最后一个“.”字符之后的最后一段。
如果前三个规则都没有导致 servlet 匹配,则容器将尝试提供适合所请求资源的内容。如果为应用程序定义了“默认”servlet,则会使用它。
参考URL Pattern
【讨论】:
以上是关于web.xml中url-pattern有啥意义,servlet如何配置?的主要内容,如果未能解决你的问题,请参考以下文章
TOMCAT中web.xml里url-pattern配置详解
servlet在web.xml中怎么配置url-pattern?
web.xml中url-pattern中/和/*的区别(来自网络)