手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

J2EE搭建WAP站点时图片发布统一格式处理解决方案

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

Motivation:
在WML中,由于支持的浏览器不同,对于图片格式也有不同的限制。比如常见的M3Gate,目前主要支持的是BNG格式,有的浏览器支持的是JPG的格式。但是如果图片不是自己加工的,比如是通过网页采集工具采集过来的图片格式各不相同,这样就需要在发布的时候进行统一的格式处理。
在这里,由于个人一直从事的是J2EE的研发,所以在发布图片的时候都是采用Servlet来发布的图片,为了解决WAP中遇到的这个挑战,做了一些比较深入的研究。下面是整理后的解决方案(已经实现),来完成图片发布时统一图片格式。

Solutions:
在J2EE的Web应用中,常见的规范是Servlet规范,由于目前主流的应用服务器都支持Servlet2.3规范,所以本方案的基本就是Servlet2.3规范,利用Servlet2.3中的Filter特性来过滤图片内容,整合图片格式。下面是具体的解决方案(假设用来发布图片的Servlet是getImage):

  • 提供前置的Filter(ImagePreFilter)
    在getImage前面配置前置的Filter,在客户端访问图片的时候,拦截客户端的请求,生成一个新的ServletResponse对象传递给getImage。
  • 提供后置的Filter(ImagePostFilter)
    在getImage上面配置后置的Filter,拦截getImage的返回结果,同时根据getImage的返回结果,将图片转换成统一的格式返回给客户端。
  • 外部实现HttpServletResponse类(ImageHttpServletResponse)
    保存Web Container的HttpServletResponse以及getImage这个Servlet输出到response对象中的信息,如cookie,Header,ContentType等。
  • 外部实现OutputStream类(ImageOutputStream)
    在ImageHttpServletResponse类获取outputstream的时候,返回一个自己定义的ImageOutputStream,ImageOutputStream将getImage这个servlet中输出的所有二进制数据保存起来(可以使用Java.nio.ByteBuffer)

下面是整个体系的调用逻辑图:


下面介绍一些如何利用ImageIO对象来处理图片格式:

  • 从输入流中读取出一个BufferedImage对象:
    ByteArrayInputStream bin = new ByteArrayInputStream(outputstream.getBytes());
    BufferedImage src = ImageIO.read(bin);
  • 利用ImageIO.write方法,将图片转换成指定的格式并写入到指定的流中:
    ImageIO.write(bimage,"png",outs);

上一篇: 好的JAVA风格(英译)
下一篇: 开源Licenses简介

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!