Servlet的生命周期:
- 实例化 (一般是构造函数)
- 初始化init()
- service() 服务
- distory() 销毁
创建servlet一般有三种方式
1、直接实现Servlet接口(接口中的所有抽象方法都要实现,无论是否愿意;所以灵活性较低);
2、继承GenericServlet类【通用的Servlet】该类(适配器模式)为抽象类只有service()方法为抽象方法,其它方法均有实现;
3、 继承HttpServlet类 【模板方法设计模式】,开发中最常使用
都需要在web.xml中配置
<servlet->和<servlet-mapping>
在idea中直接创建Servlet类则不需要配置(因为它选择了另外一种映射方式-注解 @WebServlet(name = “ServletDemo”))
Servlet细节:
url-pattern: .do 以*.字符串的请求都可以访问
url-pattern: /* 任意字符串都可以访问
url-pattern: /action/* 以/action开头的请求都可以访问
Servlet多线程相关:
单实例:每次访问多线程
解决线程安全问题的最佳办法,不要写全局变量,而写局部变量。
ServletConfig的使用:
1、Servlet获取配置信息:
使用init()方法,在方法内得到config对象(此对象是服务器创建);
通过GenericServlet类的getInitParameter(’‘xxx’’)方法得到配置信息
2、获得ServletContext对象
ServletContext:
代表的是整个应用。一个应用只有一个ServletContext对象,是单实例。
作用:
1作为“域对象”,在一定范围内(当前应用),使多个Servlet共享数据。
常用方法:
void setAttribute(String name,object value);//向ServletContext对象的map中添加数据
Object getAttribute(String name);//从ServletContext对象的map中取数据
void rmoveAttribute(String name);//根据name去移除数据
2、获取全局配置信息
3、获取资源路径
String getRealPath(String path);//根据资源名称得到资源的绝对路径
4、Servlet的转发
RequestDispatcher getRequestDispatcher(String path) ;//参数表示要跳转到哪去