Este artigo apresenta as regras correspondentes ao padrão de URL de servlets e as compartilha com você. Os detalhes são os seguintes:
Primeiro, precisamos esclarecer algumas regras confusas:
1. As regras correspondentes no contêiner de servlet não são curinga simples nem expressões regulares, mas regras específicas. Portanto, não use curinga ou regras de correspondência de expressão regular para visualizar o padrão de URL de um servlet.
2. A partir do Servlet 2.5, um servlet pode usar várias regras de padrão de URL. A tag <Verlet-mapping> declara as regras correspondentes correspondentes ao servlet e cada tag <url-padrão> representa 1 regra de correspondência;
3. Quando o contêiner do servlet recebe uma solicitação de URL iniciada pelo navegador, o contêiner usará o URL para subtrair o caminho de contexto do aplicativo atual e usar a sequência restante como mapeamento do servlet. Se o URL for http: // localhost: 8080/appdemo/index.html e seu contexto de aplicativo for appdemo, o contêiner removerá http: // localhost: 8080/appdemo e usará a parte restante /index.html para fazer a partida de servlet.
4. O processo de correspondência de mapeamento de padrão de URL tem prioridade
5. E quando um servlet corresponde com sucesso, os demais servlets não receberão atenção.
1. Quatro regras correspondentes
1 correspondência exata
Os itens configurados em <url-padrão> devem corresponder exatamente ao URL.
<Voper-Mapping> <Verlet-name> myServlet </servlet-name> <url-tattern> /user/users.html </url-tattern> <url-tattern> /index.html </url-tattern> <url-pattern>/under/adduser.action </url--pattern>
Ao entrar nos seguintes URLs no navegador, eles serão combinados com o servlet
http: // localhost: 8080/appdemo/user/users.html
http: // localhost: 8080/appdemo/index.html
http: // localhost: 8080/appdemo/user/adduser.action
Perceber:
http: // localhost: 8080/AppDemo/user/adduser/é um URL ilegal e não será reconhecido como http: // localhost: 8080/appdemo/user/adduser
Além disso, o URL acima pode ser seguido por quaisquer condições de consulta e será comparado, como
http: // localhost: 8080/appdemo/user/adduser? nome de usuário = Tom & Age = 23 será correspondido ao myServlet.
2 correspondência de caminho
Uma string que começa com o caractere "/" e termina com "/*" é usada para correspondência de caminho
<Verlet-mapping> <dom-name> myServlet </servlet-name> <url-tattern>/user/*</url-tattern> </servlet-mapping>
O caminho começa com /usuário /, e o caminho a seguir pode ser arbitrário. Por exemplo, os URLs a seguir serão correspondidos.
http: // localhost: 8080/appdemo/user/users.html
http: // localhost: 8080/appdemo/user/adduser.action
http: // localhost: 8080/appdemo/user/updateUser.actionl
3 correspondência de extensão
Strings começando com "*". são usados para correspondência de extensão
<Verlet-mapping> <dom-name> myServlet </servlet-name> <url-tattern>*.
Em seguida, qualquer solicitação de URL com a extensão JSP ou ação corresponderá, por exemplo, o seguinte URL será correspondido
http: // localhost: 8080/appdemo/user/users.jsp
http: // localhost: 8080/appdemo/tohome.action
4 correspondência padrão
<Verlet-mapping> <Verlet-name> myServlet </servlet-name> <url-tattern>/</url-tattern> </servlet-mapping>
2. Ordem de correspondência
1. Correspondência exata, servlet-mapping1: <url-tattern> /user/users.html </url-tattern>, servlet-mapping2: <url-pantathern>/*</url-pattern>. Quando um pedido http: // localhost: 8080/appdemo/user/users.html vem, servir-mapping1 e não corresponde mais ao servlet-mapping2
2. Comparação de caminho, corresponda primeiro ao caminho mais longo e depois corresponde ao caminho mais curto servlet-mapping1: <url-padtern>/user/*</url-pattern>, servlet-mapping2: <url-pattern>/*</url-pattern>. Quando um pedido http: // localhost: 8080/appdemo/user/users.html vem, servir-mapping1 e não corresponde mais ao servlet-mapping2
3. Comparação de extensão, servlet-mapping1: <url-pattern>/user/*</url-pattern>, servlet-mapping2: <url-tattern>*. Ação </url-pattern>. Quando uma solicitação http: // localhost: 8080/AppDemo/user/adduser.Action vem, servir-mapping1 e não corresponde mais ao servlet-mapping2
4. A correspondência padrão não é encontrada no servlet acima; portanto, use o servlet padrão e configure-o como <uRl-tattern>/</url-tattern>
Questões a serem observadas
1 correspondência de caminho e correspondência de extensão não pode ser definida ao mesmo tempo
Existem apenas três métodos de correspondência, correspondendo a caminho (começando com o caractere "/" e terminando com o "/*"), a correspondência de extensão (começando com o "*.") Ou a correspondência exata. Os três métodos de correspondência não podem ser combinados; portanto, não tome como certo o uso de curingas ou regras regulares.
Por exemplo, <url-pandern>/user/*. Ação </url-tattern> é ilegal
NOTA também: <url-padrão>/aa/*/bb </url-pattern> é uma correspondência exata e legal. * Aqui não está o significado da partida selvagem.
2 "/*" e "/" têm significados diferentes
Tomcat configura o servlet padrão no arquivo %catalina_home %/conf/web.xml, e o código de configuração é o seguinte
<Verlet> <Verlet-name> padrão </servlet-name> <Servlet-class> org.apache.catalina.servlets.defaultServlet </servlet-class> <iit-param> <ininte> Debug </param-name> <aam-value> 0 </param-value> </iret-Param> </param-name> <aam-value> 0 </param-value> <otinte> <Maam-Value> false </amam-value> </irit-param> <adarl-on-startup> 1 </load-on-startup> </servlet> <ervlet> <Servlet-name> jsp </servlet-name> </servlet-class> org.apache.jasper.Servlet.jspServlet </</irvlet-class> <amam-value> false </amam-value> </irit-param> <otit-param> <amam-name> xPoweredby </amam-name> <amam-value> false </amam-value> </init-param> <lound-on-startup> 3 </load-startup> </sertlet> <Verlet-Mapping> <lound-startup> <url-pattern>/</url-tattern> </servlet-mapping> <!-os mapeamentos para o servlet jsp-> <vaging-mapping> <sutlet-name> jsp </vlet-name> <url-pattern>*.
4. Dê um exemplo
| URL de mapeamento | Servlet correspondente |
| /olá | servlet1 |
| /bbs/admin/* | servlet2 |
| /bbs/* | servlet3 |
| *.jsp | servlet4 |
| / | servlet5 |
O resultado do mapeamento de solicitação real
Remova os caminhos restantes do caminho do contexto | Servlet que lida com o pedido |
/olá | servlet1 |
/bbs/admin/login | servlet2 |
/bbs/admin/index.jsp | servlet2 |
/bbs/display | servlet3 |
/bbs/index.jsp | servlet3 |
/bbs | servlet3 |
/index.jsp | servler4 |
/hello/index.jsp | servlet4 |
/hello/index.html | servlet5 |
/notícias | servlet5 |
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.