Servlet URL和物理目录

时间:2011-11-11 19:45:55

标签: java servlets web.xml

所以,现在我已经将我的JSP文件移动到/ WEB-INF /内容之后将我的ProcessServlet编码为使用forward()来编写它们,我应该如何设置我的web.xml URL模式来获取它们到Servlet?

注意:我的JSP与CSS,图像和JS文件一起在/ content下。所以/ content / css,/ content / image,/ content / js都还在那里。

我发现如果我在web.xml中使用模式“/ content / *”作为我的Servlet,那么对css,images和js的请求也都会通过Servlet。我该怎样避免这个?

有人可以建议更好的方法来设置我的网址和目录吗?

3 个答案:

答案 0 :(得分:2)

2个选项:

  1. /content/css/content/image/content/js移至/resources/css等。要修复现有JSP中的网址,只需使用find&替换智能方式即可。应该是一分钟工作。

  2. 将servlet的网址格式/content/*更改为其他内容,例如/pages/*

    • 如果您想保留现有网址,请在/content/*上添加一个基本上符合以下条件的过滤器:

      String uri = ((HttpServletRequest) request).getRequestURI();
      if (uri.startsWith("/content/css/") || uri.startsWith("/content/image/") || uri.startsWith("/content/js/")) {
          chain.doFilter(request, response); // Goes to default servlet.
      } else {
          request.getRequestDispatcher("/pages" + uri).forward(request, response);
      }
      

    这只是一个巨大的变化。您可能需要修复JSP中的所有链接,以确保它们的设计方式与您在单个位置指定<base>的主模板的设计方式相同。此外,您可能希望为旧书签和搜索索引添加301重定向。

答案 1 :(得分:1)

您不必使用servlet进行此类转发。如果jsp页面的数量不大,您可以直接在web.xml中为它们声明映射,就像您对servlet所做的那样(参见示例here

答案 2 :(得分:1)

这就是我设置我的方式:

+-WEB-INF/
|   +-jsp/*.jsp
+-styles/*.css
+-images/*.jpn,*.png,etc.

我使用servlet映射来映射动态内容,例如* jsp,并保留默认的servlet来处理静态内容。当然,这不是解决问题的唯一方法。

web.xml看起来像这样:

<servlet-mapping>
    <servlet-name>Your Servlet</servlet-name>
    <url-pattern>/content/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

默认的servlet由大多数servelt容器提供,您不需要编写一个。对于tomcat和jetty,关键字是“default”。

相关问题