web-dev-qa-db-fra.com

Comment configurer la liste de fichiers de bienvenue dans web.xml

J'ai ceci dans mon document web.xml. J'essaie d'avoir une liste de bienvenue, donc je n'ai plus besoin de taper le chemin d'accès à la page d'accueil. Mais chaque fois qu'un utilisateur clique sur l'application dans ma page Tomcat, elle affiche: La ressource demandée n'est pas disponible.

<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>

Mon servlet pour la page 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); 
    }
}

Pourquoi est-ce que cela ne fonctionne toujours pas? J'ai encore besoin de taper le/index dans mon URL ... Comment le faire correctement?

37
PeterJohn

Vous devez placer le fichier JSP dans /index.jsp Au lieu de /WEB-INF/jsp/index.jsp. De cette façon, toute la servlet est superflous au fait.

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

Si vous êtes absolument convaincu que vous devez invoquer une servlet de cette manière étrange, vous devez alors la mapper sur un modèle d'URL de /index.jsp Au lieu de /index. Il vous suffit de le changer pour obtenir le répartiteur de demandes de request au lieu de config et vous débarrasser de la méthode entière init().

Au cas où vous avez réellement l'intention d'avoir un "servlet de page d'accueil" (et donc pas un fichier de bienvenue - qui a une fonction totalement différente, à savoir le fichier par défaut qui devrait être servi lorsqu'un dossier est demandé, ce qui n’est donc pas spécifiquement le dossier racine), vous devriez alors mapper le servlet sur le modèle d’URL de chaîne vide.

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

Voir aussi Différence entre/et/* dans le modèle d'URL de mappage de servlet .

56
BalusC

Je suppose que ce que vous voulez, c'est que votre servlet d'index serve de page de bienvenue. Changez donc pour:

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

Pour que le servlet d'index soit utilisé. Notez que vous aurez besoin d’un conteneur de spécification de servlet 2.4 pour pouvoir le faire.

Notez également que @BalusC obtient mon vote, car votre servlet d'index est superflu.

23
beny23

Ceci est ma façon de configurer Servlet en tant que page d'accueil.

Je partage pour qui concerne.

web.xml

  <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Demo</servlet-name>
        <servlet-class>servlet.Demo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo</servlet-name>
        <url-pattern></url-pattern>
    </servlet-mapping>

Classe de servlet

@WebServlet(name = "/demo")
public class Demo extends HttpServlet {
   public void doGet(HttpServletRequest req, HttpServletResponse res)
     throws ServletException, IOException  {
       RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
   }
}
1
Hien Nguyen

J'ai vu une solution intéressante dans ce lien stackoverflow qui pourrait aider les lecteurs du problème de gestion des servlets defulat en utilisant le modèle d'URL de chaîne vide "":

@WebServlet("")

ou

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