何平波
基础加强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("文件上传成功"); |