学习心得--反射、注解、servlet

本周学习了反射、静态代理、Proxy动态代理;注解、自定义注解以及元注解;response对象与request对象,以及操作请求头、响应头,请求行、响应行,响应正文及请求参数。

反射

类加载

  • 加载:就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。
  • 加载时机:
  • 创建类对象的实例
  • 访问类的静态变量,或者为静态变量赋值
  • 调用类的静态方法
  • 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
  • 初始化某个类的子类
  • 直接使用java.exe命令来运行某个主类

类加载器

  • 概念:负责将.class文件加载到内存中,并为之生成对应的Class对象。
  • 类加载器的分类
  • Bootstrap ClassLoader:根类加载器
  • Extension ClassLoader:扩展类加载器
  • Sysetm ClassLoader:系统类加载器

类反射机制

  • JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法
  • 对于任意一个对象,都能够调用它的任意一个方法和属性
  • 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
  • 三种方式:
  • Class.forName(“全类名”)
  • 类名.class
  • 对象名.getClass()

反射操作

  • 反射操作构造器
  • 反射操作成员变量
  • 反射操作成员方法
  • 反射越过泛型(setAccessible(true))

静态代理设计模式

  • 自定义类实现和被代理类相同的接口
  • 在代理类中声明被代理类的对象
  • 在代理类的方法中使用被代理类调用方法

装饰者设计模式

  • 定义装饰类(增强类)实现和被装饰类(被增强类)相同的接口
  • 在装饰类中声明被装饰类的引用
  • 在装饰类的方法中,使用被装饰调用原方法

Proxy动态代理

  • 动态代理:在程序运行过程中产生的这个代理对象,而程序运行过程中产生对象其实就是我们刚才反射讲解的内容,所以,动态代理其实就是通过反射来生成一个代理
  • 原理:在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口就可以生成动态代理对象。JDK提供的代理只能针对接口做代理。我们有更 强大的代理cglib,Proxy类中的方法创建动态代理类对象
  • 方式一:定义类实现InvocationHandler接口
  • 方式二:使用InvocationHandler接口的匿名内部类对象

连接池

自定义连接池

  • 初始化时,创建一些连接对象,并存储到LinkedList集合中
  • 从连接池中取出连接
  • 把连接归还连接池

注解

内置注解

  • @Override
  • @Deprecated
  • @SuppressWarings

注解分类

  • 标记注解:没有参数的注解
  • 单值注解:只有一个参数的注解
  • 完整注解:注解中有多个属性

自定义注解

  • public @interface 注解名 {
    数据类型 属性名1() default 默认值1;
    数据类型 属性名2();
    }
  • 可以使用注解替代jdbc.properties配置文件

元注解

  • 用于负责描述其他注解的注解
  • 作用在自定义注解上,规定自定义注解的作用区域、存活策略
  • @Target:规定自定义注解的作用区域
  • @Retention:规定自定义注解的存活策略

request与response对象

response对象

  • response对象处理响应信息(响应行、响应头、响应正文)
  • response对象操作响应行、响应头
  • setStatus:操作正常响应状态码,比如:200、302
  • sendError:操作错误响应状态码,比如: 404
  • setHeader:直接覆盖响应头原有值
  • addHeader:在响应头原有值的后面追加
  • response操作重定向
  • 重定向的流程:
  • 当浏览器访问一个资源Demo03Servlet,访问名称为“/demo03”
  • Demo03Servlet进行重定向
  • 浏览器进行一个新的请求,完成重定向
  • response操作定时跳转:一个资源定时一段时间之后,跳转到另外一个资源
  • 操作响应头refresh
  • responce操作响应正文:浏览器显示的主体内容
  • response.getWriter().write():操作响应正文
  • setCharacterEncoding(“utf-8”)
  • setHeader(“Content-Type”,“text/html;charset=utf-8”)
  • setContentType(“text/html;charset=utf-8”)

request对象

  • request操作请求行:
  • getRequestURI:获取请求路径
  • getMethod:获取请求方式
  • getRemoteAddr:获取请求ip
  • getLocalPort:获取请求端口
  • getQueryString:请求网址"?"后面的路径
  • request操作请求头:
  • getHeader():获取指定请求头的值
  • request操作请求参数:
  • getParameter:获取指定请求参数值
  • getParameterNames:获取所有请求参数名称
  • getParameterValues(String parameterName):获取指定请求参数所有值
  • getParameterMap

request操作请求转发

  • 服务器中,从一个资源跳转到另外一个资源
  • 流程:
  • 浏览器发起请求,请求Demo01Servlet
  • Demo01Servlet,请求转发到Demo02Servlet
  • 在服务器内部,直接从Demo01Servlet跳转到了Demo02Servlet
  • 转发只有一次请求

请求转发与重定向的区别

  • 请求次数
  • 跳转区别
  • 路径区别

request域对象

  • 可以存储数据的对象
  • request对象的生命周期:发起请求时,request初始化;响应时,request销毁
  • request域对象的作用范围在一次请求中
  • request在重定向和转发中使用:
  • 重定向中不能使用request域对象
  • 转发中可以使用request域对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值