纯servlet的上传和Json数据处理

国庆整理的一些servlet中的使用点:
这一篇是  上传  和  Json数据处理 ;

文件上传及工具
  • Apache commons-fileupload     (jar包:commons-fileuplod。jar 包 与commons-io包一起使用)
  • cos文件上传
这里使用的是Apache commons-fileuplod来完成;
这个是纯servlet的东东,其实以后使用框架什么的东东的话是 不会使用这复杂的东东的  用可以直接使用的方法(封装好的)

客户端:
   
   
   
   
    <input type="file" name="image"/>
这个是必须要有的,表单域中的文件表单;( 表单提交必须是post)(并指定数据类型enctype="multipart/form-data")

服务端:(servlet )
由于提交的数据不是正常表单 的数据 是使用数据流上传的,所以//request.getParameter("");是无法使用的;
需要用到的是:
   
   
   
   
    ServletFileUpload fileUpload =new ServletFileUpload(fileItemFactory);
    //这个方法是在 commons-fileupload.jar 包里的处理上传文件的 类;参数为一个文件缓存类对象;
实例代码及注释介绍说明:
   
   
   
   
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        //创建ServletFileUpload 所需接口的 实现类 对象
    DiskFileItemFactory fileItemFactory =new DiskFileItemFactory();
         //设置文件上传的缓存
    fileItemFactory.setSizeThreshold(1024*10);
         //★☆这个ServletFileUpload是用来处理文件上传数据的类☆★
    ServletFileUpload fileUpload =new ServletFileUpload(fileItemFactory);
    try {
         // ☆★☆解析请求中的字节数据包☆★☆
    List<FileItem> items = fileUpload.parseRequest(request);
    // 遍历得到的数据包列表,
    for (Iterator i = items.iterator(); i.hasNext();) {
    FileItem item = (FileItem) i.next();
    if(item.isFormField()){ //是否是普通表单域
    //普通表单的处理 ,使用对应name属性来选择
    if(item.getFieldName().equals("name")){
    String value =item.getString();
    System.out.println(value +" 文本框");
    }else{
    System.out.println(item.getString()+" 下拉选择框");
    }
    }else{ //文件域<input type="file">
         //查找 返回 image目录的绝对路径
    String folder =getServletContext().getRealPath("image");
         //使用系统时间作为文件的名字,后缀还用原始文件的后缀
    String sourceFileName =item.getName(); //原始的文件名
         //文件名中提取出 文件的后缀名
    String type =sourceFileName.substring(sourceFileName.lastIndexOf("."));
         //组合成对应 要存储的 绝对路径 path
    String path =folder+File.separatorChar+System.currentTimeMillis()+type;
    FileOutputStream out =new FileOutputStream(path); //文件输出流
    //☆★☆commons-io 包的方法; 用来复制 输入流数据 到 输出流中 ☆★☆
    //item.getInputStream() 这个方法是 提取 数据元素 作为 输入流 (文件上传使用的是这个)
    IOUtils.copy(item.getInputStream(), out);
    out.flush();
    out.close();
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
   
   
   
   
//改变上传时候的编码,避免中文乱码
fileUpload.setHeaderEncoding("UTF-8");//上传文件的时候更改编码
String value =item.getString("UTF-8");


Json数据处理:(需要jar包gson-1.6)
服务端:
   
   
   
   
        //给客户端响应数据为json格式的字符串
//[{id:1,name:"相册1",createDate:""},{id:2,name:"相册2"}]
//把对象或者对象的集合直接转换成json格式的字符串。用到工具:gson。
Gson g =new Gson();
String json =g.toJson(datas);
客户端:
   
   
   
   
$(document).ready(function(){
//发送请求到服务器,查询所有的相册数据,根据相册数据局部刷新select元素
//发送ajax请求,
//获得响应数据 (普通json格式数据),不是option
//通过js代码把普通数据变成多个option。
$.getJSON("getAlbum","date="+new Date(),function (data){//data是服务端响应的json格式的数据 (下面是两种迭代方式)
// 使用jQuery的方法来处理json数据,感觉还是挺方便的!
// $.each(data,function (i,a){ //i 表示迭代的下标,a,表示每次迭代之后的元素
// $("<option>").attr("value",a.id).append(a.name).appendTo($("select"));
// });
// 使用循环 来处理 !!
    for(var i=0;i<data.length;i++){
    $("<option>").attr("value",data[i].id).append(data[i].name).appendTo($("select"));
    // attr("属性",值) ; append(文本内容) ; appendto(标签:添加到那个标签里面) ;
    }
});
});

你可能感兴趣的:(Ajax,json,servlet,上传)