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

时间:2012-12-24 07:06:39

标签: java servlets web.xml url-pattern servlet-mapping

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

servlet位于文件夹下方位置

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

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

2 个答案:

答案 0 :(得分:68)

url-pattern中使用

web.xml将您的servlet映射到特定网址。请参阅下面的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的{​​{1}}从AddPhotoServlet更改为/AddPhotoServlet。然后,可以使用/MyUrl访问AddPhotoServlet servlet。出于安全原因,您希望隐藏实际页面网址。

Java Servlet /MyUrl规范:

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

参考:Java Servlet Specification

您还可以阅读此Basics of Java Servlet

答案 1 :(得分:30)

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

url-pattern的第一个规范服务器.com上servlet容器上的服务器上下文的web.xml文件与<url-pattern>/status/*</url-pattern>中的模式匹配,如下所示: / p>

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上代理的路径/示例的上下文与<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。

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

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