Servlet类编写好后,要想被访问到,就需要配置其访问路径(urlPattern)
一个Servlet,可以配置多个urlPattern
package com.itheima.web;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
/**
* urlPattern: 一个Servlet可以配置多个访问路径
*/
@WebServlet(urlPatterns = {"/demo1","/demo2"})
public class ServletDemo7 extends MyHttpServlet {
@Override
protected void doGet(ServletRequest req, ServletResponse res) {
System.out.println("demo1 get...");
}
@Override
protected void doPost(ServletRequest req, ServletResponse res) {
}
}
urlPattern配置规则
精确匹配

/**
* UrlPattern:
* * 精确匹配
*/
@WebServlet(urlPatterns = "/user/select")
public class ServletDemo8 extends MyHttpServlet {
@Override
protected void doGet(ServletRequest req, ServletResponse res) {
System.out.println("demo8 get...");
}
@Override
protected void doPost(ServletRequest req, ServletResponse res) {
}
}
目录匹配

package com.itheima.web;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
/**
* UrlPattern:
* * 目录匹配: /user/*
*/
@WebServlet(urlPatterns = "/user/*")
public class ServletDemo9 extends MyHttpServlet {
@Override
protected void doGet(ServletRequest req, ServletResponse res) {
System.out.println("demo9 get...");
}
@Override
protected void doPost(ServletRequest req, ServletResponse res) {
}
}
扩展名匹配

package com.itheima.web;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
/**
* UrlPattern:
* * 扩展名匹配: *.do
*/
@WebServlet(urlPatterns = "*.do")
public class ServletDemo10 extends MyHttpServlet {
@Override
protected void doGet(ServletRequest req, ServletResponse res) {
System.out.println("demo10 get...");
}
@Override
protected void doPost(ServletRequest req, ServletResponse res) {
}
}
访问路径http://localhost:8080/web-demo/任意.do
注意:
/否则会报错*.do,那么在*.do的前面不能加/,否则会报错任意匹配

package com.itheima.web;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
/**
* UrlPattern:
* * 任意匹配: /
*/
@WebServlet(urlPatterns = "/")
public class ServletDemo11 extends MyHttpServlet {
@Override
protected void doGet(ServletRequest req, ServletResponse res) {
System.out.println("demo11 get...");
}
@Override
protected void doPost(ServletRequest req, ServletResponse res) {
}
}
package com.itheima.web;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
/**
* UrlPattern:
* * 任意匹配: /*
*/
@WebServlet(urlPatterns = "/*")
public class ServletDemo12 extends MyHttpServlet {
@Override
protected void doGet(ServletRequest req, ServletResponse res) {
System.out.println("demo12 get...");
}
@Override
protected void doPost(ServletRequest req, ServletResponse res) {
}
}
注意:/和/*的区别?
当我们的项目中的Servlet配置了 “/”,会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet
当我们的项目中配置了"/*",意味着匹配任意访问路径
DefaultServlet是用来处理静态资源,如果配置了"/"会把默认的覆盖掉,就会引发请求静态资源的时候没有走默认的而是走了自定义的Servlet类,最终导致静态资源不能被访问
五种配置的优先级为 精确匹配 > 目录匹配 > 扩展名匹配 > /* > /
前面对应Servlet的配置,我们都使用的是@WebServlet,这个是Servlet从3.0版本后开始支持注解配置,3.0版本前只支持XML配置文件的配置方法。
对于XML的配置步骤有两步:
package com.itheima.web;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
public class ServletDemo13 extends MyHttpServlet {
@Override
protected void doGet(ServletRequest req, ServletResponse res) {
System.out.println("demo13 get...");
}
@Override
protected void doPost(ServletRequest req, ServletResponse res) {
}
}
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>demo13servlet-name>
<servlet-class>com.itheima.web.ServletDemo13servlet-class>
servlet>
<servlet-mapping>
<servlet-name>demo13servlet-name>
<url-pattern>/demo13url-pattern>
servlet-mapping>
web-app>