Mercurial Hosting > luan
comparison src/org/eclipse/jetty/server/handler/ContextHandler.java @ 989:900e5b8ccd19
remove useless listeners
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Mon, 17 Oct 2016 05:39:54 -0600 |
| parents | 13beba0c127f |
| children | 688c39c50ee3 |
comparison
equal
deleted
inserted
replaced
| 988:13beba0c127f | 989:900e5b8ccd19 |
|---|---|
| 68 import org.eclipse.jetty.server.Handler; | 68 import org.eclipse.jetty.server.Handler; |
| 69 import org.eclipse.jetty.server.HandlerContainer; | 69 import org.eclipse.jetty.server.HandlerContainer; |
| 70 import org.eclipse.jetty.server.Request; | 70 import org.eclipse.jetty.server.Request; |
| 71 import org.eclipse.jetty.server.Server; | 71 import org.eclipse.jetty.server.Server; |
| 72 import org.eclipse.jetty.util.AttributesMap; | 72 import org.eclipse.jetty.util.AttributesMap; |
| 73 import org.eclipse.jetty.util.LazyList; | |
| 74 import org.eclipse.jetty.util.StringUtil; | 73 import org.eclipse.jetty.util.StringUtil; |
| 75 import org.eclipse.jetty.util.TypeUtil; | 74 import org.eclipse.jetty.util.TypeUtil; |
| 76 import org.eclipse.jetty.util.URIUtil; | 75 import org.eclipse.jetty.util.URIUtil; |
| 77 import org.eclipse.jetty.util.component.AggregateLifeCycle; | 76 import org.eclipse.jetty.util.component.AggregateLifeCycle; |
| 78 import org.eclipse.jetty.util.component.Dumpable; | 77 import org.eclipse.jetty.util.component.Dumpable; |
| 129 private Resource _baseResource; | 128 private Resource _baseResource; |
| 130 private MimeTypes _mimeTypes; | 129 private MimeTypes _mimeTypes; |
| 131 private Map<String, String> _localeEncodingMap; | 130 private Map<String, String> _localeEncodingMap; |
| 132 private String[] _welcomeFiles; | 131 private String[] _welcomeFiles; |
| 133 private String[] _vhosts; | 132 private String[] _vhosts; |
| 134 private EventListener[] _eventListeners; | |
| 135 private Logger _logger; | 133 private Logger _logger; |
| 136 private boolean _allowNullPathInfo; | 134 private boolean _allowNullPathInfo; |
| 137 private int _maxFormKeys = Integer.getInteger("org.eclipse.jetty.server.Request.maxFormKeys",-1).intValue(); | 135 private int _maxFormKeys = Integer.getInteger("org.eclipse.jetty.server.Request.maxFormKeys",-1).intValue(); |
| 138 private int _maxFormContentSize = Integer.getInteger("org.eclipse.jetty.server.Request.maxFormContentSize",-1).intValue(); | 136 private int _maxFormContentSize = Integer.getInteger("org.eclipse.jetty.server.Request.maxFormContentSize",-1).intValue(); |
| 139 private boolean _compactPath = false; | 137 private boolean _compactPath = false; |
| 140 private boolean _aliasesAllowed = false; | 138 private boolean _aliasesAllowed = false; |
| 141 | 139 |
| 142 private Object _contextListeners; | |
| 143 private Object _contextAttributeListeners; | |
| 144 private Object _requestListeners; | |
| 145 private Object _requestAttributeListeners; | |
| 146 private Object _durableListeners; | |
| 147 private Map<String, Object> _managedAttributes; | 140 private Map<String, Object> _managedAttributes; |
| 148 private String[] _protectedTargets; | 141 private String[] _protectedTargets; |
| 149 private final CopyOnWriteArrayList<AliasCheck> _aliasChecks = new CopyOnWriteArrayList<ContextHandler.AliasCheck>(); | 142 private final CopyOnWriteArrayList<AliasCheck> _aliasChecks = new CopyOnWriteArrayList<ContextHandler.AliasCheck>(); |
| 150 | 143 |
| 151 private boolean _shutdown = false; | 144 private boolean _shutdown = false; |
| 437 * @see javax.servlet.ServletContext#getServletContextName() | 430 * @see javax.servlet.ServletContext#getServletContextName() |
| 438 */ | 431 */ |
| 439 public String getDisplayName() | 432 public String getDisplayName() |
| 440 { | 433 { |
| 441 return _displayName; | 434 return _displayName; |
| 442 } | 435 } |
| 443 | |
| 444 /* ------------------------------------------------------------ */ | |
| 445 public EventListener[] getEventListeners() | |
| 446 { | |
| 447 return _eventListeners; | |
| 448 } | |
| 449 | |
| 450 /* ------------------------------------------------------------ */ | |
| 451 /** | |
| 452 * Set the context event listeners. | |
| 453 * | |
| 454 * @param eventListeners | |
| 455 * the event listeners | |
| 456 * @see ServletContextListener | |
| 457 * @see ServletContextAttributeListener | |
| 458 * @see ServletRequestListener | |
| 459 * @see ServletRequestAttributeListener | |
| 460 */ | |
| 461 public void setEventListeners(EventListener[] eventListeners) | |
| 462 { | |
| 463 _contextListeners = null; | |
| 464 _contextAttributeListeners = null; | |
| 465 _requestListeners = null; | |
| 466 _requestAttributeListeners = null; | |
| 467 | |
| 468 _eventListeners = eventListeners; | |
| 469 | |
| 470 for (int i = 0; eventListeners != null && i < eventListeners.length; i++) | |
| 471 { | |
| 472 EventListener listener = _eventListeners[i]; | |
| 473 | |
| 474 if (listener instanceof ServletContextListener) | |
| 475 _contextListeners = LazyList.add(_contextListeners,listener); | |
| 476 | |
| 477 if (listener instanceof ServletContextAttributeListener) | |
| 478 _contextAttributeListeners = LazyList.add(_contextAttributeListeners,listener); | |
| 479 | |
| 480 if (listener instanceof ServletRequestListener) | |
| 481 _requestListeners = LazyList.add(_requestListeners,listener); | |
| 482 | |
| 483 if (listener instanceof ServletRequestAttributeListener) | |
| 484 _requestAttributeListeners = LazyList.add(_requestAttributeListeners,listener); | |
| 485 } | |
| 486 } | |
| 487 | |
| 488 /* ------------------------------------------------------------ */ | |
| 489 /** | |
| 490 * Add a context event listeners. | |
| 491 * | |
| 492 * @see ServletContextListener | |
| 493 * @see ServletContextAttributeListener | |
| 494 * @see ServletRequestListener | |
| 495 * @see ServletRequestAttributeListener | |
| 496 */ | |
| 497 public void addEventListener(EventListener listener) | |
| 498 { | |
| 499 //Only listeners added before the context starts last through a stop/start cycle | |
| 500 if (!(isStarted() || isStarting())) | |
| 501 _durableListeners = LazyList.add(_durableListeners, listener); | |
| 502 | |
| 503 setEventListeners((EventListener[])LazyList.addToArray(getEventListeners(),listener,EventListener.class)); | |
| 504 } | |
| 505 | |
| 506 | |
| 507 /** | |
| 508 * Apply any necessary restrictions on a programmatically added | |
| 509 * listener. | |
| 510 * | |
| 511 * Superclasses should implement. | |
| 512 * | |
| 513 * @param listener | |
| 514 */ | |
| 515 public void restrictEventListener (EventListener listener) | |
| 516 { | |
| 517 } | |
| 518 | |
| 519 | |
| 520 | 436 |
| 521 /* ------------------------------------------------------------ */ | 437 /* ------------------------------------------------------------ */ |
| 522 /** | 438 /** |
| 523 * @return true if this context is accepting new requests | 439 * @return true if this context is accepting new requests |
| 524 */ | 440 */ |
| 663 checkManagedAttribute(name,value); | 579 checkManagedAttribute(name,value); |
| 664 } | 580 } |
| 665 } | 581 } |
| 666 | 582 |
| 667 super.doStart(); | 583 super.doStart(); |
| 668 | |
| 669 // Context listeners | |
| 670 if (_contextListeners != null) | |
| 671 { | |
| 672 ServletContextEvent event = new ServletContextEvent(_scontext); | |
| 673 for (int i = 0; i < LazyList.size(_contextListeners); i++) | |
| 674 { | |
| 675 callContextInitialized(((ServletContextListener)LazyList.get(_contextListeners, i)), event); | |
| 676 } | |
| 677 } | |
| 678 } | 584 } |
| 679 | 585 |
| 680 /* ------------------------------------------------------------ */ | 586 /* ------------------------------------------------------------ */ |
| 681 public void callContextInitialized (ServletContextListener l, ServletContextEvent e) | 587 public void callContextInitialized (ServletContextListener l, ServletContextEvent e) |
| 682 { | 588 { |
| 712 old_classloader = current_thread.getContextClassLoader(); | 618 old_classloader = current_thread.getContextClassLoader(); |
| 713 current_thread.setContextClassLoader(_classLoader); | 619 current_thread.setContextClassLoader(_classLoader); |
| 714 } | 620 } |
| 715 | 621 |
| 716 super.doStop(); | 622 super.doStop(); |
| 717 | |
| 718 // Context listeners | |
| 719 if (_contextListeners != null) | |
| 720 { | |
| 721 ServletContextEvent event = new ServletContextEvent(_scontext); | |
| 722 for (int i = LazyList.size(_contextListeners); i-- > 0;) | |
| 723 { | |
| 724 ((ServletContextListener)LazyList.get(_contextListeners,i)).contextDestroyed(event); | |
| 725 } | |
| 726 } | |
| 727 | |
| 728 //remove all non-durable listeners | |
| 729 setEventListeners((EventListener[])LazyList.toArray(_durableListeners, EventListener.class)); | |
| 730 _durableListeners = null; | |
| 731 | 623 |
| 732 Enumeration e = _scontext.getAttributeNames(); | 624 Enumeration e = _scontext.getAttributeNames(); |
| 733 while (e.hasMoreElements()) | 625 while (e.hasMoreElements()) |
| 734 { | 626 { |
| 735 String name = (String)e.nextElement(); | 627 String name = (String)e.nextElement(); |
| 944 { | 836 { |
| 945 final DispatcherType dispatch = baseRequest.getDispatcherType(); | 837 final DispatcherType dispatch = baseRequest.getDispatcherType(); |
| 946 final boolean new_context = baseRequest.takeNewContext(); | 838 final boolean new_context = baseRequest.takeNewContext(); |
| 947 try | 839 try |
| 948 { | 840 { |
| 949 if (new_context) | |
| 950 { | |
| 951 // Handle the REALLY SILLY request events! | |
| 952 if (_requestAttributeListeners != null) | |
| 953 { | |
| 954 final int s = LazyList.size(_requestAttributeListeners); | |
| 955 for (int i = 0; i < s; i++) | |
| 956 baseRequest.addEventListener(((EventListener)LazyList.get(_requestAttributeListeners,i))); | |
| 957 } | |
| 958 | |
| 959 if (_requestListeners != null) | |
| 960 { | |
| 961 final int s = LazyList.size(_requestListeners); | |
| 962 final ServletRequestEvent sre = new ServletRequestEvent(_scontext,request); | |
| 963 for (int i = 0; i < s; i++) | |
| 964 ((ServletRequestListener)LazyList.get(_requestListeners,i)).requestInitialized(sre); | |
| 965 } | |
| 966 } | |
| 967 | |
| 968 if (DispatcherType.REQUEST.equals(dispatch) && isProtectedTarget(target)) | 841 if (DispatcherType.REQUEST.equals(dispatch) && isProtectedTarget(target)) |
| 969 throw new HttpException(HttpServletResponse.SC_NOT_FOUND); | 842 throw new HttpException(HttpServletResponse.SC_NOT_FOUND); |
| 970 | 843 |
| 971 // start manual inline of nextHandle(target,baseRequest,request,response); | 844 // start manual inline of nextHandle(target,baseRequest,request,response); |
| 972 // noinspection ConstantIfStatement | 845 // noinspection ConstantIfStatement |
| 981 catch (HttpException e) | 854 catch (HttpException e) |
| 982 { | 855 { |
| 983 LOG.debug("",e); | 856 LOG.debug("",e); |
| 984 baseRequest.setHandled(true); | 857 baseRequest.setHandled(true); |
| 985 response.sendError(e.getStatus(),e.getReason()); | 858 response.sendError(e.getStatus(),e.getReason()); |
| 986 } | |
| 987 finally | |
| 988 { | |
| 989 // Handle more REALLY SILLY request events! | |
| 990 if (new_context) | |
| 991 { | |
| 992 if (_requestListeners != null) | |
| 993 { | |
| 994 final ServletRequestEvent sre = new ServletRequestEvent(_scontext,request); | |
| 995 for (int i = LazyList.size(_requestListeners); i-- > 0;) | |
| 996 ((ServletRequestListener)LazyList.get(_requestListeners,i)).requestDestroyed(sre); | |
| 997 } | |
| 998 | |
| 999 if (_requestAttributeListeners != null) | |
| 1000 { | |
| 1001 for (int i = LazyList.size(_requestAttributeListeners); i-- > 0;) | |
| 1002 baseRequest.removeEventListener(((EventListener)LazyList.get(_requestAttributeListeners,i))); | |
| 1003 } | |
| 1004 } | |
| 1005 } | 859 } |
| 1006 } | 860 } |
| 1007 | 861 |
| 1008 /* ------------------------------------------------------------ */ | 862 /* ------------------------------------------------------------ */ |
| 1009 /* | 863 /* |
| 1880 | 1734 |
| 1881 if (value == null) | 1735 if (value == null) |
| 1882 _contextAttributes.removeAttribute(name); | 1736 _contextAttributes.removeAttribute(name); |
| 1883 else | 1737 else |
| 1884 _contextAttributes.setAttribute(name,value); | 1738 _contextAttributes.setAttribute(name,value); |
| 1885 | |
| 1886 if (_contextAttributeListeners != null) | |
| 1887 { | |
| 1888 ServletContextAttributeEvent event = new ServletContextAttributeEvent(_scontext,name,old_value == null?value:old_value); | |
| 1889 | |
| 1890 for (int i = 0; i < LazyList.size(_contextAttributeListeners); i++) | |
| 1891 { | |
| 1892 ServletContextAttributeListener l = (ServletContextAttributeListener)LazyList.get(_contextAttributeListeners,i); | |
| 1893 | |
| 1894 if (old_value == null) | |
| 1895 l.attributeAdded(event); | |
| 1896 else if (value == null) | |
| 1897 l.attributeRemoved(event); | |
| 1898 else | |
| 1899 l.attributeReplaced(event); | |
| 1900 } | |
| 1901 } | |
| 1902 } | 1739 } |
| 1903 | 1740 |
| 1904 /* ------------------------------------------------------------ */ | 1741 /* ------------------------------------------------------------ */ |
| 1905 /* | 1742 /* |
| 1906 * @see javax.servlet.ServletContext#removeAttribute(java.lang.String) | 1743 * @see javax.servlet.ServletContext#removeAttribute(java.lang.String) |
| 1914 { | 1751 { |
| 1915 // Set it on the handler | 1752 // Set it on the handler |
| 1916 return; | 1753 return; |
| 1917 } | 1754 } |
| 1918 | 1755 |
| 1919 Object old_value = _contextAttributes.getAttribute(name); | |
| 1920 _contextAttributes.removeAttribute(name); | 1756 _contextAttributes.removeAttribute(name); |
| 1921 if (old_value != null) | |
| 1922 { | |
| 1923 if (_contextAttributeListeners != null) | |
| 1924 { | |
| 1925 ServletContextAttributeEvent event = new ServletContextAttributeEvent(_scontext,name,old_value); | |
| 1926 | |
| 1927 for (int i = 0; i < LazyList.size(_contextAttributeListeners); i++) | |
| 1928 ((ServletContextAttributeListener)LazyList.get(_contextAttributeListeners,i)).attributeRemoved(event); | |
| 1929 } | |
| 1930 } | |
| 1931 } | 1757 } |
| 1932 | 1758 |
| 1933 /* ------------------------------------------------------------ */ | 1759 /* ------------------------------------------------------------ */ |
| 1934 /* | 1760 /* |
| 1935 * @see javax.servlet.ServletContext#getServletContextName() | 1761 * @see javax.servlet.ServletContext#getServletContextName() |
