什么是web.xml中的url模式以及如何configurationservlet

我已经为我的应用程序手动configuration了web.xml 。 现在,我正在运行我的应用程序时遇到问题。 我试图从我的jsp页面访问我的servlet 。 但是,由于page not found ,导致错误。

这些servlet放在文件夹位置下面

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

那么, url-patternservlet-mapping的条目应该是什么。 所以, servlet可以通过URL访问。

web.xml使用url-pattern将您的servlet映射到特定的URL。 请参阅下面的XML代码,您可以在您的web.xmlconfiguration文件中find类似的代码。

 <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 url-pattern/AddPhotoServlet/MyUrl 。 然后,可以使用/MyUrl访问AddPhotoServlet servlet。 好的安全原因,你想隐藏你的实际页面的URL。

Java Servlet的url-pattern规范:

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

参考: Java Servlet规范

你也可以看到这个Servletconfiguration

Servlet映射有两个子标记,url-pattern和servlet-name。 url-pattern指定应该调用servlet-name中给定的servlet的url的types。 请注意,容器将使用区分大小写的string比较进行servlet匹配。

url-pattern第一个规范 web.xml上的servlet容器上的服务器上下文的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上的Agent上的path/例子的上下文匹配<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。

最重要的是我们应该知道URLpath映射规则

  1. 容器将尝试find请求path与servletpath的完全匹配。 成功的匹配selectservlet。
  2. 容器将recursion地尝试匹配最长的path前缀。 这是通过一次一个地删除path树目录来完成的,使用'/'字符作为path分隔符。 最长的匹配决定了所select的servlet。
  3. 如果URLpath中的最后一个段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理扩展请求的servlet。 扩展名被定义为最后一个段之后的最后一个段的一部分。 字符。
  4. 如果前三条规则都不会导致servlet匹配,那么容器将尝试为请求的资源提供适合的内容。 如果为应用程序定义了一个“默认”servlet,它将被使用。

参考URL模式