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吧!

  • 相关阅读:
    [转]cmd-bat批处理命令延时方法
    chrome pyv8下载
    win10锁屏壁纸路径
    MongoDB系列—— Window 搭建Mongodb 集群
    JS判断所有IE浏览器所有版本
    网页中引用优酷视频默认自动播放超清
    SQL 还原或备份失败数据库变成单个用户模式无法访问
    百度webuploader 上传演示例子
    SQL Server 如何更改SQL Server和windows身份方式验证
    已经阻止此发布者在你的计算机上运行软件
  • 原文地址:https://www.cnblogs.com/andypeker/p/6994585.html
Copyright © 2011-2022 走看看