2010-05-25 15 views

cevap

25

Filtreler, webapp'ın başlangıcında, web.xml'da tanımlandığı gibi sırayla her zaman başlatılır.

Servletler varsayılan olarak yalnızca ilk URL istekleri sırasında url-pattern'lerinde başlatılır. Ancak, bunları önceliklerini belirtebileceğiniz <load-on-startup> girişlerini kullanarak webapp başlangıcı sırasında başlatmayı da yapılandırabilirsiniz. Daha sonra öncelik sırasına yüklenirler.
E.g. Aynı öncelik sırasına daha servlet'ler varsa

<servlet> 
    <servlet-name>myServlet</servlet-name> 
    <servlet-class>mypackage.MyServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

, daha sonra bu servlet için yükleme sırası belirsizdir ve keyfi olabilir. Servletler, filtrelerinin başlatılmasından sonra herhangi bir şekilde başlatılmışlardır, ancak filtrelerin çağrılmasından önce . web.xml yılında '' ile tüm servlet için Filter.init()

  • : istek için geçerli tüm filtreler için Servlet.init()
  • : Tüm filtreler için

  • +1

    Web.xml'de başlangıçta yükleme ayarlamayı ayarlamış olsaydım, herhangi bir filtrenin doFilter'ından önce bu servlet'in init() çağrıldığından emin olabilir miyim? – martsraits

    +0

    Evet, bunu içeride düzenledim. Ancak bu, "yükleme sırasında yükleme" ne bakmaksızın geçerlidir. – BalusC

    +0

    +1 oldukça yararlı bir thx. – kukudas

    6
    1. uygulanabilir servlet zaten başlangıç ​​durumuna getirmez Filter.doFilter()
    2. ise : Servlet.init()
    3. Uygulanabilir servlet için 10
    4. : Servlet.service()
    +1

    BalusC'un (4) 'ünüzü daha önce (3) olan cevabıyla çelişir. –

    +0

    (2), web.xml'de başlangıçta yükleme olan sunucu uygulamaları içindir. (4) ilk istekte sunucuya başlatılan servletler içindir. – downeyt

    6

    Sadece bir yan not - Ben Filter.init() yöntemleri rasgele (HashMap üzerinde yineleme) çalıştırmak olduğunu tomcat (7.0.30) ile yaşadı.

    +0

    Bu bir yorum olmalı. –

    +0

    Evet Biliyorum, ama yeterince itibarım olmadığı için yorum yapamam. Ama kabul edilen cevabın bu yönde yanlış göründüğünden bahsetmeye değer olduğunu düşündüm (bu, Filter.init() yönteminin çağrısının genellikle tanımsız olduğu sırasına göre değişir) –

    -1

    Dikkatli olun. Ben aynı örnekte Filter.init() ve Filter.doFilter() eşzamanlı çağırma tanık oldum. Hala şok oldum ve iyileşemiyorum. Onun adı Jetty.