我已经为我的应用程序手动配置了web.xml
。现在,我在运行应用程序时遇到了一些问题。我正试图从我的jsp
页面访问我的servlet
。但是,它抛出错误为page not found
。
servlet放置在文件夹位置
下面<application folder>/WEB-INF/classes/<package>
那么,url-pattern
和servlet-mapping
中的servlet条目应该是什么呢?因此,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>
如果将AddPhotoServlet
的url-pattern
从/AddPhotoServlet
更改为/MyUrl
。然后,可以通过使用/MyUrl
访问AddPhotoServlet
servlet。出于安全原因,您希望隐藏实际的页面URL。
Java Servlet url-pattern
规范:
- 以'/'字符开头,以'/*'结尾的字符串后缀用于路径映射。
- 以'*.'开头的字符串。Prefix用作扩展映射。
- 仅包含'/'字符的字符串表示应用程序的"默认"servlet。在本例中是servlet路径是请求URI减去上下文路径和路径信息是null。
- 所有其他字符串仅用于精确匹配。
参考:Java Servlet规范
您也可以阅读Java Servlet基础知识
Servlet-mapping有两个子标签,url-pattern和servlet-name。Url-pattern指定应该调用servlet-name中给出的servlet的url类型。请注意,容器将使用区分大小写的字符串比较servlet匹配。
url-pattern
的第一个规范是server .com上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的路径/examples的上下文匹配<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。
- 容器将递归地尝试匹配最长路径前缀。这是通过使用'/'字符作为路径分隔符,在路径树中逐级向下移动一个目录来完成的。最长的匹配决定了选择的servlet。
- 如果URL路径的最后一段包含扩展名(例如。jsp), servlet容器将尝试匹配处理扩展名请求的servlet。扩展被定义为最后一个'之后的最后一个片段的一部分。'字符。
- 如果前面三个规则都不能匹配servlet,容器将尝试提供适合所请求资源的内容。如果为应用程序定义了"默认"servlet,则将使用它。
参考URL样式