MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 用servlet实现图片自动换(用一个.jpg结尾的URL获得

用servlet实现图片自动换(用一个.jpg结尾的URL获得一张可变图片),求教怎么在每次被外链引用时按顺序更换图片

www.MyException.Cn  网友分享于:2015-08-26  浏览:114次
用servlet实现图片自动换(用一个.jpg结尾的URL获得一张可变图片),求教如何在每次被外链引用时按顺序更换图片
每次刷新页面,同样一个图片URL显示的图片不一样。曾经有不少网站搞过这东西,魔幻图片夹、天使表情网等等,因为未知原因一一关闭。于是想自己尝试制作出类似的效果。该效果常用于百度贴吧骗回帖,论坛动态签名头像等。看到不少人问过类似问题,但给的答案都是用jsp页面或者flash实现,这样返回的内容不能当作图片URL被外链。看到有PHP的实现方法,但是URL是以.php的形式表现,不具备足够的隐蔽性。

详细需求说明:
1.输入输出效果与jpg图片URL完全类似,即输入一个后缀为.jpg的URL,获得一个图片文件。URL不能用.php,.jsp或者.do带参数等形式,否则影响隐蔽效果;返回的内容不能是一个使用img标签的页面,否则此url放入img标签将不能被正常显示。
2.按顺序或者随机的显示方式,当用户每次刷新时,返回的图片将产生相应的变化。

我现在的实现方法是:
1.配置web.xml,添加如下代码,用于将某特定的jpg请求转向到servlet处理:
XML code
<servlet>
    <servlet-name>PicChange</servlet-name>
    <servlet-class>PicChange</servlet-class>
  </servlet>
 
 <servlet-mapping>
    <servlet-name>PicChange</servlet-name>
    <url-pattern>/orz.jpg</url-pattern>
  </servlet-mapping>



2.创建对应的servlet,名为PicChange.java,输出写法是参考了验证码图片
Java code

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class PicChange extends HttpServlet {

 

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doPost(request,response);
 }

 /*mir
  Mar 31, 2009*/

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("image/jpeg");
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expires", 0);
  
  OutputStream out = response.getOutputStream();
  //显示方式暂时采用传入的参数,可从数据库或者配置文件中获取定义
  String orderOrRandom = (String)request.getParameter("random");
  if(orderOrRandom==null||"".equals(orderOrRandom)){
   orderOrRandom = "order";
  }else if("true".equals(orderOrRandom)){
   orderOrRandom = "random";
  }
  String img = request.getSession().getServletContext().getRealPath("image");
  File imgPath = new File(img);
  File[] imgList = imgPath.listFiles();//获得图片文件夹下的所有图片File
  
  Integer num;
  
  if("order".equals(orderOrRandom)){
   HttpSession session = request.getSession();
   num = (Integer)session.getAttribute("num");
   if(num==null||num>=imgList.length){
    num=0;
   }
   session.setAttribute("num", num+1);
   
  }else{
   num = ((Double)(Math.random()*(imgList.length))).intValue();
   
  }
  ImageIO.write(ImageIO.read(imgList[num]),"JPEG",out);

 }
}





预览效果:



好了问题来了……之前测试的时候发现,貌似图片仅仅在外链被引用时并不会产生session。本打算默认的变化方式是按顺序,用户每次提交时在session中取一个累加计数器来返回不同的图片。
结果每次刷新时都只会显示第一张图片。只有当用户将这个URL放入地址栏访问过后才会生效,这时点击刷新就会按顺序更换了,并且此时保持浏览器不关闭,访问其他的论坛中外链的这张图片,也能够看到变化效果。

在这个问题没解决的情况下,我现在已设置为随机更换图片效果。随机不会出现这种问题……
我想知道是否有更好的办法来实现顺序更换,或者有更好更节省资源的算法?第一次发帖,希望各位高手不吝赐教,谢谢……

------解决方案--------------------
不太懂~mark~学习~
------解决方案--------------------
request.getSession() 可以创建一个
------解决方案--------------------
如果session没有效。那只能暂时用IP判断了。
------解决方案--------------------
1、不改WEB.XML你要的效果绝对达不到,除非你自己写个TOMCAT
2、IP可以用REQUEST得到,在HTTP协议中,每个访问者都带着自己的IP来的。
------解决方案--------------------

文章评论

Java程序员必看电影
Java程序员必看电影
我的丈夫是个程序员
我的丈夫是个程序员
中美印日四国程序员比较
中美印日四国程序员比较
老程序员的下场
老程序员的下场
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员必看的十大电影
程序员必看的十大电影
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
鲜为人知的编程真相
鲜为人知的编程真相
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
旅行,写作,编程
旅行,写作,编程
每天工作4小时的程序员
每天工作4小时的程序员
一个程序员的时间管理
一个程序员的时间管理
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
代码女神横空出世
代码女神横空出世
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
 程序员的样子
程序员的样子
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员都该阅读的书
程序员都该阅读的书
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
编程语言是女人
编程语言是女人
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
总结2014中国互联网十大段子
总结2014中国互联网十大段子
10个调试和排错的小建议
10个调试和排错的小建议
如何成为一名黑客
如何成为一名黑客
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员的鄙视链
程序员的鄙视链
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
漫画:程序员的工作
漫画:程序员的工作
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有