JavaWeb开发知识总结(annotation,Servlet3.0,文件上传,动态代理)

JavaWeb开发知识总结(annotation,Servlet3.0,文件上传,动态代理)

1. annotation概述

annotation:注解,代表程序的一些特殊的功能,注解是由虚拟机进行处理的。

JDK中提供的常用的注解:

# @Override :描述子类重写父类的方法:
    * JDK1.5版本中,该注解只能应用在类的继承上.
    * JDK1.6版本中,该注解可以应用在类的实现上(实现接口).
# @SuppressWarnings :压制警告,参数是all是压制所有的警告.
# @Deprecated  :描述方法过时,标记方法过时.

自定义注解:使用@interface 关键声明

格式:public @interface 注解名称{ 内容 }

注解的属性定义:

# 注解定义时需加上`()`,如:
    @interface Anno {
   
    int a();
    boolean b() default false;
    }
# 定义属性时:可以使用default关键字声明属性的默认值
# 注解的属性的数据类型:
  1. 基本数据类型:primitive type
  2. String类型:String
  3. Class类型:Class
  4. 注解类型:annotation
  5. 枚举类型:enumeration
  6. 以上类型的一维数组:
# 特殊的属性名称:value
  * 如果使用注解的时候,只出现了value属性,value属性可以省略,但当出现多个属性时,value属性名不能省略

注解的存在阶段:

# Java类的状态:源代码阶段-->Class阶段-->运行阶段
 源代码阶段            Class阶段             运行阶段
.java源文件 --编译-->   .class   --加载-->   JVM中运行

# 自定义的注解只存在与源代码阶段,编译后就不存在了,可以通过JDK提供的元注解来增大自定义注解的存在阶段:
1. 源代码阶段:@Retention(value = RetentionPolicy.SOURCE)
2. Class阶段:@Retention(value = RetentionPolicy.CLASS)
3. 运行阶段:@Retention(value = RetentionPolicy.RUNTIME)

案例:自定义注解完成简单的注解单元测试的功能

package com.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
 * 自定义注解  MyTest.java
 */
@Retention(value=RetentionPolicy.RUNTIME) // 设置自定义注解运行阶段
public @interface MyTest {
   

}
/**
  * 运行的核心类  CoreRunner.java
  * 和单元测试的原理相同,均需要一个程序运行的主方法
  * 获取要进行单元测试的类的Class对象,通过反射获取该类的所有的方法
  * 遍历所有的方法,如果方法上有注解,则通过反射执行该方法即可
  */
public class CoreRunner {
   
    public static void main(String[] args) throws Exception {
        /**
         * 获得测试类的Class.
         * 获得Class中的所有的方法.
         * 遍历每个方法,查看每个方法上是否有MyTest注解.
         * 有MyTest注解,这个方法就执行.
         */
        // 1.获得测试类的Class:
        Class clazz = AnnotationDemo1.class;
        // 2.获得Class中的所有的方法:规定了测试的方法必须是public
        Method[] methods = clazz.getMethods();
        // 3.遍历每个方法:
        for(Method method:methods){
            // 获取当前的方法是否含有MyTest注解
            boolean flag = method.isAnnotationPresent(MyTest.class);
            if(flag){
                // 说明方法上有MyTest注解,执行方法
                method.invoke(clazz.newInstance(), null);
            }
        }
    }
}

2. Servlet 3.0

Servlet3.0和Servlet2.5的区别:

# Servlet3.0和Servlet2.5相比提供了三个特性:
1. 注解开发:可以取代web.xml的配置文件
    * @WebServlet:Servlet的注解
    * @WebListener:监听器的注解
    * @WebFilter:过滤的注解
2. 文件上传:没有提供获取上传的文件名等相关的API
3. 异步请求:本质是开启新的线程进行处理请求

注解开发的原理:

// Servlet2.5中web.xml配置文件配置Servlet
<servlet>
  <servlet-name>servlet名称</servlet-name>
  <servlet-class>servlet的完全限定名</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>servlet名称</servlet-name>
  <url-pattern>servlet的访问路径</url-pattern>
</servlet-mapping>
// Servlet3.0中使用注解
@WebServlet(urlPatterns="Ser
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值