<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Javadream

    A long way and a dream.

    關于文件上傳的問題:
    Java Servlet沒有從根本上支持網絡文件上傳,這是一個極不好的也極不爽的事情.
    從而就延生了commonsUpload和cos這些東東類庫,呵.....還算好,也好用,不過沒仔細去研究他們的實現代碼,用起來總是心大心小的.

    也正因為這樣多的第三方類庫,大家的接口都不同,從而也就出現了讓Service層無所適從的感覺.因為不論是從Struts還是從WebWork或者從最簡單的cos這些類庫得到的接口都是一種具體實現,沒有統一的接口,如果Service層與某一種具體實現相關聯,則必然與這種具體實現的框架或者類庫硬編碼綁定,以后就不好用其它類庫了,這是不好的設計,真的,一點靈活度都沒有.

    能不能這樣呢?在Service定義一個UploadFile接口,所有Service層接受的只是UploadFile的實現類的實例,從而統一了所有Service的調用,而且也使Service可以在各種MVC或者第三方類庫中遷移.

    這里用到了一個設計模式:適配器模式.

    代碼如下:

    package org.springstudy.ch03;

    import
    java.io.InputStream;
    import
    java.io.File;

    public interface
    UploadFile?{
    ????
    public byte
    []?getBytes();
    ????
    public
    String?getContentType();
    ????
    public
    InputStream?getInputStream();
    ????
    public
    String?getName();
    ????
    public
    String?getOriginalFilename();
    ????
    public?long
    getSize();
    ????
    public?boolean
    isEmpty();
    ????
    public?void
    transferTo(File?dest);
    }



    比如這里有一個具體實現:

    package ?org.springstudy.ch03.uploadimpl;

    import
    ?java.io.InputStream;
    import
    ?java.io.File;

    import
    ?org.springframework.web.multipart.MultipartFile;
    import
    ?org.springstudy.ch03.UploadFile;

    public?classUploadFileSpringImpl?implements
    ?UploadFile?{
    ????
    private
    MultipartFile?multipartFile;
    ????
    ????
    public
    UploadFileSpringImpl(MultipartFile?multipartFile)?{
    ????????
    this .multipartFile =
    ?multipartFile;
    ????}
    ????
    ????
    public?byte
    []?getBytes()?{
    ????????
    return?this
    .multipartFile.getBytes();
    ????}
    ????
    ????
    public
    String?getContentType()?{
    ????????
    return?this
    .multipartFile.getContentType();
    ????}
    ????
    ????
    public
    InputStream?getInputStream()?{
    ????????
    return?this
    .multipartFile.getInputStream();
    ????}
    ????
    ????
    public
    String?getName()?{
    ????????
    return?this
    .multipartFile.getName();
    ????}
    ????
    ????
    public
    String?getOriginalFilename()?{
    ????????
    return?this
    .multipartFile.getOriginalFilename();
    ????}
    ????
    ????
    public?long
    getSize()?{
    ????????
    return?this
    .multipartFile.getSize();
    ????}
    ????
    ????
    public?boolean
    isEmpty()?{
    ????????
    return?this
    .multipartFile.isEmpty();
    ????}
    ????
    ????
    public?void
    transferTo(File?dest)?{
    ????????
    this
    .multipartFile.transferTo(dest);
    ????}
    }



    你也可以寫commonsupload或者cos的實現,Service接受的參數是UploadFile接口的,所以你必須實現UploadFile接口才能使用Service層的功能.

    (后話:看來學習設計模式還是很有用處的)

    主站蜘蛛池模板: 久久狠狠高潮亚洲精品| 国产精品国产午夜免费福利看| 亚洲第一黄片大全| 最新亚洲人成无码网www电影| 搡女人免费视频大全| 亚洲欧洲另类春色校园网站| 91香蕉视频免费| 亚洲色大成WWW亚洲女子| 国产极品粉嫩泬免费观看| 亚洲高清一区二区三区电影 | 麻豆69堂免费视频| 亚洲成av人片一区二区三区| 一级日本高清视频免费观看| 国产亚洲视频在线播放| 黄色网站软件app在线观看免费 | 亚洲乱码卡一卡二卡三| 无码中文在线二区免费| 亚洲精品色在线网站| 亚洲AV日韩精品一区二区三区| 九九久久精品国产免费看小说| 亚洲av色福利天堂| 亚色九九九全国免费视频| www亚洲精品久久久乳| 2048亚洲精品国产| 国产免费丝袜调教视频| 亚洲av片在线观看| 亚洲精品夜夜夜妓女网| 69成人免费视频| eeuss免费天堂影院| 亚洲天堂一区二区三区四区| 国产老女人精品免费视频| 久久久久久国产a免费观看不卡| 亚洲精品视频免费看| 日本黄页网站免费| 中国毛片免费观看| 亚洲人xxx日本人18| 亚洲真人无码永久在线| 国产一卡二卡3卡四卡免费| 人人鲁免费播放视频人人香蕉| 亚洲综合图片小说区热久久| 成人国产mv免费视频|