JavaWeb17-HTML篇笔记(一)

1.1 上次课内容回顾:
Listener :

  • 监听器就是一个JavaBean用来监听其他Bean变化.
  • 事件源:被监听的对象.
  • 监听器:监听的对象.
  • 事件源与监听器的绑定:
  • 事件:事件源改变.通过事件对象获得事件源对象.
  • Servlet的监听器:
    • 事件源:三个域对象.ServletContext,HttpSession,ServletRequest
  • 三类:
    • 一类:监听三个域对象的创建和销毁的监听器.
    • 二类:监听三个域对象的属性变更监听器.
    • 三类:监听HttpSession中的JavaBean的状态的改变的监听器.
      Filter :
  • 过滤器就是对从客服端发送到服务器的请求进行过滤的.
  • FilterConfig:过滤器配置.
    • 获得初始化参数
    • 获得ServletContext
    • 获得过滤器的名称
      • FilterChain:过滤器链.
      • 生命周期:服务器启动的时候进行创建,服务器关闭的时候销毁.
      • 过滤器的配置:
    • <url-pattern>的配置
    • <servlet-name>的配置
    • <dispatcher>的配置:
      • REQUEST
      • FORWARD
      • INCLUDE
      • ERROR
        • 自动登录:
        • 网站乱码的解决:
          1.2 案例一:使用自定义注解完成@Test注解功能类似的效果:1.2.1 需求
          使用Junit是单元测试的工具.在一个类中使用 @Test 对程序中的方法进行测试.
          自定义一个注解@MyTest 也将这个注解加在类的方法上. 使这个方法得到执行.
          1.2.2 分析:1.2.2.1 技术分析:
          Ø 【注解】
          程序中有 注释 和注解
        • 注释:给开发人员.
        • 注解:给计算机看的.
          注解使用:学习框架支持注解开发.
          Ø 【JDK提供的注解】
          @Override :描述方法的重写.
          @SuppressWarnings :压制警告.
          @Deprecated :标记过时.
          Ø 自定义注解:br/>定义一个类:class
          定义一个借口:interface
          定义一个枚举:enum
          定义一个注解:@interface
          【自定义注解案例】
          @interface MyAnno1{

}
带有属性的注解:
@interface MyAnno2{
int a() default 1;
String b();
// 注解属性的类型:基本数据类型,字符串类型String,Class,注解类型,枚举类型,以及以上类型的一维数组.
// Date d();
Class clazz();
MyAnno3 m3(); // 注解
Color c(); // 枚举
String[] arrs();

}
@MyAnno4("aaa") // 如果属性名称为value 那么使用的时候 value可以省略(只出现这一个value的属性情况下).
public class AnnotationDemo3 {
}
@interface MyAnno4{
String value();
int a() default 1;
}
1.2.2.2 步骤分析:
定义一个测试类
public class AnnotationDemo3 {
br/>@MyTest
public void demo1(){
System.out.println("demo1执行了...");
}

    @MyTest
    public void demo2(){
            System.out.println("demo2执行了...");
    }

    public void demo3(){
            System.out.println("demo3执行了...");
    }

}br/>定义核心运行类:
在核心运行类中有一个主函数:
获得测试类中的所有的方法.
获得每个方法,查看方法上是否有@MyTest注解.
如果有这个注解,让这个方法执行.
1.2.3 代码实现:
通过元注解定义注解存在的阶段.

  • 元注解也是一个注解:修饰注解的 注解.
    自定义一个注解:
    核心运行类:
    public class CoreRunner {
    public static void main(String[] args) {
    // 反射:获得类的字节码对象.Class
    Class clazz = AnnotationDemo3.class;
    // 获得测试类中的所有的方法:
    Method[] methods = clazz.getMethods();
    // 遍历数组:
    for (Method method : methods) {
    // System.out.println(method.getName());
    // 判断方法上是否有@MyTest注解:
    boolean flag = method.isAnnotationPresent(MyTest.class);
    // System.out.println(method.getName()+" "+flag);
    if(flag){
    // 让这个方法执行:
    try {
    method.invoke(clazz.newInstance(), null);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
    1.2.4 总结:
    使用注解完成JDBC工具类的编写:(了解)
    public class JDBCUtils {
    private static String driverClass;
    private static String url;
    private static String username;
    private static String password;

    @JDBCInfo
    public static Connection getConnection() throws Exception{
            // 反射:
            Class clazz = JDBCUtils.class;
    
            Method method = clazz.getMethod("getConnection", null);
    
            // 获得方法上的注解:
            JDBCInfo jdbcInfo = method.getAnnotation(JDBCInfo.class);
            driverClass = jdbcInfo.driverClass();
            url = jdbcInfo.url();
            username = jdbcInfo.username();
            password = jdbcInfo.password();
    
            Class.forName(driverClass);
            Connection conn = DriverManager.getConnection(url, username, password);
    
            return conn;
    }

    }

猜你喜欢

转载自blog.51cto.com/13517854/2124960