2013-05-16 16 views
7

Questa è una domanda veloce ma non sono riuscito a trovare una risposta rapida. Ora ho un BaseServlet servlet, quando richiesta dell'utente qualsiasi seguente URL:Servlet @WebServlet urlPatterns

host 
host/ 
host/BaseServlet 

Si dovrebbe sempre fare riferimento alla stessa servlet e reindirizzare alla homepage.

Quando ho creato

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

Solo

host/ 
host/BaseServlet 

funziona

Se ho impostato

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

Il BaseServlet verrà richiesto continuamente in loop ...

Perché?

Modifica: BaseServlet esegue l'inoltro all'indice.html nascosto nella cartella WEB-INF e il gioco è fatto.

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

Le specifiche della servlet indicano "Una stringa contenente solo il carattere/indica il servlet" predefinito "dell'applicazione." Quindi voglio che il BaseServlet sia il mio default. Perché non funziona?

+0

Cosa fai con la risposta? –

+0

Esegui pre-elaborazione e quindi risposta con una pagina Web. – kakacii

+0

Questa pagina Web potrebbe rendere la rielaborazione del servlet nel ciclo di cui hai parlato. Mostraci. –

risposta

2

Edit:

Se si vuole pre-processo quindi è possibile utilizzare il filtro con url-pattern "/ *" e dispatcher set di richiedere che modo si ignorerà in avanti.

Ultimo valore "/" indica tutte le richieste.

Checkout discussione: http://www.coderanch.com/t/366340/Servlets/java/servlet-mapping-url-pattern

E dentro Servlet un'altra richiesta avanti per index.html viene generato che viene intercettato anche dal servlet.

Se si prova @WebServlet ({"/ BaseServlet", "/"}), che è lo stesso di @WebServlet ({"/ BaseServlet", "", "/"}) restituirà lo stesso errore.

È possibile controllare questo digitando seguente dichiarazione uscita in servlet:

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

Grazie. Scusa se non ho risposto in tempo ma non capisco cosa stai dicendo. La specifica del servlet dice "Una stringa contenente solo il carattere/indica il servlet" predefinito "dell'applicazione." Quindi voglio che il BaseServlet sia il mio default. Perché non funziona? – kakacii

9
  1. Come affermate nel vostro Q, se si desidera che il seguente:

    host/ 
    host/BaseServlet 
    

    Usa

    @WebServlet({"/BaseServlet", ""}) 
    
  2. Se si wa Nt il seguente:

    host 
    

    Aggiungi questo al vostro file di benvenuto (non è possibile specifiy file di benvenuto utilizzando le annotazioni)

    <welcome-file-list> 
        <welcome-file>/BaseServlet</welcome-file> 
    </welcome-file-list> 
    
  3. Le specifiche servlet dice "Una stringa contenente solo il '/'character indica il servlet "predefinito" dell'applicazione. "

    Ma si dice subito dopo

    In questo caso il percorso servlet è la richiesta URI meno il percorso del contesto e informazioni percorso è nullo.

    In altre parole, se l'URL è

    host 
    

    allora il percorso servlet sarà

    "" (empty string) 
    

    quindi avrete bisogno di un elenco di file di benvenuto (ma index.htm [l ] e index.jsp nella directory webapp, non WEB-INF, sono inclusi implicitamente come lista di file di benvenuto iniziale)