王刘锁
2018-6-16-->基础加强
首先学习了注解>注解是程序的一种功能标签,让虚拟机看到这些注解指定程序具备了什么功能,在jdk
的版本1.6以后的可以用在实现接口的类中,在1.5版本只能用在类的继承,自定义注解需要用到关键字
@interface 注解名,自定义注解要注意他的属性类型只能有基本数据类型,String,Class,注解类型,枚
举类型和这些类型的一维数组,然后是使用Servlet3.0完成文件上传.完成这个案例必须的三个要素是,
上传页面的表单必须是post提交方式,因为post没有大小限制,而且表单必须有enctype属性值必须是
multipart/form-data,这样在请求体中文件信息和内容会以字符串形式存在才可以在后台获取到文件
内容,表单中必须有一个元素标签<input type="file" name="随便起">,瑕疵是它的api不完善,另外
servlet3.0的注解开发可以说是非常方便的,相比之前的配置文件开发很省力,不过维护就很难了,毕竟
代码越简单逻辑越复杂,.关于注解开发需要了解的有三个注解@WebServlet("/名字")-->Servlet的
web.xml中的url-pattern标签中的名字;@WebListener-->监听器,@WebFilter-->过滤器;接下来说一下
文件上传的案例:首先上传文件到后台,我们需要获取文件的文件名和内容.因为这些信息全部封装成了
字符串.,所以要先把这个字符串获取,用到方法Part part=request.getPart("上面随便起的名字")
这个part对象就是文件信息字符串封装的,然后获取到文件名所在的请求头,String
header=part.getHeader("Content-Disposition"),再截取header获取文件名,先获取要截取的开始位
置int i =header.lastIndexOf("filename=\(转义)"")再根据位置获取文件名String filename=
header.subString(i+10,header.length()-1)-->因为i是filename中f所在的位置因此要+10才能截取
到文件名,并且最后面还有一个引号不能要所以length-1;这里可以用随机的UUID来拼接一个唯一的文
件名,然后获取文件内容,用方法:InputStream is = part.getInputStream()-->获取的是一个流,流内
是文件内容,然后获取要存放的地址全路径String path= request.getServletContext
().getRealPath("/upload"),这里可以用算法来生成多级目录,用文件名的hashcode&0xf获取到一级目
录,然后移位再做同样运算获取次级目录,,用得到的路径创建一个file判断file是否已经存在,不存在
就创建,然后创建输出流写文件,FileOutputStream os = new FileOutPutStream(path
+"/"+filename);,下面就是正常的写文件了,
|