好久没有动过JavaEE了, 现在从最基础的开始写写总结.
在JSP页面中动态显示图片.
后台servlet中生成图片, 或者是读取某一个图片, 传到前台JSP中显示是很常见的需求.
下面开始:
一.
JSP中显示图片的主要代码就是:
<img src="http://localhost:8080/imgShow/ImageShowServlet" />
其中"imgShow"是项目名称, "ImageShowServlet"是url-pattern.
二.
web.xml的配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>imgShow</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>ImageShowServlet</display-name> <servlet-name>ImageShowServlet</servlet-name> <servlet-class>com.xuriyunhai.sevlet.ImageShowServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageShowServlet</servlet-name> <url-pattern>/ImageShowServlet</url-pattern> </servlet-mapping> </web-app>
三.
创建的servlet:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width=300, height=100;
BufferedImage image = createImgage(width, height);
//ByteArrayOutputStream bao=new ByteArrayOutputStream();
//ImageIO.write(image, Util.JPG, bao);
Util.showImage(response, image, Util.JPG, true);
Util.showImage(response, bao.toByteArray(), true);
//Util.showImage(response, "d:\\aaa.png", true);
}
/**
* 生成图片
*
* @param width 图片宽度
* @param height 图片高度
* @return
*/
private BufferedImage createImgage(int width, int height) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//以下填充背景颜色
g.setColor(Color.lightGray);
g.fillRect(0, 0, width, height);
//以下设置前景色
g.setColor(Color.blue);
g.drawString("Http://www.xuriyunhai.com",10,20);
g.drawString("Author:xuriyunhai[xuriyunhai@gmail.com]",10,40);
g.drawLine(10,50,290,50);
g.drawString("Image Show",10,70);
g.dispose();
return image;
}
Util类:
public class Util { public static final String JPG = "jpg"; public static final String PNG = "png"; public static final String BMP = "bmp"; public static final String GIF = "gif"; /** * 在servlet中调用该方法, jsp页面中img标签的src指向该servlet, 则会显示图片 * * @param response * @param path * @param isResponseClose */ public static void showImage(HttpServletResponse response, String path, boolean isResponseClose) { try { ServletOutputStream outStream = response.getOutputStream();// 得到向客户端输出二进制数据的对象 FileInputStream fis = new FileInputStream(path); // 以byte流的方式打开文件 // 读数据 byte data[] = new byte[1000]; while (fis.read(data) > 0) { outStream.write(data); } fis.close(); response.setContentType("image/*"); // 设置返回的文件类型 outStream.write(data); // 输出数据 if (isResponseClose) { outStream.close(); } } catch (IOException e) { e.printStackTrace(); } } /** * 在servlet中调用该方法, jsp页面中img标签的src指向该servlet, 则会显示图片 * * @param response * @param data * @param isResponseClose */ public static void showImage(HttpServletResponse response, byte[] data, boolean isResponseClose) { try { ServletOutputStream outStream = response.getOutputStream();// 得到向客户端输出二进制数据的对象 // 读数据 outStream.write(data); response.setContentType("image/*"); // 设置返回的文件类型 outStream.write(data); // 输出数据 if (isResponseClose) { outStream.close(); } } catch (IOException e) { e.printStackTrace(); } } /** * 在servlet中调用该方法, jsp页面中img标签的src指向该servlet, 则会显示图片 * * @param response * @param image * @param imgType * @param isResponseClose */ public static void showImage(HttpServletResponse response, BufferedImage image, String imgType, boolean isResponseClose) { try { ImageIO.write(image, imgType, response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } }
最主要的方法就是Util类中的showImage方法, 该方法通过各个重载的方法实现3中方式的图片输入:
1, 传入正确的图片路径
2, 传入图片的字节数组
3, 传入BufferImage, 该种方式主要用在java代码生成图片的情况.
最后附上代码:
相关推荐
### JSP中利用Servlet生成验证码图片 在Web应用开发中,验证码被广泛应用于用户登录、表单提交等场景,以防止自动化的恶意攻击。本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个...
7. **JSP显示图像**:在JSP页面中,可以通过标签引用由Servlet生成的图像。如果Servlet返回的是图像的URL,那么标签的src属性应指向该URL;如果Servlet直接将图像数据写入响应,JSP可以通过data URI scheme显示图像...
在本文中,我们将深入探讨如何使用Java的JSP(JavaServer Pages)和Servlet技术来实现一个图片上传功能。这是一个常见的Web开发任务,特别是在构建交互性强、动态内容丰富的网站时。以下是一些关键知识点: 1. **...
在实际项目中,JSP通常与Servlet配合使用,Servlet在后台处理业务逻辑,而JSP则负责显示结果。 其次,MySQL是一个流行的开源关系型数据库管理系统。在这个Demo中,MySQL存储了生成树所需的数据,例如节点信息、层级...
在IT行业中,Web开发是一项重要的技能,而JSP(JavaServer Pages)和Servlet是Java Web开发中的关键组件,尤其在构建动态网站时。本项目"jsp+servlet小项目(实现图片上传功能)"旨在教授如何利用这两者创建一个简单...
Servlet接收到请求后,进行必要的数据处理,然后可能将结果存储在域对象中(如HttpSession或RequestScope),最后转发或重定向到JSP页面,由JSP负责渲染结果显示给用户。这种方式有利于实现MVC(Model-View-...
在JSP+Servlet的架构中,Servlet通常用于处理业务逻辑,如从数据库获取数据、计算或转换数据。例如,Servlet可以连接到数据库查询动态数据,然后以JSON格式返回给JSP页面,供ECharts使用。 ECharts是由百度开发的一...
- **购物车显示**:JSP页面从session中获取商品信息,展示购物车内容。 - **数量修改**:用户可以更改购物车中商品的数量,Servlet更新session中的数据。 - **总价计算**:Servlet遍历session中的所有商品,根据...
在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种常见的技术,它们用于构建动态网站。这个“一个简单的JSP+Servlet图片上传例子”是一个基础教程,旨在帮助初学者理解如何通过这两种技术实现用户界面与...
主要围绕JSP与Servlet的基本概念、工作原理以及在Web应用开发中的作用等方面展开。 ### JSP与Servlet概述 #### JSP(JavaServer Pages) - **定义**:JSP是一种基于Java技术的服务器端网页开发技术,它允许在HTML...
在IT行业中,构建一个基于JSP(JavaServer Pages)和Servlet的通讯录系统是一个常见的实践项目,这有助于理解和掌握Web开发的基本概念和技术。本项目主要涉及以下知识点: 1. **JSP基础**:JSP是一种动态网页技术,...
例如,在电子商务网站中,商品列表和价格可能需要根据库存情况实时更新,这就需要使用动态页面技术,如Servlet或JSP来实现。 ### Servlet相对于传统CGI技术的优点 Servlet相比传统的CGI技术具有多方面的优势,包括...
【JSP Servlet MVC 模式详解】 在Web开发领域,JSP(JavaServer Pages)、Servlet和MVC(Model-View-Controller)...在"jsp servlet MVC Demo"实践中,你可以深入学习如何将这些技术有效地整合到一个实际的Web应用中。
在我们的例子中,JSP页面会显示从数据库获取的图片。 2. **Servlet**:Servlet是Java Web应用中的一个组件,负责处理HTTP请求和响应。在这里,我们将创建一个Servlet来从数据库中读取图片的二进制数据,并将其转化...
Servlet生成二维码图片后,将其设置为PNG格式并返回给客户端。 此外,`jsp页面`通常用于创建用户界面,允许用户输入要生成二维码的内容,然后通过表单提交请求到Servlet。例如,你可以创建一个简单的HTML表单,其中...
本文将深入探讨`JSP(JavaServer Pages)、Servlet、JavaBean`以及`Ajax`如何在MVC架构下实现数据的增删改查与分页显示,并涉及`SmartUpload`组件用于文件和图片的上传。 首先,`MVC`模式是一种软件设计模式,它将...
在Web开发中,JavaServer Pages (JSP) 和 Servlet 是两种重要的技术,它们常常一起使用来构建动态、交互式的网页应用。JSP 主要负责展示视图层面,而Servlet则处理业务逻辑和控制流程。本示例将详细介绍如何在...
3. **处理业务逻辑**:Servlet可能需要从数据库中读取或更新博客文章、用户信息等数据,这可能涉及到SQL查询和数据操作。 4. **转发到JSP**:Servlet处理完业务逻辑后,通常会使用`RequestDispatcher`的`forward()`...