この記事では、サーブレットのURLパターンマッチングルールを紹介し、それらを共有します。詳細は次のとおりです。
まず、いくつかの混乱するルールを明確にする必要があります。
1.サーブレット容器の一致するルールは、単純なワイルドカードでも正規表現でも、特定のルールでもありません。したがって、ワイルドカードや正規表現マッチングルールを使用して、サーブレットのURLパターンを表示しないでください。
2.サーブレット2.5から始めて、サーブレットは複数のURLパターンルールを使用できます。 <サーブレットマッピング>タグは、サーブレットに対応する一致するルールを宣言し、各<url-pattern>タグは1つの一致するルールを表します。
3.サーブレットコンテナがブラウザによって開始されたURL要求を受信すると、コンテナはURLを使用して現在のアプリケーションのコンテキストパスを減算し、残りの文字列をサーブレットマッピングとして使用します。 URLがhttp:// localhost:8080/appdemo/index.htmlの場合、そのアプリケーションコンテキストがappdemoである場合、コンテナはhttp:// localhost:8080/appdemoを削除し、残りの/index.htmlパーツを使用してサーブレットマッピングの一致を行います。
4. URLパターンマッピングマッチングプロセスが優先されます
5。そして、サーブレットが正常に一致する場合、残りのサーブレットには注意が払われません。
1。4つのマッチングルール
1つの正確な一致
<url-pattern>で構成されたアイテムは、URLと正確に一致する必要があります。
<サーブレットマッピング> <Servlet-Name> myServlet </servlet-name> <url-pattern>/users.html </url-pattern> <url-pattern>/index.html </url-pattern> <url-pattern>/user/adduser.action
ブラウザに次のURLを入力すると、サーブレットに一致します
http:// localhost:8080/appdemo/user/users.html
http:// localhost:8080/appdemo/index.html
http:// localhost:8080/appdemo/user/adduser.action
知らせ:
http:// localhost:8080/appdemo/user/adduser/は違法なURLであり、http:// localhost:8080/appdemo/user/adduserとして認識されません
さらに、上記のURLの任意のクエリ条件の後に続くことができ、そのような一致します
http:// localhost:8080/appdemo/user/adduser?username = tom&age = 23はmyservletに一致します。
2パスマッチ
「/」文字で始まり、「/*」で終わる文字列は、パスマッチングに使用されます
<サーブレットマッピング> <Servlet-Name> myServlet </servlet-name> <url-pattern>/user/*</url-pattern> </servlet-mapping>
パスは /user /で始まり、次のパスは任意になります。たとえば、次のURLが一致します。
http:// localhost:8080/appdemo/user/users.html
http:// localhost:8080/appdemo/user/adduser.action
http:// localhost:8080/appdemo/user/updateuser.actionl
3拡張マッチング
「*」で始まる文字列。拡張マッチングに使用されます
<サーブレットマッピング> <Servlet-Name> myServlet </servlet-name> <url-pattern>*。JSP</url-Pattern> <url-Pattern>*。アクション</url-Pattern> </servlet-mapping>
その後、拡張機能JSPまたはアクションを使用したURL要求はすべて一致します。たとえば、次のURLが一致します
http:// localhost:8080/appdemo/user/users.jsp
http:// localhost:8080/appdemo/tohome.action
4デフォルトの一致
<サーブレットマッピング> <Servlet-Name> myServlet </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
2。一致する順序
1.正確な一致、サーブレットマッピング1:<url-パターン>/user/users.html </url-pattern>、servlet-mapping2:<url-pattern>/*</url-pattern>。リクエストhttp:// localhost:8080/appdemo/users.htmlが来ると、サーブレットマッピング1が一致し、サーブレットマッピング2と一致しなくなります。
2。パスマッチング、最初に最長のパスを一致させ、次に最短パスサーブレットマッピング1:<url-pattern>/user/*</url-pattern>、servlet-mapping2:<url-pattern>/*</url-pattern>を一致させます。リクエストhttp:// localhost:8080/appdemo/users.htmlが来ると、サーブレットマッピング1が一致し、サーブレットマッピング2と一致しなくなります。
3。拡張マッチング、サーブレットマッピング1:<url-pattern>/user/*</url-pattern>、servlet-mapping2:<url-pattern>*。アクション</url-pattern>。リクエストhttp:// localhost:8080/appdemo/user/adduser.actionが来ると、サーブレットマッピング1が一致し、サーブレットマッピング2と一致しなくなります。
4.デフォルトの一致は上記のサーブレットにはないので、デフォルトのサーブレットを使用して<url-pattern>/</url-pattern>として構成します
注意すべき問題
1パスマッチングと拡張マッチングを同時に設定することはできません
一致するメソッドは、パスマッチング(「/」文字で始まり、「/*」で終わる)、拡張マッチング(「*。」で始まる)、または正確なマッチングのいずれかの一致方法のみです。 3つのマッチング方法を組み合わせることはできないため、ワイルドカードや通常のルールを使用するために当たり前のことと見なされないでください。
たとえば、<url-pattern>/user/*。アクション</url-pattern>は違法です
また、注:<url-pattern>/aa/*/bb </url-pattern>は正確で合法です。 *これはワイルドマッチの意味ではありません。
2 "/*"および "/"には異なる意味があります
Tomcatは、%catalina_home%/conf/web.xmlファイルでデフォルトサーブレットを構成し、構成コードは次のとおりです。
<Servlet> <Servlet-Name>デフォルト</servlet-name> <servlet-class> org.apache.catalina.servlets.defaultservlet </servet-class> <init-param> <param-name> debug </param-name> <param-value> 0 </param-value> </init-param> <init-param> <init-param> <init-param> <param> <param-value> false </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet> <servlet-name> jsp </servlet-name> <servlet-class> org.apache.jasper.servlet.jspervlet </servlet-> <init-param> <init-param> <init-param> <param-value> false </param-value> </init-param> <init-param> <param-name> xpoweredby </param-name> <param-value> false </param-value> </init-s-startup> 3 </load-on-startup> </servlet> <サーブレット> <url-pattern>/</url-pattern> </servlet-mapping> <! - jsp servletのマッピング - > <サーブレットマッピング> <servlet-name> <url-pattern>*。
IV。例を挙げてください
| マッピングURL | 対応するサーブレット |
| /こんにちは | サーブレット1 |
| /bbs/admin/* | サーブレット2 |
| /bbs/* | サーブレット3 |
| *.jsp | サーブレット4 |
| / | サーブレット5 |
実際の要求マッピングの結果
コンテキストパスの残りのパスを削除します | リクエストを処理するサーブレット |
/こんにちは | サーブレット1 |
/bbs/admin/login | サーブレット2 |
/bbs/admin/index.jsp | サーブレット2 |
/BBS/ディスプレイ | サーブレット3 |
/bbs/index.jsp | サーブレット3 |
/BBS | サーブレット3 |
/index.jsp | servler4 |
/hello/index.jsp | サーブレット4 |
/hello/index.html | サーブレット5 |
/ニュース | サーブレット5 |
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。