这周继续学习Servlet内容,包括Servlet配置、ServletConfig对象、ServletContext对象,还学习了类加载和类反射,应用了静态代理设计模式、装饰者设计模式、Proxy动态代理,还学习了连接池,学习了注解,最后还有request与response对象。
- Servlet的生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。 - Servlet 通过调用 init () 方法进行初始化。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
- Servlet配置
自定义Servlet,第一步,声明该Servlet;第二步,给该Servlet配置访问路径。通过在web.xml中配置<servlet-mapping>和<url-parttern>实现 - 缺省Servlet
url-parttern的值为"/"就是缺省Servlet,作用是tomcat容器自带缺省Servlet、处理匹配不到的资源,返回404页面、处理静态资源,io流读写 - 路径问题
带协议的绝对路径:http://localhost:8080/day51/img/girl.jpg
不带协议的绝对路径:/day51/img/girl.jpg
相对路径:
当前目录:./ ,可以省略
上一级目录:…/
- ServletConfig对象
ServletConfig是由tomcat容器创建,通过init方法传入给Servlet,作用:获取Servlet的名称<servlet-name>标签内容、获取Servlet的初始化参数、获取域对象:ServletContext - ServletContext对象
相当于是整个应用程序对象,作用:ServletContext是一个域对象,可以用来存储数据getAttribute、setAttribute、removeAttribute,获取全局初始化参数,获取服务器真实磁盘路径
反射
- 类加载
在class文件加载到jvm中时,会对应创建一个Class对象;分为三个步骤:加载、连接、初始化
- 加载 * 将class文件加载到内存区域,对应生成一个Class对象
- 连接 * 验证:验证类的结构是否正确 * 准备:初始化静态成员 * 解析:将字节转换成jvm能够执行的引用(对象、变量、方法)
- 初始化 * 将对象中的成员变量初始化
- 类加载器
将class文件加载进内存,并生成对应的Class对象
- 根类加载器
- 加载java中的核心类,主要加载F:\ProgramFiles\Java\jdk1.8.0_202\jre\lib\rt.jar中的类
- 扩展类加载器
- 加载java中的扩展类,主要加载F:\ProgramFiles\Java\jdk1.8.0_202\jre\lib\ext所有jar包中的类
- 系统类加载器
- 加载开发人员编写的自定义类、以及一些第三方的jar包中类
- 类反射机制
通过类的Class对象,动态去调用类中的属性和方法
获取Class对象方式
- 全类名=包名.类名 Class.forName(“全类名”)
- 编译期 类名.class
- 运行时 对象名.getClass()
- 反射可以构造器、成员变量、成员方法、越过泛型检查
- 反射可以读取配置文件
- 设计模式
静态代理设计模式:增强被代理类的功能
装饰者设计模式:在不侵入被装饰类源码的前提下,增强某个功能
Proxy动态代理:基于接口的方法增强
- 连接池
自定义连接池基础版:初始化时,创建一些连接对象,并存储到LinkedList集合中
自定义连接池优化版:使用中间类ConnectionWrapper
自定义连接池的终极版:结合动态代理进行使用
注解
Servlet2.5,不支持注解开发而 Servlet3.0,支持注解开发。
Servlet支持注解开发,由注解配置来代替web.xml配置,在Servlet类上直接使用@WebServlet注解代替在web.xml中配置
- java内置注解
@Overirde:标记重写
@Deprecated:标记过时
@SuppressWarings:压制警告
- 自定义注解
public @interface 注解名 {
数据类型 属性名1() default 默认值1;
数据类型 属性名2() ;
}
- 元注解
@Target:规定自定义注解的作用区域
@Retention:规定自定义注解的存活策略
- 设计模式
反射、注解、设计模式初级版
定义一个UserDao接口
反射、注解、设计模式优化版
动态代理获取UserDao接口中的方法对象
request与response对象
- 当浏览器发起请求后,服务器会创建一个请求对象、一个响应对象,通过service方法传入给Serlvet
- 作用:
- request对象处理请求信息(请求行、请求头、请求正文)
- response对象处理响应信息(响应行、响应头、响应正文)
- response对象
(1)设置响应头信息
(2)发送状态码
(3)设置响应正文
(4)重定向
PrintWriter out = response.getWriter():获取字符流;
ServletOutputStreamout = response.getOutputStream():获取字节流;
- request对象
(1)封装了请求头数据;
(2)封装了请求正文数据,如果是GET请求,那么就没有正文;
(3)request是一个域对象,可以把它当成Map来添加获取数据;
(4)request提供了请求转发和请求包含功能。 - 请求转发与请求包含比较:
(1)如果在AServlet中请求转发到BServlet,那么在AServlet中就不允许再输出响应体,即不能再使用response.getWriter()和response.getOutputStream()向客户端输出,这一工作应该由BServlet来完成;如果是使用请求包含,那么没有这个限制;
(2)请求转发虽然不能输出响应体,但还是可以设置响应头的,例如:response.setContentType(”text/html;charset=utf-8”);
这周的内容确实多,需要记得知识点也非常多,我还需要多看视频复习,把没学好的重新学习。