web-dev-qa-db-de.com

So konfigurieren Sie die Liste der Willkommensdateien in der Datei web.xml

Ich habe dies in meinem web.xml-Dokument. Ich versuche, eine Willkommensliste zu haben, damit ich den Pfad für die Homepage nicht mehr eingeben muss. Bei jedem Klick auf die Anwendung auf meiner Tomcat-Seite wird jedoch angezeigt, dass die angeforderte Ressource nicht verfügbar ist.

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

Mein Servlet für die JSP-Seite

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); 
    }
}

Warum funktioniert es immer noch nicht? Ich muss immer noch den/index in meine URL eingeben ... Wie mache ich das richtig?

37
PeterJohn

Sie müssen die JSP-Datei in /index.jsp Anstatt in /WEB-INF/jsp/index.jsp Einfügen. Auf diese Weise ist das ganze Servlet übrigens überflüssig.

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

Wenn Sie sich absolut sicher sind, dass Sie ein Servlet auf diese seltsame Weise aufrufen müssen, sollten Sie es einem URL-Muster von /index.jsp Anstelle von /index Zuordnen. Sie müssen es nur ändern, um den Request Dispatcher von request anstatt von config abzurufen und die gesamte Methode init() zu entfernen.

Für den Fall, dass Sie tatsächlich beabsichtigen, ein "Homepage-Servlet" (und damit keine Willkommensdatei) zu haben, die einen ganz anderen Zweck hat, nämlich die Standarddatei welches Servlet geliefert werden soll, wenn ein Ordner angefordert wird, welches somit nicht speziell der Stammordner ist), dann sollten Sie das Servlet auf das leere Zeichenketten-URL-Muster abbilden.

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

Siehe auch nterschied zwischen/und/* im Servlet-Mapping-URL-Muster .

56
BalusC

Ich vermute, Sie möchten, dass Ihr Index-Servlet als Begrüßungsseite fungiert. Wechseln Sie also zu:

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

Damit wird das Index-Servlet verwendet. Beachten Sie, dass Sie dazu einen Servlet-Spec-2.4-Container benötigen.

Beachten Sie auch, dass @BalusC meine Stimme erhält, da Ihr Index-Servlet für sich genommen überflüssig ist.

23
beny23

Auf diese Weise kann ich Servlet als Begrüßungsseite einrichten.

Ich teile für wen Sorge.

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>

Servlet-Klasse

@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

Ich habe eine nette Lösung in diesem Stackoverflow-Link gesehen, die den Lesern des Problems der defulat-Servlet-Behandlung helfen kann, indem sie das leere Zeichenfolgen-URL-Muster "" verwenden:

@WebServlet("")

oder

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