Servlet的一些细节(1)

1.  Servlet程序必须映射到一个URL地址

由于客户端是通过URL访问web服务器资源,所以Servlet程序必须映射到一个URL地址。这个工作在web.xml文件中使用<servlet>元素和<servlet-maping>元素完成

<servlet>用于注册Servlet,<servlet-name>和<servlet-Class>分别用于设置Servlet的注册名称和完整类名

一个<servlet-maping>元素用于映射一个已经注册的Servlet的一个对外访问路径,子元素<servlet-name>和<url-pattern>分别指定Servlet的注册名称和对外访问路径

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  
  <servlet>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>cn.school.ServletDemo</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ServletDemo2</servlet-name>
    <servlet-class>cn.school.ServletDemo2</servlet-class>
  </servlet>

  
  <servlet-mapping>
     <servlet-name>ServletDemo</servlet-name>
     <url-pattern>/ServletDemo</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ServletDemo2</servlet-name>
    <url-pattern>/servlet/ServletDemo2</url-pattern>
  </servlet-mapping>

</web-app>


对于第一个程序,使用http://localhost:8080/D623/ServletDemo

对于第二个程序,  使用http://localhost:8080/D623/servlet/ServletDemo2

 

2. 同一个Servlet可以被映射到多个URL地址上去

  即是一个Servlet注册名可以对应多个<servlet-mapping>元素

      也就是说可以有多个地址访问同一个Servlet程序

  <servlet>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>cn.school.ServletDemo</servlet-class>
  </servlet>
  
  <servlet-mapping>
     <servlet-name>ServletDemo</servlet-name>
     <url-pattern>/my1/ServletDemo</url-pattern>
  </servlet-mapping>
  
    <servlet-mapping>
     <servlet-name>ServletDemo</servlet-name>
     <url-pattern>/my2/ServletDemo</url-pattern>
  </servlet-mapping> 
  
   <servlet-mapping>
     <servlet-name>ServletDemo</servlet-name>
     <url-pattern>/my3.html</url-pattern>
  </servlet-mapping>


注意最后一个访问地址是http://localhost:8080/D623/my3.html

在地址栏中出现这样的地址看起来好像是一个静态页面,其实Selvlet是动态页面,这就是常说的伪静态

3. Servlet映射地址可以使用* 通配符

  但只有两种固定格式

   *.扩展名 或者 以 /* 结尾

  <servlet>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>cn.school.ServletDemo</servlet-class>
  </servlet>


  
  <servlet-mapping>
     <servlet-name>ServletDemo</servlet-name>
     <url-pattern>/ServletDemo</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>*.dd</url-pattern>
  </servlet-mapping>


  通配符的意思是可以输入任何字符

注意一点,当修改web.xml时,不需要重新生成web应用,web服务器会自动监测web.xml的改动

Tomcat服务器的conf文件夹下context.xml文件有一句

   <WatchedResource>WEB-INF/web.xml</WatchedResource>


4.  最先匹配最像的路径

 如下映射关系

  Servlet1 映射到 /abc/*

  Servlet2 映射到 /*

  Servlet3 映射到 /abc

  Servlet4 映射到 *.do

当请求URL为 /abc/a.html 时,匹配Servlet1

当请求URL为 /abc 时,匹配Servlet3

当请求URL为/abc/a.do 时,匹配Servlet1 (*在前面的方式优先级最低

当请求URL为 /a.do 时 匹配Servlet2

原文地址:https://www.cnblogs.com/tech-bird/p/3805246.html