我有一个error.html页面,我希望在用户遇到Error404时重定向到该页面。以下是有效的:
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
但是,我的error404.jsp文件包含一个在重定向用户时不会显示的图像。如果我只输入URL,则会显示包含图像的完整页面。但是,如果用户尝试执行报告错误404的操作,则会显示error404.jsp文件而不显示图像。
我也尝试过使用error404.html,但我遇到了同样的问题......
你知道为什么会这样吗?
非常感谢 艾娜
答案 0 :(得分:3)
呈现错误页面时,其内容将在HTTP响应中返回,而不进行重定向。这意味着浏览器仍然可以看到&#39;它在有错误的请求的URL的上下文中。因此,任何相对资源链接(图像,CSS等)都将相对于当前页面的URL。
因此,如果您有以下设置:
image1.gif
error404.jsp
将图片引用为"../images/image1.gif"
您会发现键入http://yourserver.com/YourContextRoot/error404.jsp的工作正常,但是当您使用http://yourserver.com/YourContextRoot/path1/path2/missingPage时,它会尝试在错误的路径中查找图像(即在/YourContextRoot/path1/images/image1.gif
下)。
解决方案是使用JSP EL或scriptlet创建一个与服务器相关的链接(即以&#39; /&#39;开头),包括context-root:
<img src="${pageContext.request.contextPath}/images/image1.gif" />
我希望有效!