web应用的入口:web.xml核心配置文件详解

前言:如果要了解web项目的底层实现,web.xml配置文件,是必须要掌握的。web.xml配置文件,是web项目的核心,web项目的启动,从这里开始。
为了方便大家理解,我们从最常见的配置开始着手来说明。

一,contextConfigLocation


contextConfigLocation用来配置自定义的配置文件的加载路径,如果指定了contextConfigLocation,当web项目启动时,首先会去加载这个路径下
的配置文件。这个功能,常见的用途,就是在配置文件内容很多时,为了便于管理和阅读,分解配置文件到不同的文件中。例如我们通常的做法,
将servce相关的bean配置在单独的application-service.xml中,将DAO相关的bean配置在单独的application-dao.xml中。用法如下:
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/my.xml</param-value>
</context-param>
    如果有多个配置文件,不同的配置文件之间,可以在<param-value>标签中,用逗号隔开。这里还有一点需要说明的是,
contextConfigLocation的作用是自定义配置文件的加载路径,默认情况下,系统会去/WEB-INF目录下,加载applicationContext.xml这个文件,
一旦配置了contextConfigLocation,ContextLoader就会去我们指定的路径下去加载配置文件。如下:
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>my.xml,you.xml,he.xml</param-value>
</context-param>

二,org.springframework.web.filter.CharacterEncodingFilter

1,CharacterEncodingFilter过滤器的作用
    CharacterEncodingFilter是Spring框架提供的字符编码过滤器,很容易猜到,CharacterEncodingFilter的作用就是解决项目中的编码问题,
编码问题是项目中经常会遇到的一个问题,Spring提供了一种更优雅的解决方法,从全局的角度,来处理HTTP请求的编码问题。我们只需要在
web.xml文件中进行CharacterEncodingFilter配置,就可以解决项目中的中文乱码问题。

2,CharacterEncodingFilter过滤器的使用方法
    在web.xml配置文件中,进行一个filter的配置即可,encodingFilter用来指定过滤器类,这里使用的就是CharacterEncodingFilter;encoding
用来指定编码方式,我们一般都会设置成UTF-8;forceEncoding用来确保,不管是否指定了编码方式,都强制使用encoding配置的编码方式。
    示例代码如下:
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <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>

3,CharacterEncodingFilter源代码
package org.springframework.web.filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CharacterEncodingFilter extends OncePerRequestFilter{
    private String encoding;
    private boolean forceEncoding;
    public CharacterEncodingFilter(){
        this.forceEncoding = false;
    }
    public void setEncoding(String encoding){
        this.encoding = encoding;
    }
    public void setForceEncoding(boolean forceEncoding){
        this.forceEncoding = forceEncoding;
    }
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
      throws ServletException, IOException{
      if ((this.encoding != null) && (((this.forceEncoding) || (request.getCharacterEncoding() == null)))) {
          request.setCharacterEncoding(this.encoding);
          if (this.forceEncoding) {
              response.setCharacterEncoding(this.encoding);
          }
      }
      filterChain.doFilter(request, response);
    }
}

三,org.springframework.web.context.ContextLoaderListener


    ContextLoaderListener是什么呢?ContextLoaderListener是一个监听器。ContextLoaderListener负责监听Web项目的启动过程。
ContextLoaderListener中定义了2个方法:contextInitialized和contextDestroyed,contextInitialized执行时,会初始化web应用
的根上下文信息。
    对于Spring承载的web应用而言,可以在指定在web应用程序启动时载入IOC容器(或者称为WebApplicationContext)。这个功能
是由ContextLoaderListener这个监听器类来完成的。ContextLoaderListener继承自ContextLoader,实际上就是通过ContextLoader
来完成IOC的初始化的。ContextLoaderListener可以看做是Spring的启动器,Spring从这里开始。
ContextLoaderListener源代码:
package org.springframework.web.context;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ContextLoaderListener extends ContextLoader implements ServletContextListener{
    private ContextLoader contextLoader;
    public ContextLoaderListener(){
    }
    public ContextLoaderListener(WebApplicationContext context){
        super(context);
    }
    public void contextInitialized(ServletContextEvent event){
        this.contextLoader = createContextLoader();
        if (this.contextLoader == null) {
            this.contextLoader = this;
        }
        // 初始化Web应用上下文
        this.contextLoader.initWebApplicationContext(event.getServletContext());
    }
    @Deprecated
    protected ContextLoader createContextLoader(){
        return null;
    }
    @Deprecated
    public ContextLoader getContextLoader(){
        return this.contextLoader;
    }
    public void contextDestroyed(ServletContextEvent event){
        if (this.contextLoader != null) {
            this.contextLoader.closeWebApplicationContext(event.getServletContext());
        }
        ContextCleanupListener.cleanupAttributes(event.getServletContext());
    }
}

我们重点来看一下初始化Web应用上下文的方法:initWebApplicationContext,源代码如下:
  public WebApplicationContext initWebApplicationContext(ServletContext servletContext){
      if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
          throw new IllegalStateException("Cannot initialize context because there is already a root application context present -
          check whether you have multiple ContextLoader* definitions in your web.xml!");
      }
      Log logger = LogFactory.getLog(ContextLoader.class);
      // 这个日志,相信大家都很熟悉了,在使用tomcat启动一个web项目,控制台都会打印
      // 信息: Initializing Spring root WebApplicationContext
      servletContext.log("Initializing Spring root WebApplicationContext");
      if (logger.isInfoEnabled()) {
          logger.info("Root WebApplicationContext: initialization started");
      }
      long startTime = System.currentTimeMillis();
      try{
          if (this.context == null) {
              this.context = createWebApplicationContext(servletContext);
          }
          if (this.context instanceof ConfigurableWebApplicationContext) {
              configureAndRefreshWebApplicationContext((ConfigurableWebApplicationContext)this.context, servletContext);
          }
          servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
          ClassLoader ccl = Thread.currentThread().getContextClassLoader();
          if (ccl == ContextLoader.class.getClassLoader()) {
              currentContext = this.context;
          }
          else if (ccl != null) {
              currentContextPerThread.put(ccl, this.context);
          }
          if (logger.isDebugEnabled()) {
              logger.debug("Published root WebApplicationContext as ServletContext attribute with name [" + WebApplicationContext.    ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE + "]");
          }
          if (logger.isInfoEnabled()) {
              long elapsedTime = System.currentTimeMillis() - startTime;
              logger.info("Root WebApplicationContext: initialization completed in " + elapsedTime + " ms");
          }
          return this.context;
      }
      catch (RuntimeException ex) {
          logger.error("Context initialization failed", ex);
          servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, ex);
          throw ex;
      }
      catch (Error err) {
          logger.error("Context initialization failed", err);
          servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, err);
          throw err;
      }
  }

四,org.springframework.web.context.request.RequestContextListener

1,RequestContextListener与ContextLoaderListener的区别是什么?
    RequestContextListener的作用是什么呢?RequestContextListener与ContextLoaderListener的区别是什么?RequestContextListener与
ContextLoaderListener的区别是两者监听不同的事件,RequestContextListener监听的是ServletRequestEvent事件,其实就是HTTP请求事件,
ContextLoaderListener监听ServletContextEvent事件,也就是web容器的启动和关闭事件。我们应该怎么理解RequestContextListener呢,可以
这样来理解:RequestContextListener对web提供了更加精细化的监听,web服务器接收的每次HTTP请求,都会通知RequestContextListener监听
器。

2,RequestContextListener监听器的使用方法
    下面来说一下RequestContextListener这个监听器的使用方法,其实也很简单,只需要在web.xml中进行配置即可。需要注意的问题是
版本问题,如果我们使用的是servlet2.4及以上的版本,我们需要配置监听器,配置如下:
<listener>
    <listener-class>com.yangcq.fc.deploy.DeployListener</listener-class>
</listener>
如果我们使用的是servlet2.4之前的版本,我们需要配置一个过滤器,配置如下:
<filter>
    <filter-name>RequestContextFilter</fileter-name>
    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>RequestContextFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3,RequestContextListener监听器的实现原理分析
    不管是监听器RequestContextFilter,还是过滤器RequestContextFilter,原理差不多,都是利用了ThreadLocal这个“专用通道”,将HTTP
请求参数绑定到为该请求提供服务的线程上。实现细节如下:
private static final ThreadLocal<RequestAttributes> requestAttributesHolder = new NamedThreadLocal("Request attributes");
    RequestContextListener实现了ServletRequestListener接口,源代码如下:
package org.springframework.web.context.request;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import org.springframework.context.i18n.LocaleContextHolder;
public class RequestContextListener implements ServletRequestListener{
    private static final String REQUEST_ATTRIBUTES_ATTRIBUTE = RequestContextListener.class.getName() + ".REQUEST_ATTRIBUTES";
    // 初始化request上下文
    public void requestInitialized(ServletRequestEvent requestEvent){  
        // 注意ServletRequestEvent与ServletContextEvent的不同,RequestContextListener的requestInitialized方法,传递的参数是
        // ServletRequestEvent,而ContextLoaderListener的contextInitialized方法,传递的参数是ServletContextEvent
        if (!(requestEvent.getServletRequest() instanceof HttpServletRequest)) {
            // 首先判断当前的ServletRequestEvent是不是依赖于HttpServletRequest
            throw new IllegalArgumentException("Request is not an HttpServletRequest: " + requestEvent.getServletRequest());
        }
        // 获取当前的HttpServletRequest
        HttpServletRequest request = (HttpServletRequest)requestEvent.getServletRequest();
        // 把HttpServletRequest数据封装到ServletRequestAttributes
        ServletRequestAttributes attributes = new ServletRequestAttributes(request);
        request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);
        LocaleContextHolder.setLocale(request.getLocale());
        RequestContextHolder.setRequestAttributes(attributes);
      }
    // 销毁request上下文
    public void requestDestroyed(ServletRequestEvent requestEvent) {
        ServletRequestAttributes attributes = (ServletRequestAttributes)requestEvent.getServletRequest()
            .getAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE);
        ServletRequestAttributes threadAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        if (threadAttributes != null){
            if (attributes == null) {
                attributes = threadAttributes;
            }
            LocaleContextHolder.resetLocaleContext();
            RequestContextHolder.resetRequestAttributes();
        }
        if (attributes != null)
            attributes.requestCompleted();
    }
}

五,org.springframework.web.servlet.DispatcherServlet

1,DispatcherServlet核心控制器的作用
    DispatcherServlet是Spring MVC的核心控制器,所有的web请求都要通过DispatcherServlet来处理,这些请求经过转发、匹配、数据处理以
后,交给页面来进行展示。DispatcherServlet的基类是HttpServlet,DispatcherServlet启动时也会初始化上下文信息,这个上下文是对根上下
文的补充。在SpringMVC中,对于不同的web请求,SpringMVC提供了不同的映射策略(HandleMapping),不同的项目可以根据自身情况选择不同的
映射策略。默认情况下,DispatcherServlet使用的是BeanNameUrlHandlerMapping作为自己的映射策略。

2,DispatcherServlet核心控制器的初始化
    DispatcherServlet的初始化,是在ContextLoaderListener的初始化之后。DispatcherServlet的初始化的时间与在web.xml中load-on-startup
的定义有关。DispatcherServlet会建立自己的上下文来持有SpringMVC的Bean对象,在建立这个自己持有的IOC容器时,会从ServletContext中得
到根上下文,作为DispatcherServlet持有上下文的双亲上下文。从这里我们可以看出,ServletContext是根上下文,DispatcherServlet是第二层次
的二级上下文。DispatcherServlet上下文是对根上下文的补充和扩展,是为了更好的支持web。好,先看一下DispatcherServlet的继承关系:
    * public class DispatcherServlet extends FrameworkServlet
    * public abstract class FrameworkServlet extends HttpServletBean
    * public abstract class HttpServletBean extends HttpServlet implements EnvironmentCapable, EnvironmentAware
    从上面这个继承关系可以看出,DispatcherServlet的本质还是一个HttpServlet,SpringMVC框架就是对servlet的封装。万变不离其宗。其实,
DispatcherServlet也是通过使用Servlet API来处理HTTP请求的。DispatcherServlet实现的原理,和Servlet很相似。

3,DispatcherServlet核心控制器的配置方法
配置如下:
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>


参考资料:《tomcat启动控制台输出日志完整版》
2016-9-6 14:36:14 org.apache.catalina.core.AprLifecycleListener init
信息: Loaded APR based Apache Tomcat Native library 1.1.30 using APR version 1.4.8.
2016-9-6 14:36:14 org.apache.catalina.core.AprLifecycleListener init
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
2016-9-6 14:36:14 org.apache.catalina.core.AprLifecycleListener initializeSSL
信息: OpenSSL successfully initialized with version OpenSSL 1.0.1g 7 Apr 2014
2016-9-6 14:36:14 org.apache.coyote.http11.Http11AprProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2016-9-6 14:36:14 org.apache.coyote.ajp.AjpAprProtocol init
信息: Initializing Coyote AJP/1.3 on ajp-8009
2016-9-6 14:36:14 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1196 ms
2016-9-6 14:36:14 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2016-9-6 14:36:14 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.41
2016-9-6 14:36:14 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor host-manager.xml
2016-9-6 14:36:15 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor manager.xml
2016-9-6 14:36:15 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory docs
2016-9-6 14:36:15 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory examples
2016-9-6 14:36:15 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
2016-9-6 14:36:15 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2016-9-6 14:36:15 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory yangcq2016
2016-9-6 14:36:15 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\apache-tomcat-6.0.41\webapps\yangcq2016\WEB-INF\lib\javaee.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
2016-9-6 14:36:15 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\apache-tomcat-6.0.41\webapps\yangcq2016\WEB-INF\lib\jeus.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
2016-9-6 14:36:16 org.apache.catalina.core.StandardContext listenerStart
严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4153)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2016-9-6 14:36:16 org.apache.catalina.core.StandardContext listenerStart
严重: Error configuring application listener of class org.springframework.web.util.IntrospectorCleanupListener
java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4153)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2016-9-6 14:36:16 org.apache.catalina.core.StandardContext listenerStart
严重: Error configuring application listener of class org.springframework.web.context.request.RequestContextListener
java.lang.ClassNotFoundException: org.springframework.web.context.request.RequestContextListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4153)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2016-9-6 14:36:16 org.apache.catalina.core.StandardContext listenerStart
严重: Skipped installing application listeners due to previous error(s)
2016-9-6 14:36:16 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2016-9-6 14:36:16 org.apache.catalina.core.StandardContext start
严重: Context [/yangcq2016] startup failed due to previous errors
2016-9-6 14:36:16 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory yangcq2015
2016-9-6 14:36:16 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\apache-tomcat-6.0.41\webapps\yangcq2015\WEB-INF\lib\javaee.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
2016-9-6 14:36:16 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\apache-tomcat-6.0.41\webapps\yangcq2015\WEB-INF\lib\jeus.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
2016-09-06 14:36:17,149 [main] INFO  com.yangcq.ycq.deploy.TransactionDeployer - start deploy config source file. sourcePath : D:\apache-tomcat-6.0.41\webapps\yangcq2015\WEB-INF\classes\design, distPath : D:\apache-tomcat-6.0.41\webapps\yangcq2015\WEB-INF\classes\config
2016-09-06 14:36:25,404 [main] INFO  com.yangcq.ycq.deploy.TransactionDeployer - deploy config source file ok...
2016-9-6 14:36:25 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext

2016-9-6 14:36:36 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'dispatcher'
2016-9-6 14:36:37 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ycq
2016-9-6 14:36:37 org.apache.catalina.core.ApplicationContext log
信息: Set web app root system property: 'webapp.root' = [D:\apache-tomcat-6.0.41\webapps\ycq\]
2016-9-6 14:36:37 org.apache.catalina.core.ApplicationContext log
信息: Initializing Logback from [classpath:logback.xml]
14:36:37,873 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
14:36:37,873 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
14:36:37,873 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/apache-tomcat-6.0.41/webapps/ycq/WEB-INF/classes/logback.xml]
14:36:38,076 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 30 seconds
14:36:38,076 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\apache-tomcat-6.0.41\webapps\ycq\WEB-INF\classes\logback.xml]] every 30 seconds.
14:36:38,076 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
14:36:38,076 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
14:36:38,092 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ROLLING]
14:36:38,171 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use zip compression
14:36:38,171 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern MSS_HOME_IS_UNDEFINED/log//archives//ycq/Out-%d{yyyy-MM-dd}.%i for the active file
14:36:38,186 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@37ecb28e - The date pattern is 'yyyy-MM-dd' from file name pattern 'MSS_HOME_IS_UNDEFINED/log//archives//ycq/Out-%d{yyyy-MM-dd}.%i.zip'.
14:36:38,186 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@37ecb28e - Roll-over at midnight.
14:36:38,186 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@37ecb28e - Setting initial period to Mon Nov 09 10:37:02 CST 2015
14:36:38,186 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:36:38,264 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ROLLING] - Active log file name: MSS_HOME_IS_UNDEFINED/log//Outycq.log
14:36:38,264 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ROLLING] - File property is set to [MSS_HOME_IS_UNDEFINED/log//Outycq.log]
14:36:38,264 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
14:36:38,264 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ERRORLog]
14:36:38,264 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use zip compression
14:36:38,264 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern MSS_HOME_IS_UNDEFINED/log//archives//ycq/Error-%d{yyyy-MM-dd}.%i for the active file
14:36:38,264 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@183648b1 - The date pattern is 'yyyy-MM-dd' from file name pattern 'MSS_HOME_IS_UNDEFINED/log//archives//ycq/Error-%d{yyyy-MM-dd}.%i.zip'.
14:36:38,264 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@183648b1 - Roll-over at midnight.
14:36:38,264 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@183648b1 - Setting initial period to Mon Nov 09 10:37:02 CST 2015
14:36:38,264 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:36:38,280 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.boolex.JaninoEventEvaluator] for [evaluator] property
14:36:38,420 |-INFO in ch.qos.logback.classic.boolex.JaninoEventEvaluator@c710a3b - Adding [return] prefix and a semicolon suffix. Expression becomes [return level>=40000;]
14:36:38,420 |-INFO in ch.qos.logback.classic.boolex.JaninoEventEvaluator@c710a3b - See also http://logback.qos.ch/codes.html#block
14:36:38,764 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERRORLog] - Active log file name: MSS_HOME_IS_UNDEFINED/log//Errorycq.log
14:36:38,764 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERRORLog] - File property is set to [MSS_HOME_IS_UNDEFINED/log//Errorycq.log]
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:36:38,764 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.ycq] to DEBUG
14:36:38,764 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
14:36:38,779 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
14:36:38,779 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@6dd6c962 - Registering current configuration as safe fallback point
14:36:38,764 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERRORLog] - Active log file name: MSS_HOME_IS_UNDEFINED/log//Errorycq.log
14:36:38,764 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERRORLog] - File property is set to [MSS_HOME_IS_UNDEFINED/log//Errorycq.log]
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:36:38,764 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.ycq] to DEBUG
14:36:38,764 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
14:36:38,764 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
14:36:38,779 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
14:36:38,779 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@6dd6c962 - Registering current configuration as safe fallback point
14:36:38,779 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 30 seconds
14:36:38,779 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\apache-tomcat-6.0.41\webapps\ycq\WEB-INF\classes\logback.xml]] every 30 seconds.
14:36:38,779 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
14:36:38,795 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
14:36:38,795 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ROLLING]
14:36:38,795 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use zip compression
14:36:38,795 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern MSS_HOME_IS_UNDEFINED/log//archives//ycq/Out-%d{yyyy-MM-dd}.%i for the active file
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@159a8bf2 - The date pattern is 'yyyy-MM-dd' from file name pattern 'MSS_HOME_IS_UNDEFINED/log//archives//ycq/Out-%d{yyyy-MM-dd}.%i.zip'.
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@159a8bf2 - Roll-over at midnight.
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@159a8bf2 - Setting initial period to Mon Nov 09 10:37:02 CST 2015
14:36:38,795 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ROLLING] - Active log file name: MSS_HOME_IS_UNDEFINED/log//Outycq.log
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ROLLING] - File property is set to [MSS_HOME_IS_UNDEFINED/log//Outycq.log]
14:36:38,795 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
14:36:38,795 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ERRORLog]
14:36:38,795 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use zip compression
14:36:38,795 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern MSS_HOME_IS_UNDEFINED/log//archives//ycq/Error-%d{yyyy-MM-dd}.%i for the active file
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5559c7f2 - The date pattern is 'yyyy-MM-dd' from file name pattern 'MSS_HOME_IS_UNDEFINED/log//archives//ycq/Error-%d{yyyy-MM-dd}.%i.zip'.
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5559c7f2 - Roll-over at midnight.
14:36:38,795 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@5559c7f2 - Setting initial period to Mon Nov 09 10:37:02 CST 2015
14:36:38,795 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:36:38,795 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.boolex.JaninoEventEvaluator] for [evaluator] property
14:36:38,795 |-INFO in ch.qos.logback.classic.boolex.JaninoEventEvaluator@79560ca4 - Adding [return] prefix and a semicolon suffix. Expression becomes [return level>=40000;]
14:36:38,795 |-INFO in ch.qos.logback.classic.boolex.JaninoEventEvaluator@79560ca4 - See also http://logback.qos.ch/codes.html#block
14:36:38,810 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERRORLog] - Active log file name: MSS_HOME_IS_UNDEFINED/log//Errorycq.log
14:36:38,810 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERRORLog] - File property is set to [MSS_HOME_IS_UNDEFINED/log//Errorycq.log]
14:36:38,810 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
14:36:38,810 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
14:36:38,810 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
14:36:38,810 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.ycq] to DEBUG
14:36:38,810 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
14:36:38,810 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
14:36:38,810 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
14:36:38,810 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5b3353f - Registering current configuration as safe fallback point
2016-9-6 14:36:38 org.apache.catalina.core.ApplicationContext log
信息: JUL to SLF4J bridge is not available on the classpath
2016-9-6 14:36:38 org.apache.catalina.core.ApplicationContext log


------------------------------------初始化root WebApplicationContext------------------------------------
信息: Initializing Spring root WebApplicationContext
2016-9-6 14:36:38 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization started
2016-9-6 14:36:39 org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
信息: Refreshing Root WebApplicationContext: startup date [Tue Sep 06 14:36:39 CST 2016]; root of context hierarchy
2016-9-6 14:36:39 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
2016-9-6 14:36:39 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-dao.xml]
2016-9-6 14:36:39 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-job.xml]
2016-9-6 14:36:39 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-cache.xml]
2016-9-6 14:36:40 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer loadProperties
信息: Loading properties file from class path resource [cache.properties]
2016-9-6 14:36:43 org.springframework.context.support.DefaultLifecycleProcessor start
信息: Starting beans in phase 2147483647
14:36:43.691 [INFO ] [main] [] Scheduler schedulerFactoryBean_$_NON_CLUSTERED started. Caller+0     at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:575)
14:36:43.691 [DEBUG] [schedulerFactoryBean_QuartzSchedulerThread] [] batch acquisition of 0 triggers Caller+0     at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:276)
2016-9-6 14:36:43 org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler
信息: Starting Quartz Scheduler now
2016-9-6 14:36:43 org.springframework.web.context.ContextLoader initWebApplicationContext
信息: Root WebApplicationContext: initialization completed in 4897 ms
------------------------------------初始化root WebApplicationContext------------------------------------


------------------------------------初始化appServlet------------------------------------
2016-9-6 14:36:43 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'appServlet'
2016-9-6 14:36:43 org.springframework.web.servlet.DispatcherServlet initServletBean
信息: FrameworkServlet 'appServlet': initialization started
2016-9-6 14:36:43 org.springframework.web.context.support.XmlWebApplicationContext prepareRefresh
信息: Refreshing WebApplicationContext for namespace 'appServlet-servlet': startup date [Tue Sep 06 14:36:43 CST 2016]; parent: Root WebApplicationContext
2016-9-6 14:36:43 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-servlet.xml]
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCache/clearCache.jhtml] onto handler 'tapCacheControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCache/refreshCache.jhtml] onto handler 'tapCacheControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCache/cacheInfo.jhtml] onto handler 'tapCacheControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapDateFreq/tapDateFreq.jhtml] onto handler 'tapDateFreqControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpi/tapCKpiData.jhtml] onto handler 'tapCKpiDataControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpi/tapCKpiPlanData.jhtml] onto handler 'tapCKpiDataControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpi/tapCKpiDesc.jhtml] onto handler 'tapCKpiDataControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCBranch/queryTapCBranch.jhtml] onto handler 'tapCBranchControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpiBasisLine/queryBasisLine.jhtml] onto handler 'tapCKpiBasisLineControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpiChartMonthLine/queryChartMonthLine.jhtml] onto handler 'tapCKpiChartMonthLineControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpiChartMonthLine/getServerSystemTime.jhtml] onto handler 'tapCKpiChartMonthLineControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpiColumnMonthLine/queryColumnMonthLine.jhtml] onto handler 'tapCKpiColumnMonthLineControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpiDegreeLine/queryDegreeLine.jhtml] onto handler 'tapCKpiDegreeLineControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpiMeterLine/queryMeterLine.jhtml] onto handler 'tapCKpiMeterLineControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCKpiStructLine/queryStructLine.jhtml] onto handler 'tapCKpiStructLineControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCUserLogonV/userLogon.jhtml] onto handler 'tapCUserLogonVControl'
2016-9-6 14:36:44 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping registerHandler
信息: Mapped URL path [/tapCUserLogonV/userLogout.jhtml] onto handler 'tapCUserLogonVControl'
2016-9-6 14:36:45 org.springframework.web.servlet.DispatcherServlet initServletBean
信息: FrameworkServlet 'appServlet': initialization completed in 1266 ms
------------------------------------初始化appServlet------------------------------------


2016-9-6 14:36:45 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ROOT
2016-9-6 14:36:45 org.apache.coyote.http11.Http11AprProtocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2016-9-6 14:36:45 org.apache.coyote.ajp.AjpAprProtocol start
信息: Starting Coyote AJP/1.3 on ajp-8009
2016-9-6 14:36:45 org.apache.catalina.startup.Catalina start
信息: Server startup in 30331 ms

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值