تقدم هذه المقالة قواعد مطابقة عنوان URL من Servlets ومشاركتها معك. التفاصيل كما يلي:
أولاً ، نحتاج إلى توضيح بعض القواعد المربكة:
1. قواعد المطابقة في حاوية servlet ليست أحرفًا بسيطة أو تعبيرات منتظمة ، ولكن قواعد محددة. لذلك لا تستخدم الأبطال البرية أو قواعد مطابقة التعبير العادية لعرض نماذج عنوان URL لـ servlet.
2. بدءًا من Servlet 2.5 ، يمكن لـ servlet استخدام قواعد متعددة عناوين URL. تعلن علامة <Servlet Mapping> عن قواعد المطابقة المقابلة لـ servlet ، وتمثل كل علامة <url-pattern> قاعدة مطابقة واحدة ؛
3. عندما تتلقى حاوية Servlet طلب URL الذي بدأه المستعرض ، ستستخدم الحاوية عنوان URL لطرح مسار سياق التطبيق الحالي واستخدام السلسلة المتبقية كتعيين Servlet. إذا كان عنوان URL هو http: // localhost: 8080/appdemo/index.html وسياق تطبيقه هو appdemo ، ستقوم الحاوية بإزالة http: // localhost: 8080/appdemo واستخدام جزء المتبقي/html لجعل المباراة servlet.
4. عملية مطابقة رسم خرائط عنوان URL لها الأولوية
5. وعندما تطابق Servlet بنجاح ، لن يتم الانتباه إلى Servlets المتبقية.
1. أربع قواعد مطابقة
1 تطابق بالضبط
يجب أن تتطابق العناصر التي تم تكوينها في <url-pattern> مع عنوان URL بالضبط.
<Srevlet-mapping> <Sradlet-Name> myservlet </stervlet-name> <url-pattern> /user/users.html </url-pattern> <url-pittern> /index.html </url-pitern> <Url-patern> /user/adduser.action.
عند إدخال عناوين URL التالية في المتصفح ، سيتم مطابقتها مع Servlet
http: // localhost: 8080/appdemo/user/user.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؟ سيتم مطابقة اسم المستخدم = Tom & Age = 23 مع myservlet.
2 تطابق المسار
يتم استخدام سلسلة تبدأ بـ "/" الحرف وينتهي بـ "/*" لمطابقة المسار
<Sradlet-mapping> <Sradlet-Name> myservlet </revlet-name> <url-pattern>/user/*</url-pattern> </servlet-mapping>
يبدأ المسار بـ /user /، ويمكن أن يكون المسار التالي تعسفيًا. على سبيل المثال ، سيتم مطابقة عناوين URL التالية.
http: // localhost: 8080/appdemo/user/user.html
http: // localhost: 8080/appdemo/user/adduser.action
http: // localhost: 8080/appdemo/user/updateuser.actionl
3 مطابقة التمديد
سلاسل تبدأ بـ "*." تستخدم لمطابقة التمديد
<Sradlet-mapping> <Sradlet-Name> myservlet </rectlet-name> <url-pattern>*.
بعد ذلك ، سيتم مطابقة أي طلب عنوان URL مع تمديد JSP أو الإجراء ، على سبيل المثال ، سيتم مطابقة عنوان URL التالي
http: // localhost: 8080/appdemo/user/user.jsp
http: // localhost: 8080/appdemo/tohome.action
4 تطابق الافتراضي
<Sradlet-mapping> <Sradlet-Name> myservlet </revlet-name> <url-pattern>/</url-pattern> </revlet-mapping>
2. طلب المطابقة
1. المطابقة الدقيقة ، servlet-mapping1: <Url-pattern> /user/users.html </url-pattern> ، servlet-mapping2: <url-pattern>/*</url-pattern>. عندما يكون طلب http: // localhost: 8080/appdemo/user/user
2. مطابقة المسار ، تطابق أولاً أطول مسار ، ثم تطابق مع أقصر مسار servlet 1: <url-pattern>/user/*</url-pattern> ، servlet-mapping2: <url-pattern>/*</url-pattern>. عندما يكون طلب http: // localhost: 8080/appdemo/user/user
3. مطابقة الامتداد ، servlet-mapping1: <url-pattern>/user/*</url-pattern> ، servlet-mapping2: <url-pattern>*. الإجراء </url-pattern>. عندما يكون هناك طلب http: // localhost: 8080/appdemo/user/adduser.action يأتي ، ومطابقة servlet-mapping1 ولم يعد يتطابق مع servlet mapping2
4. لم يتم العثور على المطابقة الافتراضية في servlet أعلاه ، لذلك استخدم servlet الافتراضي وتكوينه كـ <url-pattern>/</url-pattern>
القضايا التي يجب الإشارة إليها
1 لا يمكن تعيين مطابقة المسار ومطابقة التمديد في نفس الوقت
لا يوجد سوى ثلاث طرق مطابقة ، إما مطابقة المسار (بدءًا من الحرف "/" وتنتهي بـ "/*") ، مطابقة التمديد (بدءًا من "*.") ، أو المطابقة الدقيقة. لا يمكن الجمع بين طرق المطابقة الثلاثة ، لذلك لا تعتبرها أمرا مفروغا منه استخدام البطاقات البرية أو القواعد العادية.
على سبيل المثال ، <url-pattern>/user/*. الإجراء </url-pattern> غير قانوني
ملاحظة أيضًا: <url-pattern>/aa/*/bb </url-pattern> هو مطابقة وقانونية. * هنا ليس معنى المباراة البرية.
2 "/*" و "/" لها معاني مختلفة
يقوم Tomcat بتكوين Servlet الافتراضي في ملف ٪ Catalina_home ٪/conf/web.xml ، ورمز التكوين كما يلي
<Sradlet> <Sradlet-Name> افتراضي </servlet-name> <Srevlet-Class> org.apache.catalina.servlets.defaultservlet </radlet-class> <Ing-param> <Iram-name> debug </param-name> <Param-value> false </parm-value> </ith-param> <load-on-startup> 1 </load-on-startup> </servlet> <vervlet> <Servlet-name> JSP </qustlet-name> <Param-value> false </parm-value> </ith-param> <Ing-param> <param-name> xpoweredby </param-name> <Param-value> false </parm-value> </ith-param> <load-on-startup> <Url-pattern>/</url-pittern> </stervlet-mapping> <!-التعيينات لـ JSP Servlet-> <servlet-mapping> <Sradlet-Name> Jsp </radlet-name> <url-pittern>*.
رابعا. إعطاء مثال
| رسم خرائط عنوان URL | servlet المقابلة |
| /مرحبًا | servlet1 |
| /bbs/admin/* | servlet2 |
| /BBS/* | servlet3 |
| *. jsp | servlet4 |
| / | servlet5 |
نتيجة تعيين الطلب الفعلي
قم بإزالة المسارات المتبقية لمسار السياق | servlet الذي يعالج الطلب |
/مرحبًا | servlet1 |
/BBS/المسؤول/تسجيل الدخول | servlet2 |
/bbs/admin/index.jsp | servlet2 |
/BBS/العرض | servlet3 |
/bbs/index.jsp | servlet3 |
/BBS | servlet3 |
/index.jsp | servler4 |
/Hello/index.jsp | servlet4 |
/hello/index.html | servlet5 |
/أخبار | servlet5 |
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.