51

我已web.xml为我的应用程序手动配置。现在,我在运行我的应用程序时遇到了问题。我正在尝试servlet从我的jsp页面访问我的。但是,它抛出错误为page not found.

servlet 位于文件夹位置下方

<application folder>/WEB-INF/classes/<package>

url-pattern那么,和中的 servlet 条目应该是什么servlet-mapping。因此,servlet可以通过 URL 访问。

4

2 回答 2

72

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为。然后,可以使用 .servlet 访问 servlet 。出于安全原因,您希望在其中隐藏您的实际页面 URL。AddPhotoServlet/AddPhotoServlet/MyUrlAddPhotoServlet/MyUrl

Java Servleturl-pattern规范:

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

参考:Java Servlet 规范

您还可以阅读此Java Servlet 基础知识

于 2012-12-24T07:13:12.530 回答
38

Servlet-mapping 有两个子标签,url-pattern 和 servlet-name。url-pattern 指定应该调用 servlet-name 中给出的 servlet 的 url 类型。请注意,容器将区分大小写用于 servlet 匹配的字符串比较。

server .com 的 servlet 容器上的服务器上下文文件的第一个规范与以下url-pattern模式匹配web.xml<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的 A 上下文的第二个规范<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 元素将serverservlet 实例映射到默认映射。

<servlet-mapping>
  <servlet-name>server</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

对于包含此元素的上下文,任何未被另一个映射处理的请求都将转发到serverservlet。

最重要的是我们应该了解URL 路径映射的规则

  1. 容器将尝试找到请求路径与 servlet 路径的完全匹配。成功的匹配选择 servlet。
  2. 容器将递归地尝试匹配最长的路径前缀。这是通过使用“/”字符作为路径分隔符一次将路径树下移一个目录来完成的。最长的匹配决定了选择的 servlet。
  3. 如果 URL 路径中的最后一段包含扩展名(例如 .jsp),则 servlet 容器将尝试匹配处理扩展请求的 servlet。扩展名被定义为最后一个'.'之后的最后一段的一部分。特点。
  4. 如果前三个规则都没有导致 servlet 匹配,则容器将尝试提供适合所请求资源的内容。如果为应用程序定义了一个“默认”servlet,它将被使用。

参考URL 模式

于 2015-08-07T10:17:05.167 回答