在HttpServlet doGet方法中,是否可以知道servlet URL是否是通过IMG SRC访问的,而不是在浏览器地址栏中输入?
更新
这是我的实际HTML。
<a href="#" onclick="openwindow('/image/display?imageId=${image.id}'); return false;"><img width="50px" alt="${image.originalName}" src="/image/display?imageId=${image.id}" /></a>
正如您所看到的,它会在页面中显示一个内嵌的小缩略图,但是如果您点击该缩略图,它会在新窗口中打开全尺寸。
我的DisplayImageServlet位于/ image / display后面。对于缩略图而言,我需要在servlet中使用一些稍微不同的逻辑,而不是全尺寸。
理想情况下,我想要一个不涉及更改HTML引用的解决方案。我团队中的其他开发人员可能会向servlet添加HTML引用,而不是很欣赏这些微妙的内容。
答案 0 :(得分:0)
不是我直接意识到的,但如果通过图片src发送,你可以做一些像添加标题的请求。这样,您的请求有效负载在所有情况下都是相同的,但您仍然可以确定请求来自应用程序的位置。例如,您可以使用“referer”标头,其内容在直接调用时为“http://www.yoursite.com”,或在通过图像src调用时为“http://www.yoursite.com/images/linkImage.png”。
编辑: 在一次可爱的讨论之后,我认为最好能够准确地解释这是如何工作的。首先,它不是在servlet产生HTML页面返回客户端时来自servlet的值,而是在客户端中发生。所以这个过程就是这样的:
答案 1 :(得分:0)
用户可以在浏览器地址栏中输入任何内容。所以你的网址应该是不可预测的。 从图像(或页面上的任何内容)向您的网址添加内容(例如会话ID加当前时间),并验证请求的网址是否具有此值。 在这种情况下,用户可以尝试模拟或剪切和粘贴以前的URL,但服务器将知道它不是来自此特定页面。
答案 2 :(得分:-1)
如果它是doGet(),那么它应该将参数附加到url路径中,你应该能够使用代码中的request.getParameter()来获取该参数。