2012-12-24 27 views
39

我已经为我的应用程序手动配置了web.xml。现在,我在运行我的应用程序时遇到了问题。我正在尝试从我的jsp页面访问我的servlet。但是,这是抛出错误为page not foundweb.xml中url模式的重要性以及如何配置servlet?

的servlet被下面的文件夹位置划归

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

那么,究竟应该在url-patternservlet-mapping对servlet的条目。因此,servlet可以通过URL访问。

+0

第一读取servlet规范和映射。请参阅@var_给出的答案。如果您再次遇到问题或异常,请粘贴相关异常,社区将尝试调试该问题。 –

+1

您应该接受让社区从中受益的答案。 –

回答

64

url-pattern用于web.xmlservlet映射到特定的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> 

如果从/AddPhotoServlet改变AddPhotoServleturl-pattern/MyUrl。然后,AddPhotoServlet servlet可以通过使用/MyUrl访问。出于安全原因,您想要隐藏您的实际页面URL。

的Java Servlet url-pattern规格:

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

参考:Java Servlet Specification

你也可以看一下这Basics of Java Servlet

+3

只需要添加,如果OP使用支持Servlet 3.0的Web应用程序servlet,那么就不需要在web.xml中配置servlet。在[我们的Servlets Wiki](http://stackoverflow.com/tags/servlets/info) –

+0

有一个很好的解释提供更新URL模式规范: –

+0

为'/ AddPhotoServlet例子 - 将Servlet可以通过类似'http:// AddPhotoServlet.company.com /'的链接访问?或者它会被'http:// company.com/AddPhotoServlet'访问吗? – mmcrae

27

Servlet的映射有两个子标签的url-pattern和servlet名。 url-pattern的指定为其在servlet的名字给这个servlet应该被称为URL的类型。要注意的是,容器将使用区分大小写为servlet的匹配字符串比较。

的第一个规范url-pattern a web.xml服务器上的servlet容器上的服务器上下文的文件。COM的模式匹配,在<url-pattern>/status/*</url-pattern>如下:

第二规格的 url-pattern位于路径A上下文
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 

/在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映射元素将server servlet实例映射到默认映射。

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

对于包含该元素的上下文中,即没有被另一个映射处理的任何请求被转发到server的servlet。

,最重要的是我们应该知道的URL路径映射

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

参考URL Pattern

相关问题