2013-05-16 13 views
7

To jest szybkie pytanie, ale nie mogłem znaleźć szybkiej odpowiedzi. Teraz mam BaseServlet serwletu, gdy żądanie użytkownika któregokolwiek z poniższym adresem:Servlet @WebServlet urlPatterns

host 
host/ 
host/BaseServlet 

Należy zawsze odwoływać się do tego samego serwletu i przekierowanie do strony głównej.

Kiedy ustawić

@WebServlet({"/BaseServlet", ""}) 

host/ 
host/BaseServlet 

działa tylko

Jeżeli ustawić

@WebServlet({"/BaseServlet", "", "/"}) 

BaseServlet zostanie wezwany ciągle w pętli ...

Dlaczego?

Edycja: BaseServlet wykonuje przekierowanie do pliku index.html ukrytego w folderze WEB-INF i to wszystko.

getServletContext().getRequestDispatcher("/WEB-INF/index.html").forward(request,response); 

Specyfikacja serwletu mówi "Ciąg zawierający tylko znak/wskazuje" domyślny "serwlet aplikacji." Dlatego chcę, aby baza BaseServlet była moim domyślnym. Dlaczego to nie działa?

+0

Co robisz z odpowiedzią? –

+0

Wykonaj wstępne przetwarzanie, a następnie odpowiedz ze strony internetowej. – kakacii

+0

Strona ta może spowodować ponowne uruchomienie serwletu w pętli, o której mówisz. Pokaż nam. –

Odpowiedz

2

Edit:

Jeśli chcesz wstępnego procesu można użyć filtra z url-pattern „/ *” i dyspozytor zestaw do żądania sposób ignoruje przodu.

Ostatnia wartość "/" oznacza wszystkie żądania.

Zamówienie dyskusja na: http://www.coderanch.com/t/366340/Servlets/java/servlet-mapping-url-pattern

A wewnątrz serwletu innym przodu wniosku o index.html który jest generowany jest również przechwytywane przez serwlet.

Jeśli spróbujesz @WebServlet ({"/ BaseServlet", "/"}), który jest taki sam jak @WebServlet ({"/ BaseServlet", "", "/"}) spowoduje ten sam błąd.

Można to sprawdzić, wpisując następującą informację wyjściową w serwletu:

System.out.println(req.getRequestURL()); 
+0

Dzięki. Przepraszam, że nie odpowiedziałem na czas, ale tak naprawdę nie rozumiem, o czym mówisz. Specyfikacja serwletu mówi: "Ciąg zawierający tylko znak/wskazuje" domyślny "serwlet aplikacji." Dlatego chcę, aby baza BaseServlet była moim domyślnym. Dlaczego to nie działa? – kakacii

9
  1. Jak można stwierdzić w Q, jeśli chcesz, co następuje:

    host/ 
    host/BaseServlet 
    

    Korzystając

    @WebServlet({"/BaseServlet", ""}) 
    
  2. Jeśli wasz nt następujące:

    host 
    

    Dodaj do tego pliku powitalny (nie można specifiy plików powitalne używając adnotacji)

    <welcome-file-list> 
        <welcome-file>/BaseServlet</welcome-file> 
    </welcome-file-list> 
    
  3. Aplet Spec mówi „Ciąg zawierający jedynie"/"znak wskazuje" domyślny "serwlet aplikacji."

    ale mówi prosto potem

    W tym przypadku ścieżka aplet jest żądanie URI minus ścieżka kontekstu i informacji ścieżka jest null.

    Innymi słowy, jeśli adres URL jest

    host 
    

    następnie ścieżka aplet będzie

    "" (empty string) 
    

    więc trzeba będzie powitalny listę plików (ale index.htm [l ] i index.jsp w katalogu webapp, a nie WEB-INF, są zawarte domyślnie jako początkowa lista plików powitania)

Powiązane problemy