什么是Servlet多重映射
Servlet是多重映射是指同一个Servlet可以被映射成多个虚拟路径,客户端可以通过多个路径访问同一个Servlet。
配置一servlet-mapping可以多配置多个url-pattern
配置二
这种方式的配置效果和上面的这种是一样的,即一个可以对应多个,但要注意一点,就是你的servlet-mapping虽然可以多配置,但url-pattern虚拟映射路径绝对不能重复,否则报空指针异常。servlet-mapping可以多配置
上面的web.xml配置文件中,我配置了2个servlet-mapping,这意味着你用/ServletTest和ServletTest2都可以访问这个Servlet程序,但路径不能重复,配置一同理。但是要注意一点,在url-pattern中只能使用绝对路径,不能使用的相对路径,这一点很重要。
什么是虚拟文件?
什么是虚拟文件,故名思意,就是虚拟的文件,在磁盘中你是找不到这个文件的。
什么是虚拟目录?
虚拟目录和虚拟文件不是一个概念,虚拟文件是一种虚拟的文件,而并非路径。比如,我们把一个项目布置在tomcat中,那我们想要访问项目中的文件,那就要配置文件的访问路径。这时候,我们就可以使用虚拟目录+虚拟文件的方式进行访问。
什么是真实路径
真实路径又叫物理路径,是在磁盘上可以找的到的路径。
虚拟路径优先于真实路径
在tomcat容器中,它首会解析xml配置文件,当发送一个请求到tomcat中,它会判断在虚拟路径是否存在此路径,如果存在则使得虚拟路径。如果虚拟路径中没有找到该文件,则去真实路径中找,如果真实路径也没有找到,则报404,没有找到资源,这就是一个大概的流程
在路径中使用通配符
在配置servlet的程序的时候,允许使用*通配符来匹配多个路径。
完全匹配完全匹配
通过上面的配置,这意味着你在访问这个Servlet的时候,可以是任意的路径,而不是像以前一样,只有指定的路径才能访问这个Servlet,这种方式属于完全匹配,配置所有路径,这种通配符的方式一般在登录拦截的时候用的比较多点。
路径匹配路径匹配1
这种方式叫做路径匹配,也可以叫做虚拟目录,以*通配符为后辍,例如:Servlet/a、Servlet/b...都是可以访问此Servlet的。还有一种方式就是通配可以写在目标文件的上级目录,例如:路径匹配2
这种方式就可以使用,a/test、b/test...等路径访问。
扩展名匹配扩展名匹配
以上这种方式叫扩展名匹配,通配符*为前辍,例如:Servlet/a.sb、Servlet/b.sb...等都是可以访问到的,但此种方式的的映射路径不能是以/开头的路径。
tip:在这里,我还是想提醒一下大家,这种通配符,可以在运用在虚拟目录和虚拟文件中,还是它们是不可以共存的。如果你的虚拟目录和虚拟文件都使用*通配符,则404找不资源路径。虚拟目录和虚拟文件不能同时使用通配符
MXL配置与注解配置可共存
在Servlet中xml配置是可以和注解共存的,只在虚拟映射路径不冲突,这完全是可以这么做的。
注解配置:注解配置
xml配置:xml配置
在注解中的name对应着xml中servlet-name,而urlPatterns对应url-pattern,但urlPatterns和url-pattern的映射路径不能重复。
小结通配符要么在开头,要么在结尾,不能在中间。
如果不使用通配符,那么在的映射路径必须是绝对路径,说白了是前面必须加一个“/”
这三种通配方式的优先级是匹配的范围越大优先级越低。