zoukankan      html  css  js  c++  java
  • 我可以发现了一个SpringMVC框架的Bug,描述如下:

    摘要: web.xml里只配置了一个Servlet(DispatcherServlet),初始化了2个MVC上下文,这是不正确的

    (1)

    配置文件web.xml其中的片段:

    <servlet>
       <servlet-name>OOXXappServlet</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring/OOXXappServlet/servlet-context.xml</param-value>
       </init-param>
    </servlet>

    (2)

    使用如下代码,获取ServletContext:

    WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
    ServletContext sc = wac.getServletContext();
    if (sc != null) {
       out.println(
             "
    	WAC getServletContextName	" + sc.getServletContextName() +
             "
    	WAC getClassLoader	" + sc.getClassLoader() +
             "
    	WAC getClass	" + sc.getClass() +
             "
    	WAC getAttributeNames	" + sc.getAttributeNames().toString() +
             "
    	WAC getContextPath	" + sc.getContextPath() +
             "
    	WAC getInitParameterNames	" + sc.getInitParameterNames().toString() +
             "
    	WAC getServerInfo	" + sc.getServerInfo() +
             "
    	WAC getSessionCookieConfig	" + sc.getSessionCookieConfig()
       );
    
       Enumeration<String> es = sc.getAttributeNames();
       while (es.hasMoreElements()){
          String attr = es.nextElement().toString();
          out.println(
                      attr +
                      "	:	" +
                      sc.getAttribute(attr)
          );
       }
    }

    (3)上面代码的执行Log:

    WAC getServletContextName     /
    WAC getClassLoader    WebAppClassLoader=105146840@64469d8
    WAC getClass  class org.eclipse.jetty.webapp.WebAppContext$Context
    WAC getAttributeNames java.util.Collections$3@5c9d540c
    WAC getContextPath
    WAC getInitParameterNames     java.util.Collections$3@126898e2
    WAC getServerInfo     jetty/9.4.1.v20170120
    WAC getSessionCookieConfig    org.eclipse.jetty.server.session.SessionHandler$CookieConfig@90ed286

        javax.servlet.context.tempdir   :       E:JavaTryCatchspring-mvc-showcase arget mp
        org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern      :       .*/javax.servlet-[^/]*.jar$|.*/servlet-api-[^/]*.jar$|.*javax.servlet.jsp.jstl-[^/]*.jar|.*taglibs-standard-impl-.*.jar
        org.eclipse.jetty.util.DecoratedObjectFactory   :       org.eclipse.jetty.util.DecoratedObjectFactory[decorators=3]
        org.springframework.web.servlet.FrameworkServlet.CONTEXT.OOXXappServlet     :       WebApplicationContext for namespace 'OOXXappServlet-servlet': startup date [Mon Jun 12 18:22:41 CST 2017];parent: Root WebApplicationContext
        org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.SCI   :       WebSocketUpgradeFilter[configuration=org.eclipse.jetty.websocket.server.NativeWebSocketConfiguration@7a191211]
        org.eclipse.jetty.resource.postOverlay  :       file:///E:/JavaTryCatch/spring-mvc-showcase/src/main/webapp/
        org.eclipse.jetty.lifecyleCallbackCollection    :       org.eclipse.jetty.plus.annotation.LifeCycleCallbackCollection@4c92146a
        resourceCache   :       ResourceCache[null,org.eclipse.jetty.servlet.DefaultServlet@1aeb2a92]@1703825835
        org.eclipse.jetty.websocket.server.NativeWebSocketConfiguration :       org.eclipse.jetty.websocket.server.NativeWebSocketConfiguration@7a191211
        org.apache.tomcat.InstanceManager       :       org.apache.tomcat.SimpleInstanceManager@57b55e91
        org.eclipse.jetty.tmpdirConfigured      :       true
        org.eclipse.jetty.server.Executor       :       qtp2189588{STARTED,8<=13<=200,i=7,q=0}
        org.eclipse.jetty.injectionCollection   :       org.eclipse.jetty.plus.annotation.InjectionCollection@bd82149
        org.eclipse.jetty.runAsCollection       :       org.eclipse.jetty.plus.annotation.RunAsCollection@4824251a
        org.apache.jasper.compiler.ELInterpreter        :       org.apache.jasper.compiler.ELInterpreterFactory$DefaultELInterpreter@5fb026bc
        org.eclipse.jetty.containerInitializerStarter   :       org.eclipse.jetty.annotations.ServletContainerInitializersStarter@220caa0d
        org.apache.jasper.compiler.TldCache     :       org.apache.jasper.compiler.TldCache@6814156c
        org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcherServlet      :   WebApplicationContext for namespace 'dispatcherServlet-servlet': startup date [Mon Jun 12 18:22:38 CST 2017]; parent: Root WebApplicationContext
        org.springframework.web.context.WebApplicationContext.ROOT      :       Root WebApplicationContext: startup date [Mon Jun 12 18:22:38 CST 2017]; root of context hierarchy
        org.springframework.web.context.support.ServletContextScope     :       org.springframework.web.context.support.ServletContextScope@171f181
        org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter       :       WebSocketUpgradeFilter[configuration=org.eclipse.jetty.websocket.server.NativeWebSocketConfiguration@7a191211]
        javax.websocket.server.ServerContainer  :       org.eclipse.jetty.websocket.jsr356.server.ServerContainer@5faaa2d5
        org.apache.jasper.runtime.JspApplicationContextImpl     :       org.apache.jasper.runtime.JspApplicationContextImpl@18b127ef
     

    (4)问题描述

    可以在上面的记录中,attribute里有2个“子上下文”:

    org.springframework.web.servlet.FrameworkServlet.CONTEXT.OOXXappServlet 和 org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcherServlet

    其value分别是:
    WebApplicationContext for namespace 'dispatcherServlet-servlet': startup date [Mon Jun 12 18:22:38 CST 2017]; parent: Root WebApplicationContext
    和 WebApplicationContext for namespace 'OOXXappServlet-servlet': startup date [Mon Jun 12 18:22:41 CST 2017]; parent: Root WebApplicationContext 

    也就是说,同时初始化了2个MVC上下文,这是不合理的啊;所以,应该算是一个Bug吧!

  • 相关阅读:
    Union用法及说明:
    SQL用了Union后的排序问题
    10条PHP编程习惯助你找工作
    PHP性能分析工具xhprof的安装使用与注意事项
    11款数据分析工具(附体验网址)
    Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
    ldd显示可执行模块的dependenc
    计算机图形学,三维框架设计
    dnat,snat
    百度识图API
  • 原文地址:https://www.cnblogs.com/andypeker/p/6994585.html
Copyright © 2011-2022 走看看