为什么不为所有请求调用servlet

时间:2015-03-09 15:03:56

标签: java tomcat

我正在将一个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>

2 个答案:

答案 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>