2013-02-01 16 views
32

Ho questo nel mio documento web.xml. Sto cercando di avere una lista di benvenuto, quindi non ho più bisogno di digitare il percorso per la home page. Ma ogni volta che si fa clic sull'applicazione nella mia pagina Tomcat viene visualizzata La risorsa richiesta non è disponibile.Come configurare l'elenco dei file di benvenuto in web.xml

<listener> 
    <listener-class>web.Init</listener-class> 
</listener> 

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>index</servlet-name> 
    <servlet-class>web.IndexServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>index</servlet-name> 
    <url-pattern>/index</url-pattern> 
</servlet-mapping> 

mio servlet per la pagina JSP

package web; 

import java.io.IOException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.log4j.Logger; 

public class IndexServlet extends HttpServlet 
{ 
    private Logger logger = Logger.getLogger(this.getClass()); 
    private RequestDispatcher jsp; 

    public void init(ServletConfig config) throws ServletException 
    { 
     ServletContext context = config.getServletContext(); 
     jsp = context.getRequestDispatcher("/WEB-INF/jsp/index.jsp"); 
    } 

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
    { 
     logger.debug("doGet()"); 
     jsp.forward(req, resp); 
    } 
} 

Perché è che ancora non funziona? Ho ancora bisogno di digitare il/indice nel mio url ... Come fare questo in modo corretto?

+0

che cosa stai entrando nel tuo URL, hai una pagina index.html esistente ?? –

+0

Ad esempio, ho fatto clic sulla mia webapp in tomcat manager. Visualizzerà l'url http: // localhost: 8080/myProj/all'inizio. Quindi ho ancora bisogno di digitare l'indice dopo quell'URL per aprire la mia pagina di benvenuto. Cosa strizzare con questo? – PeterJohn

+0

il file di benvenuto è [root contesto] /index.jsp Il servlet non verrà chiamato per la pagina di benvenuto. – DwB

risposta

51

È necessario inserire il file JSP in /index.jsp anziché in /WEB-INF/jsp/index.jsp. A proposito, l'intero servlet è superfluo.

WebContent 
|-- META-INF 
|-- WEB-INF 
| `-- web.xml 
`-- index.jsp 

Se siete assolutamente positivo che è necessario richiamare un servlet in questo modo strano, allora si dovrebbe mappare su un modello di URL di /index.jsp invece di /index. Devi solo cambiarlo per ottenere il dispatcher della richiesta da request anziché da config e liberarti dell'intero metodo init().

Nel caso in cui in realtà intenzione di avere una "home page servlet" (e quindi non un file di benvenuto — che ha uno scopo completamente diverso, vale a dire il file di default che Sould essere servito quando viene richiesta una cartella, che quindi non è specificamente la cartella radice), allora dovresti mappare il servlet sul pattern URL stringa vuota.

<servlet-mapping> 
    <servlet-name>index</servlet-name> 
    <url-pattern></url-pattern> 
</servlet-mapping> 

Vedere anche Difference between/and /* in servlet mapping url pattern.

+0

Ho già il mio index.jsp sotto la mia cartella jsp – PeterJohn

+6

Lo si ha nella cartella '/ WEB-INF/jsp/index.jsp'. Non ce l'hai nella cartella principale come '/ index.jsp'. L'anwer è di metterlo nella cartella root, allo stesso livello della cartella '/ WEB-INF'. – BalusC

+2

Ho provato a cambiarlo ma ho ancora lo stesso problema. Risorsa non disponibile – PeterJohn

17

Credo che quello che si vuole è la vostra servlet indice di agire come la pagina di benvenuto, quindi passare a:

<welcome-file-list> 
    <welcome-file>index</welcome-file> 
</welcome-file-list> 

In modo che verrà utilizzato il servlet indice. Nota, avrai bisogno di un contenitore 2.4 della servlet per poterlo fare.

Nota anche, @BalusC ottiene il mio voto, perché il proprio servlet indice è superfluo.

-2

Si basa su di quale file si sta tentando di accedere a tali file.

Se si trova nella stessa cartella in cui si trova il file del progetto di lavoro, è possibile utilizzare solo il nome del file. non c'è bisogno di percorso.

Se è in un'altra cartella che si trova sotto la stessa cartella principale del file di progetto di lavoro, allora si può utilizzare la posizione come nel seguente /javascript/sample.js

Nel tuo esempio, se si sta cercando di accedere al file js dal vostro file HTML è possibile utilizzare il seguente percorso

../javascript/sample.js

il prefisso ../ Andrà alla cartella principale del file (cartella viaggio verso l'alto)

1

ho visto una bella soluzione in questo stackoverflow link che può aiutare i lettori del defulat movimentazione problema servlet utilizzando lo schema URL stringa vuota "":

@WebServlet("") 

o

<servlet-mapping> 
    <servlet-name>yourHomeServlet</servlet-name> 
    <url-pattern></url-pattern> <!-- Yes, empty string! --> 
</servlet-mapping>