In diesem Artikel wird die URL-Muster-Matching-Regeln von Servlets eingeführt und mit Ihnen teilt. Die Details sind wie folgt:
Zunächst müssen wir einige verwirrende Regeln klären:
1. Die übereinstimmenden Regeln im Servlet -Container sind weder einfache Wildcards noch reguläre Ausdrücke, sondern spezifische Regeln. Verwenden Sie also keine Wildcards oder regelmäßigen Ausdrucksvorschriften, um das URL-Muster eines Servlets anzuzeigen.
2. Aus dem Servlet 2.5 kann ein Servlet mehrere URL-Musterregeln verwenden. Das <Servlet-Mapping> -T-Tag deklariert die dem Servlet entsprechenden Übereinstimmungsregeln, und jedes <url-musterische> Tag repräsentiert 1 Übereinstimmungsregel.
3. Wenn der vom Browser eingeleitete Servlet -Container eine URL -Anforderung empfängt, verwendet der Container die URL, um den Kontextpfad der aktuellen Anwendung zu subtrahieren und die verbleibende Zeichenfolge als Servlet -Mapping zu verwenden. Wenn die URL http: // localhost: 8080/appdemo/index.html ist und sein Anwendungskontext AppDemo ist, entfernen der Container http: // localhost: 8080/AppDemo und verwenden den verbleibenden /Index.html -Teil, um die Servlet -Kartenübereinstimmung zu machen.
4. Die URL-Muster-Zuordnung des Mapping-Abgängers hat Priorität
5. Und wenn ein Servlet erfolgreich übereinstimmt, werden die verbleibenden Servlets nicht beachtet.
1. Vier Übereinstimmungsregeln
1 exakte Übereinstimmung
Die in <URL-Pattern> konfigurierten Elemente müssen genau mit der URL übereinstimmen.
<Servlet-mapping> <Servlet-name> myServlet </Servlet-name> <URL-PATTERN> /User/users.html </url-pattern> <url-pattern> /Index.html </url-pattern> <url-patter> /user/adduser </url-pattern> </servlet-mapping
Wenn Sie die folgenden URLs im Browser eingeben, werden sie mit dem Servlet abgestimmt
http: // localhost: 8080/appdemo/user/user.html
http: // localhost: 8080/appdemo/index.html
http: // localhost: 8080/appdemo/user/adduser.action
Beachten:
http: // localhost: 8080/appdemo/user/adduser/ist eine illegale URL und wird nicht als http: // localhost: 8080/appdemo/user/adduser erkannt
Darüber hinaus kann die obige URL von Abfragebedingungen folgen, und wird abgestimmt, wie z.
http: // localhost: 8080/appdemo/user/adduser? userername = tom & ay = 23 wird mit dem MyServlet abgestimmt.
2 Pfadübereinstimmung
Eine Zeichenfolge, die mit dem Zeichen "/" beginnt und mit "/*" endet
<servlet-mapping> <servlet-name> myServlet </servlet-name> <URL-Muster>/Benutzer/*</url-pattern> </servlet-Mapping>
Der Pfad beginnt mit /user /und der folgende Pfad kann willkürlich sein. Beispielsweise werden die folgenden URLs abgestimmt.
http: // localhost: 8080/appdemo/user/user.html
http: // localhost: 8080/appdemo/user/adduser.action
http: // localhost: 8080/appdemo/user/updateUser.actionl
3 Erweiterungsanpassung
Saiten beginnen mit "*." werden für die Erweiterungspatine verwendet
<Servlet-Mapping> <Servlet-name> myServlet </Servlet-name> <URL-Muster>*. JSP </url-pufterN> <URL-Muster>*. Aktion </url-pattern> </Servlet-Mapping>
Anschließend entspricht jede URL -Anfrage mit der Erweiterung JSP oder Aktion, beispielsweise wird die folgende URL übereinstimmt
http: // localhost: 8080/appdemo/user/user.jsp
http: // localhost: 8080/Appdemo/toHome.Action
4 Standardübereinstimmung
<Servlet-Mapping> <servlet-name> myServlet </servlet-name> <URL-Muster>/</url-pattern> </servlet-mapping>
2. Übereinstimmungsreihenfolge
1. Exakte Übereinstimmung, Servlet-Mapping1: <URL-Muster> /user/users.html </url-pattern>, servlet-mapping2: <URL-Muster>/*</url-pattern>. Wenn eine Anfrage http: // localhost: 8080/appdemo/user/user.html kommt, stimmt Servlet-Mapping1 überein und stimmt nicht mehr mit Servlet-Mapping2 überein
2. Pfad Matching, zuerst den längsten Pfad übereinstimmen und dann mit dem kürzesten Pfad-Servlet-Mapping-Steigungen übereinstimmen: <URL-Muster>/Benutzer/*</url-pattern>, Servlet-Mapping2: <URL-Muster>/*</url-pattern>. Wenn eine Anfrage http: // localhost: 8080/appdemo/user/user.html kommt, stimmt Servlet-Mapping1 überein und stimmt nicht mehr mit Servlet-Mapping2 überein
3.. Erweiterungsübereinstimmung, Servlet-Mapping1: <URL-Muster>/Benutzer/*</url-pattern>, Servlet-Mapping2: <URL-Muster>*. Aktion </url-pattern>. Wenn eine Anfrage http: // localhost: 8080/appdemo/user/adduser.action kommt, stimmt Servlet-Mapping1 überein und stimmt nicht mehr mit Servlet-Mapping2 überein
4. Die Standardübereinstimmung ist im obigen Servlet nicht gefunden. Verwenden Sie daher das Standard-Servlet und konfigurieren
Probleme zu beachten
1 Pfadanpassung und Erweiterungsübereinstimmung können nicht gleichzeitig festgelegt werden
Es gibt nur drei Übereinstimmungsmethoden, entweder den Pfadübereinstimmung (beginnend mit dem Zeichen "/" und endet mit dem "/*"), der Erweiterungsübereinstimmung (beginnend mit "*.") Oder exakte Übereinstimmung. Die drei Matching -Methoden können nicht kombiniert werden.
Beispiel
HINWEIS: <URL-Muster>/aa/*/bb </url-muster> ist genau übereinstimmt und legal. * Hier ist nicht die Bedeutung des wilden Spiels.
2 "/*" und "/" haben unterschiedliche Bedeutungen
Tomcat konfiguriert das Standard -Servlet in der %Catalina_Home %/conf/web.xml und der Konfigurationscode lautet wie folgt
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value> false </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet> <Servlet-name> jsp </servlet-name> <Servlet-Klasse> org.apache.jasper.Servlet.jssplet </servlet-class> <initorlet-class> </param-name> </param-param> <param> <Param> <param> <Param> <Param> <Param> <Param> <Param> <Param> <Param> <Param> <///Servlet-Class> </Servlet-Class> </param> <Param> <Param> <Param> <Param> <Param> <Param> <Param> <Param> <Param> <- <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet><servlet-mapping> <servlet-name>default</servlet-name> <URL-Muster>/</url-pufter> </servlet-Mapping> <!-Die Zuordnungen für das JSP-Servlet-> <Servlet-Mapping> <Servlet-name> JSP </servlet-name> <url-puftern>*.
Iv. Geben Sie ein Beispiel an
| URL Mapping | Entsprechendes Servlet |
| /Hallo | Servlet1 |
| /bbs/admin/* | Servlet2 |
| /bbs/* | Servlet3 |
| *.jsp | Servlet4 |
| / | Servlet5 |
Das Ergebnis der tatsächlichen Anforderungszuordnung
Entfernen Sie die verbleibenden Pfade des Kontextpfads | Servlet, der die Anfrage abwickelt |
/Hallo | Servlet1 |
/bbs/admin/login | Servlet2 |
/bbs/admin/index.jsp | Servlet2 |
/bbs/display | Servlet3 |
/bbs/index.jsp | Servlet3 |
/bbs | Servlet3 |
/Idex.jsp | Servler4 |
/hello/index.jsp | Servlet4 |
/hello/index.html | Servlet5 |
/Nachricht | Servlet5 |
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.