在Web应用中,经常需要动态生成图片,比如实时股市行情,各种统计图等等,这种情况下,图片只能在服务器内存中动态生成并发送给用户,然后在浏览器中显示出来。
本质上,浏览器向服务器请求静态图片如jpeg时,服务器返回的仍然是标准的http响应,只不过http头的contentType不是text/html,而是image/jpeg而已,因此,我们在Servlet中只要设置好contentType,然后发送图像的数据流,浏览器就能正确解析并显示出图片。
在Java中,java.awt和java.awt.image包提供了基本的绘制图像的能力,我们可以在内存中绘制好需要的图形,然后编码成jpeg或其他图像格式,最后发送相应给浏览器即可。下面是使用Servlet动态创建图像的详细步骤:
1.创建BufferedImage对象,该对象存在内存中,负责保存绘制的图像;
2.创建Graphics2D对象,该对象负责绘制所需的图像;
3.当绘制完成后,调用com.sun.image.codec.jpeg包的JPEG编码器对其编码;
4.最后将编码后的数据输出至HttpResponse即可。
注意com.sun.image.codec.jpeg包位于JDK目录的rt.jar包中,它不是公开的API,需要将rt.jar复制到web应用程序的WEB-INF/lib下。
我们先创建一个最简单的Servlet:
public class CreateImageServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("image/jpeg");
}
}
我们首先设置了response的contentType为image/jpeg,这样浏览器就可以正确识别。
然后,创建一个大小为100x100的BufferedImage对象,准备绘图:
int width = 100;
int height = 100;
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
接着,BufferedImage对象中获取Graphics2D对象并绘图:
Graphics2D g = bi.createGraphics(); // 创建Graphics2D对象
// 填充背景为白色:
g.setBackground(Color.BLUE);
g.clearRect(0, 0, width, height);
// 设置前景色:
g.setColor(Color.RED);
// 开始绘图:
g.drawLine(0, 0, 99, 99); // 绘制一条直线
// 绘图完成,释放资源:
g.dispose();
bi.flush();
然后,对BufferedImage进行JPEG编码:
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1.0f, false);
encoder.setJPEGEncodeParam(param);
try {
encoder.encode(bi);
}
catch(IOException ioe) {
ioe.printStackTrace();
}
编码后的JPEG图像直接输出到了out对象中,我们只要传入response. getOutputStream()就可以直接输出到HttpResponse中。
下面是完整的代码:
package com.crackj2ee.web.util;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.image.codec.jpeg.*;
/**
* @author Liao Xue Feng
*/
public class CreateImageServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("image/jpeg");
createImage(response.getOutputStream());
}
private void createImage(OutputStream out) {
int width = 100;
int height = 100;
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
// set background:
g.setBackground(Color.BLUE);
g.clearRect(0, 0, width, height);
// set fore color:
g.setColor(Color.RED);
// start draw:
g.drawLine(0, 0, 99, 199);
// end draw:
g.dispose();
bi.flush();
// encode:
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1.0f, false);
encoder.setJPEGEncodeParam(param);
try {
encoder.encode(bi);
}
catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
最后将这个Servlet编译,注册到web.xml中,映射路径为/CreateImage,写一个简单的index.html测试:
<html><head></head>
<body>
<img src="CreateImage">
</body></html>
如能正确显示,大功告成
分享到:
相关推荐
Java 使用 Servlet 动态生成图片 在 Web 应用中,经常需要动态生成图片,如实时股市行情、各种统计图等等。这种情况下,图片只能在服务器内存中动态生成并发送给用户,然后在浏览器中显示出来。本质上,浏览器向...
Java servlet 自动生成 图片验证码 生成 Java源码
在Servlet中生成图片验证码,首先需要创建一个Servlet类,该类将负责生成随机字符串并将其转化为图像。以下是一些关键步骤: 1. **生成随机字符串**:使用`java.util.Random`和`char[]`数组来创建一个指定长度的...
例如,在登录页面上使用动态验证码图片可以有效防止机器人自动登录尝试。本文将详细介绍如何使用Java Servlet技术动态生成登录验证图片。 #### 概念理解 在Web应用中,动态生成图片意味着图片是在服务器端根据特定...
在"使用Servlet生成图片验证码"这个主题中,我们首先会创建一个Servlet来生成随机的字母和数字组合,通常包含4到6位。这可以通过Java的Random类和Character类来实现。验证码生成后,将其保存在服务器的内存中,以便...
在IT行业中,验证码是一种常见的安全机制,用于防止自动化的...以上就是Java使用Servlet生成图片验证码的基本流程。这个过程涉及到图像处理、随机数生成、HTTP响应等多个方面的知识,是Java Web开发中的一个重要实践。
通过上述步骤,我们可以使用Servlet在Java Web应用中实现一个简单的验证码生成器。当然,实际项目中可能需要考虑更多的细节,如优化验证码的显示效果,增加时间戳防止重放攻击,以及结合其他安全措施等。
理解并掌握以上知识点,开发者就能构建一个能够动态生成GIF图片的JavaServlet,满足用户自定义需求,例如在网页上展示动态的文本信息。这种技术在报表、统计图表、实时数据更新等场景中非常有用。
Servlet是Java Web开发中的一...总之,Servlet生成图片验证码是一种常见的Web安全实践,通过结合Java的图形库和HTTP交互,可以实现高效且安全的用户验证机制。在设计和实现时,应充分考虑用户体验和安全性之间的平衡。
例如,你可以创建一个Servlet接收上传的图片,并将其存储到服务器的特定目录,或者将多媒体文件转换为适合网络传输的格式。 2. **Java Server Pages (JSP) 技术** JSP是一种用于动态生成HTML、XML或其他文本格式的...
`servlet`生成验证码图片是通过服务器端动态创建一个包含随机字符的图像,用户需要输入图像中显示的文字或数字来验证其身份。以下将详细解释这个过程及其相关知识点: 1. **Servlet**:Servlet是Java中用于扩展...
标题 "servlet生成保存图片,压缩zip见附件" 暗示了这是一个关于在Java Web环境中,使用Servlet来动态生成并保存图片的实践案例。在这个过程中,Servlet被用来处理HTTP请求,生成图片,并可能将其存储在服务器上。...
在这个博客源码中,Servlet扮演了服务器端动态网页生成的核心角色。 在描述中提到,该博客系统与SQL SERVER数据库进行交互,这表明它可能使用JDBC(Java Database Connectivity)来管理数据存储。JDBC是Java中用来...
- **展示验证码**:在JSP页面上,使用`<img>`标签加载Servlet生成的GIF验证码。 - **用户输入验证**:用户输入验证码后,提交表单时,服务器会对比Session中的验证码内容和用户输入,如果匹配则验证成功,否则提示...
在IT行业中,Web开发是一项重要的技能,而JSP(JavaServer Pages)和Servlet是Java Web开发中的关键组件,尤其在构建动态网站时。本项目"jsp+servlet小项目(实现图片上传功能)"旨在教授如何利用这两者创建一个简单...
下面通过具体的代码示例来解释如何使用Servlet生成验证码图片。 ```java public class CreateImageServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) ...
在本项目"基于Java servlet的网上商品信息查询"中,我们主要关注的是如何利用Java Servlet技术来构建一个能够与数据库交互的在线商品信息查询系统。Servlet是Java Web开发中的核心组件,它允许开发者处理HTTP请求并...
在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种常见的技术,它们常常结合使用来构建动态网站。在这个“java jsp+servlet根据数据生成饼状图.rar”项目中,开发者通过JSP和Servlet实现了根据数据动态生成...
这个压缩包文件包含了一系列与条形码生成相关的代码资源,主要涉及Java编程语言、Servlet和Struts框架。下面将详细阐述这些技术及其应用。 首先,条形码生成是通过特定的算法将数据转换成可视化的图形,以便于扫描...
Servlet生成二维码图片后,将其设置为PNG格式并返回给客户端。 此外,`jsp页面`通常用于创建用户界面,允许用户输入要生成二维码的内容,然后通过表单提交请求到Servlet。例如,你可以创建一个简单的HTML表单,其中...