JavaWeb基础知识day17——注解&Servlet3.0实现文件上传

注解

注解:
jdk5之后提供了一个特性,和类 接口同级
格式:
    @interface 注解名{}
作用:
    编译期检查
    替代配置文件
    定义注解(元注解:注解上的注解)
    分析代码(用到反射)
////////////////////////
java中3个注解(理解)
    @Override:声明该方法是从父类上继承过来的,执行编译期的检查
    @SuppressWarnings:抑制警告 值有好多,只需要知道一个 all  抑制所有的警告
    @Deprecated:声明 该方法不赞成使用
////////////////////////
注解的本质是一个接口,通过jdk自带的javap命令反编译class字节码文件得出【javap xxx.class】。

枚举的本质是一个被阉割的类,通过jdk自带的javap命令反编译class字节码文件得出【javap xxx.class】。该枚举定义的常量是本身对象,且构造私有化,用public static final 修饰对外提供访问。
////////////////////////
自定义注解(理解)
    注解属性:
        注解本质就是一个接口,接口中可以有常量和抽象方法
        抽象方法在注解中就称之为注解属性
    注解属性类型:
        基本类型
        String
        Class
        Annotation
        Enum:枚举
        以上类型对应的一维数组
    注意:
        一旦注解有属性了,使用注解的时候必须赋值,(除非这个注解属性有默认值)
    
    赋值的格式:
        @注解名(属性名=属性值)
        若注解类型为数组,且只有一个值的时候,可以有两种写法
            方式1:
                属性名 = { 值 }
            方式2:
                属性名=属性值
        若属性名为value的时候,且只需要为这个value属性赋值的时候,value可以省略    
    元注解:(理解)
        定义在注解上的注解
            @Retention  规定注解保留到什么阶段  值为RetentionPolicy的三个枚举值
                SOURCE:只在代码中保留,在字节码文件中就删除了
                CLASS:在代码和字节码文件中保留
                RUNTIME:所有阶段都保留
                例如://注解在运行时保留
                @Retention(RetentionPolicy.RUNTIME)

            @Target 规定注解作用在什么上面     值为ElementType的枚举值
                TYPE:作用在类 接口 等上面
                METHOD:作用方法上面
                FIELD:作用字段上面
            例如://注解只能作用在方法上
            @Target(ElementType.METHOD)

JavaWeb基础知识day17——注解&Servlet3.0实现文件上传

JavaWeb基础知识day17——注解&Servlet3.0实现文件上传



Servlet3.0文件上传

servlet3.0
    3.0支持注解开发,没有web.xml这个文件了
    内嵌了文件上传功能
    /////////////////////////
    例如:
    创建servlet
        在类上面添加 @WebServlet(urlPatterns={ "/demo2", "/demo21" },loadOnStartup=2)
    创建listener
        在类上添加 @WebListener
    创建filter
        在类上添加 @WebFilter(urlPatterns="/*")
    /////////////////////
文件上传
    浏览器端的要求:
        表单的提交方法必须是post
        必须有一个文件上传组件  <input type="file" name=""/>
        必须设置表单的enctype=multipart/form-data
    服务器端的要求:
        servlet3.0中
            需要在servlet中添加注解
                @MultipartConfig
            接受普通上传组件 (除了文件上传组件):request.getParameter(name属性的值)
            接受文件上传组件 Part part=request.getPart(name属性的值);
                getName():获取的name的属性值
            获取文件名:
                 String s = part.getHeader("Content-Disposition"):获取头信息 然后截取
                 String filename=s.substring(s.indexOf("filename=")+10,s.length()-1);
            //获取文件流
                part.getInputStream();                    
            //删除临时文件
                part.delete()
//////////
上传注意的问题:
    名字重复 随机名称
        在数据库中提供两个字段,
            一个字段用来存放文件的真实名称  1.jpg
            另一个字段用来存放文件存放路径  g:/sdfasdf.jpg
        随机名称:
            uuid
            时间戳
    文件安全
        重要的文件存放在 web-inf 或者 meta-inf 或者 服务器创建一个路径
        不是很重要的文件 项目下
        
    文件存放目录
        方式1:日期
        方式2:用户
        方式3:文件个数
        方式4:随机目录
            mkdirs

上一篇:python-day17


下一篇:品优购项目笔记 day17