ssm框架中,项⽬启动过程以及l配置详解本篇主要在基于SSM的框架,深⼊讲解l的配置
每个javaEE项⽬中都会有,l⽂件是⽤来初始化配置信息:⽐如Welcome页⾯、servlet、servlet-mapping、filter、listener、启动加载级别等。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"java.sun/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--welcome pages-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--l是全局的,应⽤于多个serverlet,配合listener⼀起使⽤-->
<!-- 如果是监听多个⽂件,可⽤‘,’隔开 -->
<context-param>
<description>配置Spring配置⽂件路径</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:l</param-value>
</context-param>
<!-- 定义SPRING,加载spring -->
<listener>
<listener-class>
org.t.request.RequestContextListener
</listener-class>
</listener>
<listener>
<listener-class>org.t.ContextLoaderListener</listener-class>
</listener>
<!--log4j配置⽂件加载-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!--启动⼀个watchdog线程每1800秒扫描⼀下log4j配置⽂件的变化-->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>1800000</param-value>
</context-param>
<context-param>
<param-name/>
<param-value/>
</context-param>
<!-- 配置Spring字符编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring MVC 核⼼控制器 DispatcherServlet 配置开始 -->
<!--配置springmvc DispatcherServlet-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--Sources标注的⽂件夹下需要新建⼀个spring⽂件夹-->
<param-name>contextConfigLocation</param-name>
<!-- 如果是监听多个⽂件,可⽤‘,’隔开 -->
<param-value>classpath:l</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<!-- 拦截设置 -->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Spring MVC 核⼼配置结束 -->
<!-- 激活Tomcat的defaultServlet来处理静态⽂件 -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<!-- session 时间 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
⾸先介绍⼀下启动⼀个项⽬的整体流程:
1.  tomcat启动⼀个WEB项⽬的时候,WEB容器会去读取它的配置⽂件l,读取<listener>和<context-param>两个结点。
2.  紧接着,容器创建⼀个ServletContext(servlet上下⽂,全局的),这个web项⽬的所有部分都将共享这个上下⽂。可以把
ServletContext看成是⼀个Web应⽤的端组件的共享内存,在ServletContext中可以存放共享数据。ServletContext对象是真正的⼀个全局对象,凡是web容器中的Servlet都可以访问
3. 容器将<context-param>转换为键值对,并交给servletContext。
4.  容器创建<listener>中的类实例,创建。
以上步骤,都是基于l的配置⽂件进⾏操作的,现在简单说⼀下,l⽂件主要的⼯作包括两部
分:1、l启动spring容器;2、DispathcheServlet的声明;3、其余⼯作是session过期,字符串编码等
读取l中两个节点,<context-param>  >  <listener>,创建ServletContext对象,listener中ContextLoaderListener的作⽤就是启动Web容器时,监听servletContext对象的变化,获取servletContext对象的<context-param>,来⾃动装配ApplicationContext的配置信息。
1) 当我们启动⼀个WEB项⽬容器时,容器包括(JBoss,Tomcat等)。⾸先会去读取l配置⽂件⾥的配置,当这⼀步骤没有出错并且完成之后,项⽬才能正常的被启动起来。
2) 启动WEB项⽬的时候:
容器⾸先会去读取l配置⽂件中的两个节点:
第⼀个节点:<context-param> </context-param> ,<context-param>是web应⽤的资源配置,是wen应⽤的上下⽂参数,如数据库连接⽅式,spring的配置⽂件路径(l)等,这些键值对都会加⼊到servletContext对象。
第⼆个节点:<listener> </listener>,<listener>可以获取当前该web应⽤对象,即servletContext对象,获取context-param 值,进⽽获取资源,在web应⽤启动前操作)  ,listener中ContextLoaderListener的作⽤就是启动Web容器时,监听servletContext对象的变化,获取servletContext对象的<context-param>,来⾃动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接⼝,在l配置这个,启动容器时,就会默认执⾏它实现的⽅法。
<context-param>元素含有⼀对参数名和参数值,⽤作应⽤的Servlet上下⽂初始化参数,参数名在整个Web应⽤中必须是惟⼀的,在web 应⽤的整个⽣命周期中上下⽂初始化参数都存在,任意的Servlet和jsp都可以随时随地访问它。<context-param>⽤于向 ServletContext 提供键值对。
<Listener>,它是实现了javax.servlet.ServletContextListener 接⼝的服务器端程序,它也是随web应⽤的启动⽽启动,只初始化⼀次,随web应⽤的停⽌⽽销毁。主要作⽤是: listener中ContextLoaderListener的作⽤就是启动Web容器时,监听servletContext对象的变化,获取servletContext对象的<context-param>,来⾃动装配ApplicationContext的配置信息。
3)紧接着,容器创建⼀个ServletContext(application),这个web项⽬的所有部分都将共享这个上下⽂。容器以<context-param>
</context-param>的name作为键,value作为值,将其转化为键值对,存⼊ServletContext。ServletContext即代表当前web应⽤。
4)容器创建<listener></listener>中的类实例,即创建监听.,listener中ContextLoaderListener的作⽤就是启动Web容器时,监听servletContext对象的变化,获取servletContext对象的<context-param>,来⾃动装配ApplicationContext的配置信息。
5) 中通过contextInitialized(ServletContextEvent args)初始化⽅法,来获得ServletContext 对象以及context-param值。
ServletContext = ServletContext();
context-param的值 = InitParameter("context-param的键");
6)  拿到这个context-param的值之后,可以在WEB项⽬还没有完全启动时,进⾏⼀些初始化⼯作,但是最主要的还是⾃动装配ApplicationContext的配置信息。
7)  .举例.你可能想在项⽬启动之前就打开数据库.
那么这⾥就可以在<context-param>中设置数据库的连接⽅式,在监听类中初始化数据库的连接.。这个监听是⾃⼰写的⼀个类,除了初始化⽅法,它还有销毁⽅法.⽤于关闭应⽤前释放资源.⽐如说数据库连接的关闭.
B、DispathcheServlet的声明(主要是servlet标签的配置,,主要配置springmvc)
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点(也就是把前端请求分发到⽬标controller),⽽且与Spring IoC容器⽆缝集成,从⽽可以获得Spring的所有好处。
DispatcherServlet主要⽤作职责调度⼯作,本⾝主要⽤于控制流程,主要职责如下:
1. ⽂件上传解析,如果请求类型是multipart将通过MultipartResolver进⾏⽂件上传解析;
2. 通过HandlerMapping,将请求映射到处理器(返回⼀个HandlerExecutionChain,它包括⼀个处理器、多个HandlerInterceptor
);
3. 通过HandlerAdapter⽀持多种类型的处理器(HandlerExecutionChain中的处理器);
4. 通过ViewResolver解析逻辑视图名到具体视图实现;
5. 本地化解析;
6. 渲染具体的视图等;
7. 如果执⾏过程中遇到异常将交给HandlerExceptionResolver来解析。
从以上我们可以看出DispatcherServlet主要负责流程的控制(⽽且在流程中的每个关键点都是很容易扩展的)。
从图中可以看出:
ContextLoaderListener初始化的上下⽂加载的Bean是对于整个应⽤程序共享的,不管是使⽤什么表现层技术,⼀般如DAO层、Service层Bean;
DispatcherServlet初始化的上下⽂加载的Bean是只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,该初始化上下⽂应该只加载Web相关组件。
⼩结:
1、javaEE项⽬启动过程:⾸先加载Spring上下⽂环境配置⽂件,然后加载SpringMVC配置⽂件。
Spring配置加载过程:
tomcat服务器启动⼀个WEB项⽬的时候,WEB容器会去读取它的配置⽂件l,然后会读取它的listener和context-param节点,然后紧接着会创建⼀个ServletContext(servlet上下⽂,全局的),这个web项⽬的所有部分都将共享这个上下⽂,容器将<context-param>转换为键值对,并交给servletContext,<listener>可以获取当前该web应⽤对象,即servletContext对象,获取context-param 值,进⽽获取资源,在web应⽤启动前操作)  ,listener中ContextLoaderListener的作⽤就是启动Web容器时,监听servletContext对象的变化,获取servletContext对象的<context-param>,来⾃动装配ApplicationContext的配置信息。这样spring的加载过程就完成了。
SpringMVC配置加载过程:
springMVC其实和spring是⼀样的,但是它不⽤在程序开始时访问。springMVC的加载过程是通过Serv
let节点 。
Servlet介绍:
Servlet通常称为服务端⼩程序,是服务端的程序,⽤于处理及响应客户的请求。Servlet是⼀个特殊的Java类,创建Servlet类⾃动继承HttpServlet。客户端通常只有GET和POST两种请求⽅式,Servlet为了响应这两种请求,必须重写doGet()和doPost()⽅法。⼤部分时候,Servlet对于所有的请求响应都是完全⼀样的,此时只需要重写service()⽅法即可响应客户端的所有请求。
创建Servlet实例有两个时机:
1. 客户端第⼀次请求某个Servlet时,系统创建该Servlet的实例,⼤部分Servlet都是这种Servlet;
session如何设置和读取2. web应⽤启动时⽴即创建Servlet实例,即<load-on-start>1</laod-on-start>
2、如何进⾏项⽬的初始化

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。