A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2018-6-16 17:25  /  1708 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

何平波
基础加强1
@Test注解
概述:注解和注释的区别
注释:了解代码的编写思路,让程序员看得懂
注解:让虚拟机解析,让虚拟机看程序中的注解,注解代表程序的一些特殊功能.
注解(annotation)分类:
1.@Overide(重写)
2.@SuppressWarning(消除压制安全警告)
@SuppressWarning("all")消除压制全部安全警告
3.@Deprecated:描述方法过时的
定义注解的格式
@interface
自定义注解
注解中的属性需要加括号  例如 int a();
在需要重写的方法定义值
注解的属性类型:基本数据类型,String类型,Class类型,注解类型,枚举类型
默认的自定义注解只会存在源码阶段,在生成class及运行阶段就不存在了
默认的自定义注解只会存在源码阶段,需要让注解的存在时间更长,就需要用到元注解.
@Retention(value=RetentionPolicy.RUNTIME)
让自定义的注解的存在时间更长

使用Servlet3.0完成文件的上传
文件上传
将本地的文件写到服务器上(Servlet3.0)  
注解开发,文件上传,异步请求
文件上传的3要素:
1.表单的提交方式必须是post
2.表单中需主要上传的表单元素,这个元素必须有name属性和值<imput type="xxx",name="xxx">
3.表单enctype属性的值必须是multipart/form-data

Servlet3.0的注解开发  
WebServlet
WebListener
WebFilter
注意:使用servlet3.0不用创建web.xml
WebServlet("servlet的路径")
文件上传原理分析】
没有设置enctype属性的时候:只能获得文件的名称,而没有文件内容.
设置enctype属性为multipart/form-data:获得到文件名及文件内容.
Servlet3.0与Servlet2.5的区别
提供了3个新特性
注解开发:
文件上传:有些api不是特全
异步请求:

Servlet的文件上传需要加@MultipartConfing,不然接收的文件数据为null

上传的文件要去tomcat下的webapps项目工程下去找

随机文件名的总结
public static String getUUID(String filename) {
  //randomUUID()随机生成一个随机码,转换成字符串类型,replace        
//随机码原来的格式为xxxx-xxxx-xxxx-xxxx   replace方法替换-为空
                return UUID.randomUUID().toString().replace("-", "");
        }

0xf  16进制  0123456789abcdef   ==  x=a=10;f=15;0=10
       
//接收普通数据的方法是没有 enctype="multipart/form-data" //解码
request.setCharacterEncoding("UTF-8"); //接收文件描述 String
String filedepict = request.getParameter("filedepict");
System.out.println("文件描述"+filedepict);
                 
                //接收文件
                request.setCharacterEncoding("UTF-8");
                Part part = request.getPart("fileUpload");
                long size = part.getSize();
                System.out.println("文件的大小是"+size);
                //获取文件名
                //先获取响应头
                String headers = part.getHeader("Content-Disposition");
                //获取响应头最后的位置filename=\"
                int lastIndexOf = headers.lastIndexOf("filename=\"");
                //截取filename=\"之后的10个参数,到倒数第二个,因为最后一个是一个",不做截取
                String filename = headers.substring(lastIndexOf+10, headers.length()-1);
               
                //获得文件内容
                //用Part获取字节输入流
                InputStream is = part.getInputStream();
                //获取想写入的路径
                String realPath = request.getServletContext().getRealPath("/upload");
                //写入  利用字节输出流     realPath是全局的一个字符串路径/filename是字符串文件名
                //获取随机文件名
                String uuid = UuidUtils.getUUID(filename);
                request.setCharacterEncoding("UTF-8");
                FileOutputStream os = new FileOutputStream(realPath+"/"+uuid);
                byte[] byt=new byte[1024];
                int len=0;
                //字节输出流需要读取字节数组,不然读取不到上传文件的内容
                while((len=is.read(byt))!=-1){
                        os.write(byt, 0, len);
                }
                //关流
                os.close();
                is.close();
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().print("文件上传成功");
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马