我正在将一个web应用程序部署到tomcat 8(重命名为ROOT.war),因为url模式设置为/我认为所有请求都将被定向到servlet。但事实并非如此,最终我意识到,如果我开始使用网址?比如
http://localhost:8080/?search=fred
它不起作用,但没有?它会起作用
http://localhost:8080/search=fred
为什么会这样?
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
<display-name>Widget</display-name>
<servlet>
<servlet-name>WidgetServlet</servlet-name>
<servlet-class>com.jthink.WidgetServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WidgetServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
答案 0 :(得分:1)
如果您希望Servlet提供所有网址,则url-pattern
应该像这样
<url-pattern>/*</url-pattern>
顾名思义,它应该是RegEx模式。当您说/
时,它意味着在网址中查找单个/
。但是当你在URL中有多个斜杠时,就像
http://stackoverflow.com/questions/28945202/
那么它应该是/*
,这意味着你要求它查找零次或多次斜线。
希望明确表示:)
答案 1 :(得分:0)
servlet映射是特定的。您需要添加通配符。
<servlet-mapping>
<servlet-name>WidgetServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>