你能告诉我是否从HTML图像中调用了servlet吗?

时间:2016-02-24 14:51:36

标签: html image http servlets

在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引用,而不是很欣赏这些微妙的内容。

3 个答案:

答案 0 :(得分:0)

不是我直接意识到的,但如果通过图片src发送,你可以做一些像添加标题的请求。这样,您的请求有效负载在所有情况下都是相同的,但您仍然可以确定请求来自应用程序的位置。例如,您可以使用“referer”标头,其内容在直接调用时为“http://www.yoursite.com”,或在通过图像src调用时为“http://www.yoursite.com/images/linkImage.png”。

编辑: 在一次可爱的讨论之后,我认为最好能够准确地解释这是如何工作的。首先,它不是在servlet产生HTML页面返回客户端时来自servlet的值,而是在客户端中发生。所以这个过程就是这样的:

  • 客户端向servlet发出请求
  • Servlet返回HTML页面,而不是在img标签中指定src(实际上,src应该填充虚拟/备份)onload属性指向javascript函数 将设置图像src。
  • Javascript函数调用服务器上的某些内容来检索图像src。此时,您可以为您的标题添加标题 请求。
  • Servlet接收请求,并可以通过请求来自的标头的存在/值来判断。

答案 1 :(得分:0)

用户可以在浏览器地址栏中输入任何内容。所以你的网址应该是不可预测的。 从图像(或页面上的任何内容)向您的网址添加内容(例如会话ID加当前时间),并验证请求的网址是否具有此值。 在这种情况下,用户可以尝试模拟或剪切和粘贴以前的URL,但服务器将知道它不是来自此特定页面。

答案 2 :(得分:-1)

如果它是doGet(),那么它应该将参数附加到url路径中,你应该能够使用代码中的request.getParameter()来获取该参数。