国庆整理的一些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("."));//组合成对应 要存储的 绝对路径 pathString 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(标签:添加到那个标签里面) ;}});});