为什么没有为所有请求调用 servlet
Why is servlet not being called for all requests
我正在将 Web 应用程序部署到 tomcat 8(重命名为 ROOT.war),因为 url 模式设置为 / 我认为所有请求都会定向到 servlet。但事实并非如此,最终我意识到如果我开始 url 与?比如
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>
servlet 映射是特定的。您需要添加一个通配符。
<servlet-mapping>
<servlet-name>WidgetServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
如果您希望您的 Servlet 为所有 URL 提供服务,那么 url-pattern
应该像这样
<url-pattern>/*</url-pattern>
顾名思义,应该是RegEx模式。当您说 /
时 - 这意味着在 URL 中查找 /
的单次出现。但是当你在 URL 中有多个斜杠时,比如
那么它应该是 /*
,这意味着您要求它查找零次或多次出现的斜杠。
希望说清楚:)
我正在将 Web 应用程序部署到 tomcat 8(重命名为 ROOT.war),因为 url 模式设置为 / 我认为所有请求都会定向到 servlet。但事实并非如此,最终我意识到如果我开始 url 与?比如
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>
servlet 映射是特定的。您需要添加一个通配符。
<servlet-mapping>
<servlet-name>WidgetServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
如果您希望您的 Servlet 为所有 URL 提供服务,那么 url-pattern
应该像这样
<url-pattern>/*</url-pattern>
顾名思义,应该是RegEx模式。当您说 /
时 - 这意味着在 URL 中查找 /
的单次出现。但是当你在 URL 中有多个斜杠时,比如
那么它应该是 希望说清楚:)/*
,这意味着您要求它查找零次或多次出现的斜杠。