1、Servlet类的分析
- ServletRequest、ServletResponse是两个接口。他们有俩孩子。HttpServletRequest 、HttpServletResponse,只有带有Http的类,里面才有Http请求消息,Http响应消息的相关方法。
- Filter中的方法的参数就是 ServletRequest、ServletResponse这两个接口,为了获取Http相关的消息,我们通常是对参数的类型进行强转。
2、Servlet的init方法
- Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
- 多个用户同时访问时,可能存在线程安全问题 。
- **解决:**尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值。
3、Servlet的service方法
- 提供服务:执行service方法,执行多次
- 每次访问Servlet时,service方法都会被调用一次。
4、Servlet的体系结构
- GenericServlet这个抽象类,它实现了Servlet接口,把接口中除了service()方法外的其他方法都做了空实现,,只有service();还是抽象方法。我们继承该抽象类后,只需要重写service();即可。
- 使用service()方法,我们就需要手动的判断请求的方法是什么类型,做对应的请求处理。
这样比较冗余,我们一般去继承HttpServlet这个抽象类。
- HttpServlet定义的基本原理:
- 它在service方法中自己做了判断请求的方式,根据不同的请求方式去调用doPost()//doGet()。
- 因此我们继承 HttpServlet 这个抽象类,只需要重写 doPost()//doGet()即可。当请求进入到service()中时,它会自动的调用对应请求方法的代码。