2013-02-01 15 views
32

Ich habe dies in meinem Dokument web.xml. Ich versuche, eine Willkommensliste zu haben, so dass ich den Pfad für die Homepage nicht mehr eingeben muss. Aber jedes Mal, wenn ich die Anwendung auf meiner Tomcat-Seite angeklickt habe, wird angezeigt: Die angeforderte Ressource ist nicht verfügbar.So konfigurieren Sie die Liste der Willkommensdateien 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> 

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 ist, dass es immer noch nicht funktioniert? Ich muss noch die Option/Index in meiner URL eingeben ... Wie dies richtig tun?

+0

was genau Sie in Ihrer URL eingeben, haben Sie eine index.html Seite vorhandenen haben ?? –

+0

Zum Beispiel habe ich meine Webapp in tomcat Manager geklickt. Es wird die URL http: // localhost: 8080/myProj/am allerersten angezeigt. Also muss ich noch den Index nach dieser URL eingeben, um meine Willkommensseite zu öffnen. Was damit wringen? – PeterJohn

+0

Ihre Willkommensdatei ist [Kontextstammverzeichnis] ​​/index.jsp Das Servlet wird nicht für die Begrüßungsseite aufgerufen. – DwB

Antwort

51

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

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

Wenn Sie absolut positiv sind, dass Sie ein Servlet diese seltsame Weise aufrufen müssen, dann sollten Sie es auf einem URL-Muster von /index.jsp statt /index abzubilden. Sie müssen es nur ändern, um den Request-Dispatcher von request anstelle von config zu erhalten und die gesamte init()-Methode loszuwerden.

Falls Sie beabsichtigen, tatsächlich ein „Homepage-Servlet“ zu haben (und damit nicht eine willkommene Datei —, die einen ganz anderen Zweck hat, nämlich die Standarddatei, die bedient wird sould wenn ein Ordner wird angefordert , das ist also nicht speziell der Stammordner), dann sollten Sie das Servlet auf die leere Zeichenfolge URL-Muster zuordnen.

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

Siehe auch Difference between/and /* in servlet mapping url pattern.

+0

Ich habe bereits meine index.jsp unter meinem JSP-Ordner – PeterJohn

+6

Sie haben es in '/ WEB-INF/JSP/index.jsp'-Ordner. Sie haben es nicht im Stammordner als '/ index.jsp'. Die Antwort ist, es in den Root-Ordner zu legen, auf der gleichen Ebene wie '/ WEB-INF'-Ordner. – BalusC

+2

Ich habe versucht, es zu ändern, aber immer noch das gleiche Problem. Ressource ist nicht verfügbar – PeterJohn

17

Ich denke, was Sie wollen, ist Ihr Index-Servlet als Begrüßungsseite zu handeln, so ändern:

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

Damit der Index-Servlet verwendet wird. Beachten Sie, dass Sie einen Servlet-Spec-2.4-Container benötigen, um dies tun zu können.

Beachten Sie auch, @BalusC bekommt meine Stimme, denn Ihr Index-Servlet allein ist überflüssig.

-2

Es basiert auf welcher Datei Sie versuchen, auf diese Dateien zuzugreifen.

Wenn es sich im selben Ordner befindet, in dem sich Ihre Arbeitsprojektdatei befindet, können Sie nur den Dateinamen verwenden. kein Weg nötig.

Wenn es in einem anderen Ordner, die unter dem gleichen übergeordneten Ordner Ihrer Arbeitsprojektdatei ist, dann können Sie Lage wie in der folgenden /javascript/sample.js

In Ihrem Beispiel verwenden, wenn Sie versuchen, sind Zugriff auf Ihre js-Datei von Ihrem hTML-Datei Sie den folgenden Speicherort

../javascript/sample.js

das Präfix verwenden können ../ Wird den übergeordneten Ordner der Datei (Ordner nach oben Fahrt) gehen zu

1

ich eine schöne Lösung in diesem stackoverflow link sah, dass die Leser des defulat Servlet durch Ausgabe Umgang mit dem leeren String URL-Muster „“ helfen können:

@WebServlet("") 

oder

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