我在web.xml
文件中使用以下servlet映射:
<servlet>
<servlet-name>PostController</servlet-name>
<servlet-class>com.webcodei.controller.PostController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PostController</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
进行某种搜索。例如:
http://www.myweb.com/The search string here
但问题是CSS,JS和图像被视为搜索请求。
有任何模式可以删除* .css,*。js,* .gif等,所以请求不需要通过我的控制器吗?
非常感谢你,再见!
答案 0 :(得分:2)
有两种选择:
1)通常,在这样的Web应用程序中,由servlet处理的“action”URL被赋予像“/actions/*
”这样的子目录,或者被赋予像“{{1”这样的扩展名。 “或”*.action
“(这就是Struts所做的)。这样就很清楚哪些URL是用于servlet的。这更像是一个包容性的解决方案,而不是你要求的独家解决方案,但我不认为你想要的是什么。
答案 1 :(得分:1)
您可以考虑将到达PostController servlet的URL模式列入白名单,而不是将某些扩展列入黑名单。例如:
<servlet>
<servlet-name>PostController</servlet-name>
<servlet-class>com.webcodei.controller.PostController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PostController</servlet-name>
<url-pattern>/*.jsp</url-pattern>
</servlet-mapping>
如果您使用的是简单的JSP。现在,对于扩展名为* .css,* .gif等的文件的HTTP GET请求将不会通过此servlet进行路由。
正如提问者指出的那样,还有更多的URL不应通过此控制器进行路由。
答案 2 :(得分:0)
Jetty会按照您的期望解释web.xml。我最近在将一个应用程序从jetty移动到tomcat时暴露了这个问题,突然之间再也看不到我的静态资源了。非常令人沮丧。