所以,现在我已经将我的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。我该怎样避免这个?
有人可以建议更好的方法来设置我的网址和目录吗?
答案 0 :(得分:2)
2个选项:
将/content/css
,/content/image
,/content/js
移至/resources/css
等。要修复现有JSP中的网址,只需使用find&替换智能方式即可。应该是一分钟工作。
将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”。