我已经手动配置web.xml
我的应用程序。 现在,当运行我的应用我所面对的问题。 我试图访问我servlet
从我的jsp
页面。 但是,它抛出错误的page not found
。
该小服务程序都放置在下面的文件夹位置
<application folder>/WEB-INF/classes/<package>
那么,究竟应该是在Servlet中条目url-pattern
和servlet-mapping
。 这样, servlet
可以通过URL访问。
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
的AddPhotoServlet
从/AddPhotoServlet
到/MyUrl
。 然后, AddPhotoServlet
的servlet可以通过访问/MyUrl
。 适合安全原因,要隐藏自己的实际网页的网址。
Java Servlet的url-pattern
规格:
- 一个字符串用“/”字符开头和以“/ *”后缀结束用于路径映射。
- 的字符串开头的“*”。 前缀被用作扩展映射。
- 甲仅包含“/”字符串表示应用程序的“默认”的servlet。 在这种情况下,servlet路径是请求URI减去上下文路径和路径信息为空。
- 所有其他字符串仅用于精确匹配。
参考: Java Servlet规范
你也可以看一下这Java Servlet的基础知识
Servlet的映射有两个子标签的url-pattern和servlet名。 url-pattern的指定为其在servlet的名字给这个servlet应该被称为URL的类型。 要注意的是,容器将使用区分大小写为servlet的匹配字符串比较。
的第一规格 url-pattern
一个web.xml
在服务器.COM servlet容器上的服务器上下文文件匹配图案中的<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
位于路径A上下文/在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。
而且最重要的是我们应该知道的规则对URL路径映射
- 容器将尝试找到请求到Servlet的路径的路径的精确匹配。 一个成功的匹配选择的servlet。
- 容器将递归地尝试匹配最长的路径前缀。 这是通过在同一时间,降压路径树目录中的“/”字符作为路径分隔符来完成。 最长匹配确定所选择的小服务程序。
- 如果在URL路径的最后一段包含扩展名(如.JSP),Servlet容器将尝试匹配一个处理的延期请求的servlet。 的延伸被定义为在最后的最后一个段的部分“” 字符。
- 如果没有以前的三个规则导致一个servlet匹配,容器将尝试提供内容适用于请求的资源。 如果“默认”的servlet为应用程序定义的,它会被使用。
参考URL模式
文章来源: What is the significance of url-pattern in web.xml and how to configure servlet?