webserver
WebServer主类
与客户端交流的流程分成三步:1:解析请求2:处理请求3:发送响应
每个请求由三部分构成:请求行 消息头 消息正文
每个响应由三部分组成: 状态行,响应头,响应正文
反射
反射是java的动态机制,可以允许我们在程序[运行期间]再确定实例化,调用某个方法,操作某个属性。反射机制大大的提高了代码的灵活度,但是会有更高的系统开销和较慢的运行效率。 因此反射机制不能被过度的使用。
类对象 Class的实例
JVM在加载一个类的class文件时,就会同时创建一个Class的实例,使用该实例记录加载的
类的一切信息(类名,有哪些属性,哪些方法,哪些构造器等)。并且每个被JVM加载的类都有
且只有一个Class的实例与之对应。
反射的第一步就是获取要操作的类的类对象,以便程序在运行期间得知要操作的类的一切信息
然后对其进行响应的操作。
获取一个类的类对象的常见方式:
1:类名.class
例如:
Class cls = String.class;
Class cls = int.class;
注意:基本类型获取类对象只有这一种方式。
2:Class.forName(String className)
例如:
Class cls = Class.forName("java.lang.String");
这里传入的类名必须是类的完全限定名,即:包名.类名
3:还可以通过类加载器形式完成
java.lang.reflect.Method类,方法对象
该类的每一个实例用于表示某个类中定义的一个方法,通过它可以获取其表示的方法中的
相关信息(方法名,参数个数,参数类型,返回值类型等等,并且还可以调用这个方法)
使用反射机制实例化对象
使用有参构造器进行实例化
使用反射机制调用方法
调用有参方法
main方法上的参数String[] args的作用是
两个开发中常用的相对路径
注解
/**
* 注解
* 注解在开发中常被我们利用到反射机制中,辅助反射机制做更多灵活的操作
* 注解在如今JAVA流行的框架中被大量的应用,简化了以前繁琐的配置工作。
*
* 注解可以在:
* 类上,属性上,方法上,构造器上,以及参数上使用
* 可以通过java内置的注解@Target来说明当前注解可以被应用的位置,对应的值被定义在ElementType上
* 例如:
* @Target(ElementType.TYPE) 注解只能被用于类上
* @Target({ElementType.TYPE,ElementType.METHOD}) 注解只能被用于类上或方法上
* 当可以用于多个位置时,需要定义成数组的方式包含所有ElementType的值,即"{}"包含
*
*
* @Retention注解,用于标注当前注解的保留级别,有三个选项
* RetentionPolicy.SOURCE 注解仅保留在源代码中
* RetentionPolicy.CLASS 注解保留在字节码中,但是反射机制不能调用
* RetentionPolicy.RUNTIME 注解保留在字节码文件中,并且可以被反射机制所使用
* 当不指定@Retention时,默认的保留级别为CLASS,因此我们通常都需要明确指出保留级别为RUNTIME
*/