从servlet-mapping中剥离图像,CSS和JS

时间:2008-11-17 01:33:59

标签: java jsp servlets jsp-tags

我在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等,所以请求不需要通过我的控制器吗?

非常感谢你,再见!

3 个答案:

答案 0 :(得分:2)

有两种选择:

1)通常,在这样的Web应用程序中,由servlet处理的“action”URL被赋予像“/actions/*”这样的子目录,或者被赋予像“{{1”这样的扩展名。 “或”*.action“(这就是Struts所做的)。这样就很清楚哪些URL是用于servlet的。这更像是一个包容性的解决方案,而不是你要求的独家解决方案,但我不认为你想要的是什么。

2)稍微冒险一点的选择是在apache安装后面设置你的web应用服务器,它将图像,css等作为平面文件提供,只将其他所有内容发送到应用服务器上。通常,这样做是为了从您的应用服务器上卸载负载。它需要您将所有这些文件复制到separete目录以供Apache处理。

答案 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时暴露了这个问题,突然之间再也看不到我的静态资源了。非常令人沮丧。