我有一個servlet與web.xml
如下:web.xml中的URL模式過於寬容?
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<welcome-file-list>
<welcome-file>/</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.mydomain.myapp.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/</url-pattern>
<url-pattern>/rest1*</url-pattern>
<url-pattern>/rest2*</url-pattern>
<url-pattern>/rest3*</url-pattern>
</servlet-mapping>
</web-app>
最終,該servlet應該支持REST調用像GET
從http://myserver/myapp/rest1?param=1
。
然而,所發生的情況是,從瀏覽器開始以http://myserver/myapp/
開頭的URL的所有調用顯然導致調用與request.pathInfo() == null
的小服務器的doGet()
方法。
但隨後,用給定的url-pattern
S,應的URL http://myserver/myapp/rest1?param=1
不會導致"/rest1".equals(request.pathInfo())
和應該如http://myserver/myapp/foo
URL模式不會導致從servlet HTTP響應404?
該servlet在Apache Tomcat運行9.
請注意,這也在servlet規範中有所解釋。我知道更多的人通常不會閱讀規範,因爲它們是乾燥且不可讀的,但是Java Servlet規範並不是這些文檔之一:它非常易讀並且回答了關於事情應該如何行事的大多數問題。 –
@ChristopherSchulz Thx參與回答爲Tomcat的高級專家。順便說一下,我剛剛刪除了其他最近關於響應代碼401/501之間混淆的問題。我對curl的命令行選項很蠢。用'curl -I'試過'curl -i'應該是合適的。重新THX。 – Drux
是的,使用'curl -I'會發出'HEAD'請求。如果你的servlet不支持'doHead',那麼你會得到一個501響應。 '-i'看起來像你想要的。 –