img标签的src属性等于servlet名,求详细的解释 在用Ajax实现图片验证码时,都是<img src="servlet名"> ,这样就能访问到对应的servlet。不知道其中的原理。求助求助img src servlet名 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 servlet会返回一个图片的名字,浏览器根据图片名字再到服务器端取这个图片。这样算来来回各跑了两趟? servlet使用java gui api生成图片,得到图片二进制字节流,返回浏览器渲染 确实是跑了两次,在IE7中就把那个servlet执行了两次,但是再firefox中就只执行了一次servlet。但是这个过程浏览器是具体怎么执行的呢? <img src="servlet名">浏览器是如何解析的呢? 1.servlet生成一个图片2.你直接输入servlet的连接看一下,就是一个图片,和我们自己发布到服务器的一样。3.页面加载时,会访问这个servelt连接,自然就会生成一个图片 这要看你src="servlet名"里的servlet是给谁用的了。也就是给服务器,还是浏览器。 servlet中输出一个流(java.io.InputStream )就可以了,private char mapTable[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; /** * 生成随机的注册验证码图像 * @param request * @param response * */ public void bringCode(HttpServletRequest request, HttpServletResponse response) { try { int width = 65, height = 24; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics graphics = image.getGraphics();// 获取图形上下文 graphics.setColor(getRandColor(180, 250));// 设定背景色(最多色调255) graphics.fillRect(0, 0, width, height); graphics.setColor(Color.black);// 画边框 graphics.drawRect(0, 0, width - 1, height - 1); String randCode = "";// 取随机产生的认证码 for (int i = 0; i < 4; ++i) {// 4代表4位验证码,如果要生成更多位的认证码,则加大数值 randCode += mapTable[(int) (mapTable.length * Math.random())]; } graphics.setColor(Color.black);// 将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句 graphics.setFont(new Font("Atlantic Inline", Font.PLAIN, 18)); String str = randCode.substring(0, 1); graphics.drawString(str, 8, 17); str = randCode.substring(1, 2); graphics.drawString(str, 20, 15); str = randCode.substring(2, 3); graphics.drawString(str, 35, 18); str = randCode.substring(3, 4); graphics.drawString(str, 45, 15); Random rand = new Random();// 随机产生30个干扰点 for (int i = 0; i < 30; i++) { int x = rand.nextInt(width); int y = rand.nextInt(height); graphics.drawOval(x, y, 1, 1); } graphics.dispose();// 释放图形上下文 request.getSession().setAttribute(FrameConfig.checkCode, randCode);// 认证码保存在session中 OutputStream output = response.getOutputStream(); ImageIO.write(image, "JPEG", output);// 输出图像到页面 image.flush(); output.close(); } catch (Exception e) { e.printStackTrace(); } }关键代码:ImageIO.write(image, "JPEG", output);// 输出图像到页面 struts2配置问题 XML动态生成CLASS。。。 紧急问题~~~ 大家看看这个错误是怎么回事!!! 不能显示值<html:text property="validatecode" value='<bean:message key="page.vcode"/>'/> 开发第一个Hibernate程序遇到了小麻烦,不知道怎么放这些文件与程序? BeanUtils的克隆或拷贝 tomcat环境下,在web.xml中部署一个Servlet的问题,详细请看代码... 有关Java Socket 问题 servlet里压缩处理图片有问 怎么用JS判断两个时间段跨度小于三个月啊? 关于图片上传的问题
这样算来来回各跑了两趟?
确实是跑了两次,在IE7中就把那个servlet执行了两次,但是再firefox中就只执行了一次servlet。
但是这个过程浏览器是具体怎么执行的呢?
2.你直接输入servlet的连接看一下,就是一个图片,和我们自己发布到服务器的一样。
3.页面加载时,会访问这个servelt连接,自然就会生成一个图片
/**
* 生成随机的注册验证码图像
* @param request
* @param response
* */
public void bringCode(HttpServletRequest request, HttpServletResponse response) {
try {
int width = 65, height = 24;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics = image.getGraphics();// 获取图形上下文
graphics.setColor(getRandColor(180, 250));// 设定背景色(最多色调255)
graphics.fillRect(0, 0, width, height);
graphics.setColor(Color.black);// 画边框
graphics.drawRect(0, 0, width - 1, height - 1);
String randCode = "";// 取随机产生的认证码
for (int i = 0; i < 4; ++i) {// 4代表4位验证码,如果要生成更多位的认证码,则加大数值
randCode += mapTable[(int) (mapTable.length * Math.random())];
}
graphics.setColor(Color.black);// 将认证码显示到图像中,如果要生成更多位的认证码,增加drawString语句
graphics.setFont(new Font("Atlantic Inline", Font.PLAIN, 18));
String str = randCode.substring(0, 1);
graphics.drawString(str, 8, 17);
str = randCode.substring(1, 2);
graphics.drawString(str, 20, 15);
str = randCode.substring(2, 3);
graphics.drawString(str, 35, 18);
str = randCode.substring(3, 4);
graphics.drawString(str, 45, 15);
Random rand = new Random();// 随机产生30个干扰点
for (int i = 0; i < 30; i++) {
int x = rand.nextInt(width);
int y = rand.nextInt(height);
graphics.drawOval(x, y, 1, 1);
}
graphics.dispose();// 释放图形上下文
request.getSession().setAttribute(FrameConfig.checkCode, randCode);// 认证码保存在session中
OutputStream output = response.getOutputStream();
ImageIO.write(image, "JPEG", output);// 输出图像到页面
image.flush();
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
关键代码:
ImageIO.write(image, "JPEG", output);// 输出图像到页面