2015-06-12 10 views
5

Aktualnie korzystam z Tomcat 7. Chcę wdrożyć/zainstalować serwlet, który zostanie załadowany do każdej aplikacji internetowej w ich kontekście. Szukam rozwiązania, które nie wiąże się z dodaniem serwletu do każdej wojny webapp. czy to możliwe?Jak zainstalować serwlet w kontenerze tomcat i załadować go do kontekstu każdej aplikacji internetowej?

Docelowo chcę, aby obsługiwała żądania na wspólnej ścieżce podrzędnej kontekstowego katalogu głównego każdej aplikacji.

myślałem mógłbym załadować uwagami serwletu tomcat wspólnego z classloader, ale nie mogłem dostać to do pracy. Na przykład ten sam adnotowany serwlet działał podczas wojny, ale nie we wspólnym ładowaniu klasy.

@WebServlet(
    description = "Says Hello", 
    urlPatterns = { "/HelloServlet" }) 
public class HelloServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
     // log hello 
    } 
} 

Dzięki za pomoc.

+1

Stwórz trzecią aplikację, aby udostępnić serwlet zarówno;) – Stefan

+0

@StefanLindenberg możesz rozwinąć swój komentarz? Nie wiem, w jaki sposób aplikacja może dostarczyć serwlet w kontekście innej aplikacji internetowej. Może podać odpowiedź ... – successhawk

+0

Jeśli chcesz udostępnić swój serwlet pod kilkoma ścieżkami, możesz zainstalować przekierowania do jego rzeczywistej (i jedynej) lokalizacji. –

Odpowiedz

0

To, co opisujesz, nie jest dokładnie zgodne z logiką Serwletów.

Jeśli chcesz używać usługi/biblioteki z 2 różnych aplikacji w Tomcat, możesz dodać bibliotekę jako bibliotekę współdzieloną w Tomcat. Następnie będziesz mógł korzystać z tej biblioteki z serwletów aplikacji. Jeśli chcesz to osiągnąć, musisz dodać słoik w polu $CATALINA_HOME/shared/lib, a następnie edytować $CATALINA_HOME/conf/catalina.properties, aby dodać właściwość {catalina.home}/mylibs/*.jar w usłudze. Następnie będziesz mógł korzystać z biblioteki w różnych serwletach aplikacji.

To jednak różni się od tego, co opisujesz. W rzeczywistości to, co opisujesz, jest niewykonalne w Tomcacie, ponieważ każda aplikacja internetowa ma swój własny ApplicationContext. Tak więc kontekst aplikacyjny aplikacji WebappA będzie http://host/webappA i kontekstem aplikacji będzie http://host/webappB. Tak więc, jeśli chcesz mieć aplet poza tymi 2 aplikacjami, wówczas ten serwlet będzie należeć do innego kontekstu aplikacji. Tak więc, nie będzie możliwe uzyskanie dostępu do tego serwletu przez jedną ze ścieżek http://host/webappA/common, http://host/webappB/common, które należą do poprzedniego kontekstu aplikacji.

+0

Dzięki. Jestem zaznajomiony z common.loader, ale czy istnieje sposób na załadowanie "udostępnionego" serwletu? Myślałem, że będzie to możliwe, ponieważ adresy URL są powiązane z kontekstowym katalogiem głównym aplikacji i miałem nadzieję, że zostanie on załadowany do każdego ApplicationContext każdego appappa. Użycie dostarczonego serwletu jako przykładu: http: // host/webappA/HelloServlet i http: // host/webappB/HelloServlet. czego mi brakuje? – successhawk

+0

To właśnie wcześniej opisałem. Jedynym sposobem na to jest dodanie serwletu w obu aplikacjach (aby był dostępny w ich kontekstach). Jedynym sposobem na "udostępnienie" jego funkcjonalności jest dodanie go jako udostępnionego zasobu bibliotecznego i używanie go w ten sposób ze swoich aplikacji. – Dimos

Powiązane problemy