`

在JSP中显示servlet中生成的或读取的图片

阅读更多

好久没有动过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代码生成图片的情况.

 

最后附上代码:

分享到:
评论
2 楼 dsmagickey 2014-05-23  
学习,感谢。
1 楼 motrsky 2012-07-22  
   大哥,你解决了困扰我很久的问题,谢谢!
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JSP中利用Servlet生成验证码图片

    ### JSP中利用Servlet生成验证码图片 在Web应用开发中,验证码被广泛应用于用户登录、表单提交等场景,以防止自动化的恶意攻击。本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个...

    java jsp+servlet根据数据生成饼状图.rar

    7. **JSP显示图像**:在JSP页面中,可以通过标签引用由Servlet生成的图像。如果Servlet返回的是图像的URL,那么标签的src属性应指向该URL;如果Servlet直接将图像数据写入响应,JSP可以通过data URI scheme显示图像...

    jsp+servlet实现图片上传

    在本文中,我们将深入探讨如何使用Java的JSP(JavaServer Pages)和Servlet技术来实现一个图片上传功能。这是一个常见的Web开发任务,特别是在构建交互性强、动态内容丰富的网站时。以下是一些关键知识点: 1. **...

    jsp+mysql+servlet动态tree生成简单Demo

    在实际项目中,JSP通常与Servlet配合使用,Servlet在后台处理业务逻辑,而JSP则负责显示结果。 其次,MySQL是一个流行的开源关系型数据库管理系统。在这个Demo中,MySQL存储了生成树所需的数据,例如节点信息、层级...

    jsp+servlet小项目(实现图片上传功能)

    在IT行业中,Web开发是一项重要的技能,而JSP(JavaServer Pages)和Servlet是Java Web开发中的关键组件,尤其在构建动态网站时。本项目"jsp+servlet小项目(实现图片上传功能)"旨在教授如何利用这两者创建一个简单...

    jsp+servlet项目

    Servlet接收到请求后,进行必要的数据处理,然后可能将结果存储在域对象中(如HttpSession或RequestScope),最后转发或重定向到JSP页面,由JSP负责渲染结果显示给用户。这种方式有利于实现MVC(Model-View-...

    Jsp+Servlet+Echarts实现动态数据可视化

    在JSP+Servlet的架构中,Servlet通常用于处理业务逻辑,如从数据库获取数据、计算或转换数据。例如,Servlet可以连接到数据库查询动态数据,然后以JSON格式返回给JSP页面,供ECharts使用。 ECharts是由百度开发的一...

    JSP+Servlet实现简易购物车功能

    - **购物车显示**:JSP页面从session中获取商品信息,展示购物车内容。 - **数量修改**:用户可以更改购物车中商品的数量,Servlet更新session中的数据。 - **总价计算**:Servlet遍历session中的所有商品,根据...

    一个简单的JSP+Servlet图片上传例子

    在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种常见的技术,它们用于构建动态网站。这个“一个简单的JSP+Servlet图片上传例子”是一个基础教程,旨在帮助初学者理解如何通过这两种技术实现用户界面与...

    Jsp_Servlet_中文API档

    主要围绕JSP与Servlet的基本概念、工作原理以及在Web应用开发中的作用等方面展开。 ### JSP与Servlet概述 #### JSP(JavaServer Pages) - **定义**:JSP是一种基于Java技术的服务器端网页开发技术,它允许在HTML...

    jsp+servlet实现通讯录

    在IT行业中,构建一个基于JSP(JavaServer Pages)和Servlet的通讯录系统是一个常见的实践项目,这有助于理解和掌握Web开发的基本概念和技术。本项目主要涉及以下知识点: 1. **JSP基础**:JSP是一种动态网页技术,...

    JspServlet官方中文教程

    例如,在电子商务网站中,商品列表和价格可能需要根据库存情况实时更新,这就需要使用动态页面技术,如Servlet或JSP来实现。 ### Servlet相对于传统CGI技术的优点 Servlet相比传统的CGI技术具有多方面的优势,包括...

    jsp servlet MVC Demo

    【JSP Servlet MVC 模式详解】 在Web开发领域,JSP(JavaServer Pages)、Servlet和MVC(Model-View-Controller)...在"jsp servlet MVC Demo"实践中,你可以深入学习如何将这些技术有效地整合到一个实际的Web应用中。

    jsp显示数据库图片

    在我们的例子中,JSP页面会显示从数据库获取的图片。 2. **Servlet**:Servlet是Java Web应用中的一个组件,负责处理HTTP请求和响应。在这里,我们将创建一个Servlet来从数据库中读取图片的二进制数据,并将其转化...

    用Servlet实现的二维码图片生成

    Servlet生成二维码图片后,将其设置为PNG格式并返回给客户端。 此外,`jsp页面`通常用于创建用户界面,允许用户输入要生成二维码的内容,然后通过表单提交请求到Servlet。例如,你可以创建一个简单的HTML表单,其中...

    jsp+servlet+javabean+ajax MVC模式,增删改查,数据分页显示

    本文将深入探讨`JSP(JavaServer Pages)、Servlet、JavaBean`以及`Ajax`如何在MVC架构下实现数据的增删改查与分页显示,并涉及`SmartUpload`组件用于文件和图片的上传。 首先,`MVC`模式是一种软件设计模式,它将...

    JSP的Servlet连接

    在Web开发中,JavaServer Pages (JSP) 和 Servlet 是两种重要的技术,它们常常一起使用来构建动态、交互式的网页应用。JSP 主要负责展示视图层面,而Servlet则处理业务逻辑和控制流程。本示例将详细介绍如何在...

    jsp/servlet blog

    3. **处理业务逻辑**:Servlet可能需要从数据库中读取或更新博客文章、用户信息等数据,这可能涉及到SQL查询和数据操作。 4. **转发到JSP**:Servlet处理完业务逻辑后,通常会使用`RequestDispatcher`的`forward()`...

Global site tag (gtag.js) - Google Analytics