1. web.xml加载顺序
1. 启动web项目,容器(tomcat,apache)会读取他的配置文件web.xml中的两个节点,context-param和listener
2. 紧接着,容器将创建一个ServletContext(Servlet上下文),应用范围内即整个WEB项目都能使用这个Servlet上下文
3. 容器将<context-param>转化为键值对,并交给ServletContext
4. 容器创建<listener>中的类实例,即创建监听。(备注:listener定义的类可以是自定义的类,但是必须要继承ServletContextListener)
5. 在监听器中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得:ServletContext = ServletContextEvent.getServletContext(); contextParam的值 = ServletContext.getInitParameter("contextParam中的键");这个类中必须还有一个contextDestroyed(ServletContextEvent event)销毁方法。用于关闭应用前释放资源,比如数据库连接等
6. 得到context-param值之后,可以做一些操作了。注意,这个时候web项目还没有完全启动成功。这个动作会比所有的Servlet都要早。换句话说,这个时候,对<context-param>中的键值昨的操作,将在web项目完全启动之前被执行。举例:可能在项目启动之前就打开数据库。那么可以在<context-param>中设置数据库的连接方式。在监听类中初始化数据库连接
7. 补充知识:
- ServletContext是一个全局的存储信息空间,服务器开始,其就存在,服务器关闭才释放
- 一个用户可以有多个request
- 一个用户有一个session
- 所有用户共用一个ServletContext
- 为了节省空间,提高效率,ServletContext中,要放必须的,重要的,所有用户需要共享的线程
2. web.xml节点加载顺序
1. web.xml节点的加载顺序与它们在web.xml中的先后位置无关
2. 加载顺序
1. context-param
2. listener
3. filter
4. servlet
3. tomcat启动过程
4. java web的两个map
5. servlet生命周期
6. servlet相关接口
1. 与servlet实现相关接口或抽象类
1. Servlet接口
1. 方法
- public void init(ServletConfig config) throws ServletException
- public ServletConfig getServletConfig()
- public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
- public String getServletInfo()
- public void destroy()
2. GenericServlet抽象类
1. 继承实现关系
1. 实现Servlet,ServletConfig,Serializable接口
2. 持有一个ServletConfig对象,不可序列化
2. 方法
- public void destroy()
- override
- public String getInitParameter(String name)
- override
- public Enumeration<String> getInitParameterNames()
- override
- public ServletConfig getServletConfig()
- override
- public ServletContext getServletContext()
- override
- public String getServeletInfo()
- override
- public void init(ServletConfig config) throws ServletException
- override
- 调用自己的init方法
- public void init() throws ServletException
- public asbtract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
- override
- public String getServletName()
- override
3. HttpServlet抽象类
2. 与请求响应相关接口
1. ServletRequest接口
2. ServletResponse接口
3. HttpServletRequest接口
4. HttpServletResponse接口
3. 与Servlet配置相关接口
1. ServletConfig接口
2. ServletContext接口