web.xml中url-pattern的意义是什么以及如何配置servlet?

gku*_*mar 46 java web.xml servlets url-pattern servlet-mapping

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

servlet位于文件夹下方

<application folder>/WEB-INF/classes/<package>
Run Code Online (Sandbox Code Playgroud)

那么,究竟应该是在Servlet中的条目url-pattern和servlet-mapping.这样,servlet可以通过URL访问.

Rav*_*avi 69

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>
Run Code Online (Sandbox Code Playgroud)

如果你改变url-pattern的AddPhotoServlet,从/AddPhotoServlet到/MyUrl.然后,AddPhotoServlet可以使用servlet访问/MyUrl.出于安全原因,您希望隐藏实际页面网址.

Java Servlet url-pattern规范:

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

参考:Java Servlet规范

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

  • 只是要补充一点,如果OP使用的是支持Servlet 3.0的Web应用程序servlet,那么就不需要在web.xml中配置servlet了.在[我们的Servlets Wiki]中有一个很好的解释(http://stackoverflow.com/tags/servlets/info) (4认同)

San*_*yan 31

Servlet-mapping有两个子标记,url-pattern和servlet-name.url-pattern指定要为其调用servlet-name中指定的servlet的url类型.请注意,容器将使用区分大小写进行字符串比较以进行servlet匹配.

服务器.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
Run Code Online (Sandbox Code Playgroud)

url-pattern位于example.com上的路径上的路径/示例的上下文的第二个规范匹配模式,<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`
Run Code Online (Sandbox Code Playgroud)

第三个规范 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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

参考网址格式