Servlet Mapping限制图像可见

时间:2014-05-26 17:13:43

标签: java jsp java-ee servlets

我尝试单独映射图像和其他URL,但在ServletPath中调用没有斜杠,它显示图像。当ServletPath包含斜杠时,它不允许显示图像。

JSP:

<img src="images/tiger.jpg"/>

Servlet:

String servletPath = request.getServletPath();
request.getRequestDispatcher("/jspPage.jsp").forward(request, response);

Web.xml中

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>tut.controller.ControllerServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

结果:

http://localhost:8888/ServletFilter/url1     ---------------- image visible
http://localhost:8888/ServletFilter/url1/    ---------------- image not visible
http://localhost:8888/ServletFilter/url1/ex  ---------------- image not visible
http://localhost:8888/ServletFilter/url1/ex/ ---------------- image not visible

2 个答案:

答案 0 :(得分:1)

当浏览器看到以下HTML

<img src="images/tiger.jpg"/>

它向URL发送请求,该URL是通过获取src属性中的路径并相对于当前URL解析它而构建的。因此,如果您之前已向

发送了请求
http://localhost:8888/ServletFilter/url1   

(它呈现包含img标记的HTML),然后图像的网址将是

http://localhost:8888/ServletFilter/images/tiger.png

同样,如果您将请求发送到

http://localhost:8888/ServletFilter/url1/ex

图片的网址为

http://localhost:8888/ServletFilter/url1/images/tiger.png

如果在src路径前加/前缀,则相对于主机名构建URL。

<img src="/images/tiger.jpg"/>

请求将被发送到

http://localhost:8888/images/tiger.png

这不是你想要的,但你可以利用它。 JSTL和EL都提供了一种使用Web应用程序的上下文路径构建绝对(相对于主机)URL的方法。

<c:url value="/images/tiger.png" var="path" />
<img src="${path}"/>

<img src="${pageContext.request.contextPath}/images/tiger.png" />

这将解析为

/ServletFilter/tiger.png

假设ServletFilter是您的Web应用程序的上下文路径的值。

这是一些额外的阅读:

答案 1 :(得分:0)

最简单的解决方案是更改servlet的映射:

 <servlet-name>ControllerServlet</servlet-name>
 <url-pattern>/myservlet</url-pattern>

这将允许您使您的servlet脱离静态上下文处理的业务。

您尝试执行的操作似乎是将Tomcat配置为提供静态内容。虽然这通常不是一个好主意,但由于性能影响,在开发环境中您仍然可能希望这样做。如果是这种情况,这里有一个提供详细信息的好博客。它还将允许您的servlet停止静态内容处理。

http://th1rty7.blogspot.com/2009/05/tomcat-is-often-considered-to-be-too.html