web-dev-qa-db-de.com

Welche Bedeutung hat das URL-Muster in der Datei web.xml und wie wird das Servlet konfiguriert?

Ich habe web.xml Für meine Anwendung manuell konfiguriert. Beim Ausführen meiner Anwendung treten Probleme auf. Ich versuche, über meine Seite servlet auf meine jsp zuzugreifen. Aber es wird ein Fehler als page not found Ausgegeben.

Die Servlets befinden sich unter dem Speicherort des Ordners

<application folder>/WEB-INF/classes/<package>

Also, was sollten die Einträge für Servlets in url-pattern Und servlet-mapping Sein. Damit kann servlet über die URL aufgerufen werden.

44
gkumar

url-pattern Wird in web.xml Verwendet, um Ihr servlet einer bestimmten URL zuzuordnen. Unten finden Sie einen XML-Code, einen ähnlichen Code finden Sie möglicherweise in Ihrer web.xml - Konfigurationsdatei.

<servlet>
    <servlet-name>AddPhotoServlet</servlet-name>  //servlet name
    <servlet-class>upload.AddPhotoServlet</servlet-class>  //servlet class
</servlet>
 <servlet-mapping>
    <servlet-name>AddPhotoServlet</servlet-name>   //servlet name
    <url-pattern>/AddPhotoServlet</url-pattern>  //how it should appear
</servlet-mapping>

Wenn Sie url-pattern Von AddPhotoServlet von /AddPhotoServlet In /MyUrl Ändern. Dann kann mit /MyUrl Auf das Servlet AddPhotoServlet zugegriffen werden. Gut aus Sicherheitsgründen, wenn Sie Ihre aktuelle Seiten-URL verbergen möchten.

Java Servlet url-pattern Spezifikation:

  1. Eine Zeichenfolge, die mit einem '/' Zeichen beginnt und mit einem '/ *' Suffix endet, wird für die Pfadzuordnung verwendet.
  2. Eine Zeichenfolge, die mit einem Präfix '*.' beginnt, wird als Erweiterungszuordnung verwendet.
  3. Eine Zeichenfolge, die nur das Zeichen '/' enthält, gibt das "Standard" -Servlet der Anwendung an. In diesem Fall ist der Servlet-Pfad der Anforderungs-URI abzüglich des Kontextpfads und die Pfadinformation ist null.
  4. Alle anderen Zeichenfolgen werden nur für exakte Übereinstimmungen verwendet.

Referenz: Java-Servlet-Spezifikation

Sie können dies auch lesen Grundlagen von Java Servlet

68
Ravi

Die Servlet-Zuordnung hat zwei untergeordnete Tags: URL-Muster und Servlet-Name. url-pattern gibt den Typ der URLs an, für die das in servlet-name angegebene Servlet aufgerufen werden soll. Beachten Sie, dass der Container beim Vergleichen von Zeichenfolgen für den Servlet-Abgleich die Groß- und Kleinschreibung berücksichtigt.

Die erste Angabe von url-pattern Einer web.xml - Datei für den Serverkontext im Servlet-Container auf server.com entspricht dem Muster in <url-pattern>/status/*</url-pattern> wie folgt:

http://server.com/server/status/synopsis               = Matches
http://server.com/server/status/complete?date=today    = Matches
http://server.com/server/status                        = Matches
http://server.com/server/server1/status                = Does not match

Zweite Spezifikation von url-pattern Ein Kontext, der sich auf dem Pfad/den Beispielen des Agenten auf example.com befindet, entspricht dem Muster in <url-pattern>*.map</url-pattern> wie folgt:

 http://server.com/server/US/Oregon/Portland.map    = Matches
 http://server.com/server/US/server/Seattle.map     = Matches
 http://server.com/server/Paris.France.map          = Matches
 http://server.com/server/US/Oregon/Portland.MAP    = Does not match, the extension is uppercase
 http://example.com/examples/interface/description/mail.mapi  =Does not match, the extension is mapi rather than map`

Dritte Spezifikation von url-mapping, Eine Zuordnung, die das Muster <url-pattern>/</url-pattern> Enthält, stimmt mit einer Anforderung überein, wenn kein anderes Muster übereinstimmt. Dies ist die Standardzuordnung. Das diesem Muster zugeordnete Servlet wird als Standardservlet bezeichnet.

Die Standardzuordnung ist häufig auf die erste Seite einer Anwendung gerichtet. Das explizite Bereitstellen einer Standardzuordnung stellt auch sicher, dass fehlerhafte URL-Anforderungen in der Anwendungsrückgabe von der Anwendung verarbeitet werden, anstatt einen Fehler zurückzugeben.

Das folgende Servlet-Mapping-Element ordnet die Servlet-Instanz server der Standardzuordnung zu.

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

Für den Kontext, der dieses Element enthält, wird jede Anforderung, die nicht von einer anderen Zuordnung verarbeitet wird, an das Servlet server weitergeleitet.

Und am wichtigsten ist, dass wir die Regel für die URL-Pfadzuordnung kennen

  1. Der Container versucht, eine genaue Übereinstimmung des Pfads der Anforderung mit dem Pfad des Servlets zu finden. Eine erfolgreiche Übereinstimmung wählt das Servlet aus.
  2. Der Container versucht rekursiv, dem längsten Pfadpräfix zu entsprechen. Dies geschieht, indem Sie den Pfadbaum nacheinander durchlaufen und das Zeichen "/" als Pfadtrennzeichen verwenden. Die längste Übereinstimmung bestimmt das ausgewählte Servlet.
  3. Wenn das letzte Segment im URL-Pfad eine Erweiterung enthält (z. B. jsp), versucht der Servlet-Container, mit einem Servlet übereinzustimmen, das Anforderungen für die Erweiterung verarbeitet. Eine Erweiterung wird als der Teil des letzten Segments nach dem letzten "." - Zeichen definiert.
  4. Wenn keine der drei vorherigen Regeln zu einer Servlet-Übereinstimmung führt, versucht der Container, den für die angeforderte Ressource geeigneten Inhalt bereitzustellen. Wenn für die Anwendung ein "Standard" -Servlet definiert ist, wird es verwendet.

Referenz RL-Muster

31
Sanshayan