javaweb启动完成之后执⾏⽅法_详解JavaWeb项⽬启动执⾏
顺序
详解Java Web项⽬启动执⾏顺序
发布于 2020-7-12|java xml是什么
复制链接
摘记: ⼀、l配置节点简介
(1) context-param格式定义
```xml
contextConfigLocation ..
⼀、l配置节点简介(1) context-param格式定义
```xml
contextConfigLocation
classpath:l
```
作⽤:
该元素⽤来声明应⽤范围(整个WEB项⽬)内的上下⽂初始化参数。
param-name 设定上下⽂的参数名称。必须是唯⼀名称
param-value 设定的参数名称的值,这⾥的例⼦是指定spring配置⽂件的位置
(2) listener格式定义
```xml
//listen-class 指定监听类,该类继承ServletContextListener 包含初始化⽅法contextInitialized(ServletContextEvent event) 和销毁⽅法contextDestoryed(ServletContextEvent event)
org.t.ContextLoaderListener
```
作⽤:该元素⽤来注册⼀个类。可以收到事件什么时候发⽣以及⽤什么作为响应的通知。事件监听程序在建⽴、修改和删除会话或servlet环境时得到通知。常与context-param联合使⽤。
(3) filter格式定义
```xml
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
```
作⽤:⽤于指定WEB容器的过滤器, filter能够在⼀个请求到达servlet之前预处理⽤户请求,也可以在离开servlet时处理http响应;在执⾏servlet之前,⾸先执⾏filter程序,并为之做⼀些预处理⼯作;根据程序需要修改请求和响应;在servlet被调⽤之后截获servlet的执⾏。
(4)servlet
- 格式定义
```xml
//配置Spring MVC,指定处理请求的Servlet,有两种⽅式:
//1. 默认查MVC配置⽂件的地址是:/WEB-INF/${servletName}-l
//2. 可以通过配置修改MVC配置⽂件的位置,需要在配置DispatcherServlet时指定MVC配置⽂件的位置。
//这⾥使⽤的是第⼆种⽅式
dispatchServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:l
1
dispatchServlet
*.shtml
```
作⽤:
创建并返回⼀个包含基于客户请求性质的动态内容的完整的html页⾯;
创建可嵌⼊到现有的html页⾯中的⼀部分html页⾯(html⽚段);
读取客户端发来的隐藏数据;
读取客户端发来的显⽰数据;
与其他服务器资源(包括数据库和java的应⽤程序)进⾏通信;
⼆、 l加载过程(步骤):
启动web项⽬,容器(如Tomcat、Apache)会去读取它的配置⽂件l 中的两个节点,context-param和listener。
紧接着,容器将创建⼀个ServletContext(⼜称为:Servlet上下⽂),应⽤范围内即整个WEB项⽬都能使⽤这个Servlet上下⽂。
容器将转化为键值对,并交给ServletContext。
容器创建中的类实例,即创建监听。(备注:listener定义的类可以是⾃定义的类但必须需要继承ServletContextListener)。
在监听中会有contextInitialized(ServletContextEvent args)初始化⽅法,在这个⽅法中获得:ServletContext =
得到这个context-param的值之后,你就可以做⼀些操作了。注意,这个时候你的WEB项⽬还没有完全启动完成。这个动作会⽐所有的Servlet都要早。换句话说,这个时候,你对 中的键值做的操作,将在你的WEB项⽬完全启动之前被执⾏。
举例.你可能想在项⽬启动之前就打开数据库。那么这⾥就可以在中设置数据库的连接⽅式,在监听类中初始化数据库的连接。
补充知识:ServletContext,是⼀个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,⼀个⽤户可有多个;session,⼀个⽤户⼀个;⽽servletContext,所有⽤户共⽤⼀个。所以,为了节省空间,提⾼效率,ServletContext中,要放必须的、重要的、所有⽤户需要共享的线程⼜是安全的⼀些信息。例如,⼀个购物⽹站,⽤户要访问商品的详细信息,如果放在session域,每个⽤户都要访问⼀遍数据库,这样效率太低;⽽放在ServletContext中,服务器⼀启动,就访问数据库将商品信息放⼊数据库,这样所有⽤户只需要通过上下⽂就能访问到商品的信息。三、l节点加载顺序:
上⽂也提到到了,⽤于对ServletContext提供键值对,即应⽤程序的上下⽂信息。⽽listener、servlet等节点在初始化的过程中会使⽤到这些上下⽂信息,所以最后我们得出l节点的加载顺序应该为:context-param->listener->filter->servlet。
对于某类配置节点⽽⾔,位置的先后是有要求的。以servlet举例,与servlet相关的配置节点是servlet-mapping,对于拥有相同配置节servlet-name的servlet和servlet-mapping来说,servlet-mapping必须在servlet后定义,否则当解析到servlet-mapping时,它的servlet-name还没有定义。web 容器启动时初始化每个 servlet时,是按照 servlet配置节出现的顺序来初始化的。
最终结论: l 的加载顺序是:[context-param -> listener -> filter -> servlet -> spring] ,⽽同类型节点之间的实际程序调⽤的时候的顺序是根据对应的 mapping 的顺序进⾏调⽤的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论