什么是web.xml中的url模式以及如何configurationservlet
我已经为我的应用程序手动configuration了web.xml
。 现在,我正在运行我的应用程序时遇到问题。 我试图从我的jsp
页面访问我的servlet
。 但是,由于page not found
,导致错误。
这些servlet放在文件夹位置下面
<application folder>/WEB-INF/classes/<package>
那么, url-pattern
和servlet-mapping
的条目应该是什么。 所以, servlet
可以通过URL访问。
web.xml
使用url-pattern
将您的servlet
映射到特定的URL。 请参阅下面的XML代码,您可以在您的web.xml
configuration文件中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
规范:
- 以“/”字符开头并以“/ *”后缀结尾的string用于path映射。
- 以“*”开头的string 前缀被用作扩展映射。
- 只包含'/'字符的string表示应用程序的“默认”servlet。 在这种情况下,servletpath是请求URI减去上下文path,path信息为空。
- 所有其他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映射规则
- 容器将尝试find请求path与servletpath的完全匹配。 成功的匹配selectservlet。
- 容器将recursion地尝试匹配最长的path前缀。 这是通过一次一个地删除path树目录来完成的,使用'/'字符作为path分隔符。 最长的匹配决定了所select的servlet。
- 如果URLpath中的最后一个段包含扩展名(例如.jsp),则servlet容器将尝试匹配处理扩展请求的servlet。 扩展名被定义为最后一个段之后的最后一个段的一部分。 字符。
- 如果前三条规则都不会导致servlet匹配,那么容器将尝试为请求的资源提供适合的内容。 如果为应用程序定义了一个“默认”servlet,它将被使用。
参考URL模式