【问题标题】:Strip Images, CSS and JS from servlet-mapping从 servlet-mapping 中去除图像、CSS 和 JS
【发布时间】:2008-11-17 01:33:59
【问题描述】:

我在 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> 

进行某种搜索。例如:

 @987654321@ search string here 

但问题是 CSS、JS 和图像被视为搜索请求。

有什么模式可以去掉 *.css、*.js、*.gif 等,所以请求不需要通过我的控制器?

非常感谢,再见!

【问题讨论】:

    标签: java jsp servlets jsp-tags


    【解决方案1】:

    想到两个选项:

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

    2) 稍微冒险一点的选择是在 apache 安装之后设置您的 Web 应用服务器,该安装将图像、css 等作为平面文件提供,仅将其他所有内容发送到应用服务器。通常,这样做是为了减轻应用服务器的负载。这将要求您将所有这些文件复制到一个单独的目录以供 apache 处理。

    【讨论】:

      【解决方案2】:

      与其将某些扩展列入黑名单,不如考虑将到达 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 不应该通过这个控制器进行路由。

      【讨论】:

        【解决方案3】:

        Jetty 按照您的预期解释 web.xml。我最近在将应用程序从 jetty 移动到 tomcat 时暴露了这个问题,突然就再也看不到我的静态资源了。非常沮丧。

        【讨论】:

          猜你喜欢
          • 2011-11-25
          • 2012-08-22
          • 2017-03-19
          • 2012-07-22
          • 2014-05-27
          • 2021-10-01
          • 2013-09-07
          • 2020-04-11
          • 1970-01-01
          相关资源
          最近更新 更多