`

在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生成验证码图片

    使用Servlet生成验证码图片。 一个生成验证码图片的工具类。

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

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

    Servlet与JSP核心编程第2版

    7.5 使用servlet生成jpeg图像 第8章 cookie管理 8.1 cookie的优点 8.2 cookie存在的一些问题 8.3 cookie的删除 8.4 cookie的发送和接收 8.5 使用cookie检测初访者 8.6 使用cookie属性 8.7 区分会话...

    JSP调用Java Bean在网页上动态生成柱状图

    -----------------------------------------------------我们经常要在网页看到一些动态更新的图片,最常见的莫过于股票的K线图,本文试图通过一个简单的实例,向大家展示如何通过JSP 调用Java Bean在网页上动态生成柱状...

    servlet+jsp实现验证码demo

    servlet+jsp实现验证码 具体步骤: 生成图片所要实现的类 1、定义BufferedImage对象 2、获得Graphics对象 3、使用Random生成随机验证码信息 4、使用Graphics绘制图片 5、记录验证信息到session 6、使用ImageIO生成...

    JSP+Servlet+Javabean+Mysql学生成绩管理系统

    本系统以MVC架构搭建,采用JSP+Servlet+Javabean+Mysql技术实现,软件界面美观友好,并且本资源包含有.sql脚本,可直接导入数据库生成系统所需要的表,无需做更改,即可使用。

    JSP实用技巧集合,jsp编程的一些小技巧总结

    73. JSP中显示图片的方法之一? 74. int转为Integer的方法? 75. 请求jsp页面禁止缓存方法? 76. select选中其中的值自动到一个文本框? 77. JSP连接数据库? 78. JSP两级下拉列表框联动(数据库)? 79. JSP字符编码问题...

    音乐网站(JSP+SERVLET).zip

    在音乐网站中,JSP页面用于展示音乐列表、播放器界面、用户个人信息等。通过JSP标签和表达式,网站能够动态地展示音乐数据,如歌曲名称、歌手信息、专辑封面等,并根据用户的操作实时更新页面内容。 Servlet作为...

    jsp servlet 入门学习资料-新手一看就懂

    9.4.2 直接在JSP文件中定位tld文件 9.5 扩展标签实例 9.5.1 得到父标签的数据 9.5.2 TestTag类 9.5.3 Title类 9.5.4 Data类 9.5.5 TLD文件 9.5.6 在JSP中使用扩展标签 第10章 Enterprise JavaBeans 10.1 ...

    教务管理系统(jsp+servlet+mysql).zip

    当用户通过前端页面发起请求时,Servlet会接收请求,并与MySQL数据库进行交互,获取或更新相应的数据,然后返回处理结果给前端页面。 MySQL作为关系型数据库管理系统,为教务管理系统提供了稳定可靠的数据存储和查询...

    文件管理系统(jsp+servlet+mysql)

    读取文本(TXT或Word文档),然后将文本内容读取出来存入到MySQL数据库中,当需要下载是,系统会从数据库中读取字符串内容然后生成下载到本地,实现的功能有:登陆,注册,管理员管理用户界面(冻结,解冻,注销),...

    jsp编程技巧集锦

    JSP中显示图片的方法之一? 74. int转为Integer的方法? 75. 请求jsp页面禁止缓存方法? 76. select选中其中的值自动到一个文本框? 77. JSP连接数据库? 78. JSP两级下拉列表框联动(数据库)? 79. ...

    JavaServer Pages (JSP)

    JavaServer Pages (JSP) 技术提供了一种简单快速的方法来创建显示动态生成内容的 Web 页面。由业界处于领先地位的 Sun 公司制定了相关的 JSP 技术规范,该规范定义了如何在服务器和 JSP 页面间进行交互,还描述了...

    Jsp程序设计试题库

    application对象代表应用程序上下文,它允许JSP页面与包括在同一应用程序中的任何Web组件共享信息。 Out对象代表提供输出流的访问 Page对象代表JSP页面对应的Servlet类实例 Request对象提供对Http请求数据的访问,...

    网页教程《跟姐姐学JSP》

    14.3. 在jsp中定义类变量 14.4. jsp九大默认对象 15. 分页 15.1. 数据库分页 15.2. 使用jstl改写分页 16. Never End... 16.1. 对session何时生成的无用讨论 16.2. 对手工将jsp转换为servlet的无用讨论 16.3. ...

    JSP实例编程100例

    89、在JSP中获取当前绝对路径 90、读取表单中所有参数 91、分行写入数据 92、显示请求URL 93、判断session是否过期 94、参数式查询数据库 95、取得数据库中各栏名称 96、使用JavaBean、设置和获取Bean的属性 97、...

    J2EE经典案例设计与实现

    案例8:JSP调用JavaBean在网页上动态生成柱状图 案例9:实现图片上传 案例10:JSP页面调用Applet实现人民币大小写转换 本章小结 第4章 Servlet高级编程设计与实现 案例1:Servlet中的多国语言显示 案例2:JSP调用...

    采用ajax实现的图片验证码

    2、在产生背景之后,编写如下代码,产生四个字符(并且,把生成字符,保存在session中,在登录的时候用来做判断) String code=""; //用于保存生成的四个字符 for(int i=0;i;i++){ //生成一个随机数,它的...

Global site tag (gtag.js) - Google Analytics