从Servlet3.0开始,配置Servlet支持注解方式,即@WebServlet,但还是保留了配置web.xml方式,所有使用Servlet有两种方式:
1、Servlet类上使用@WebServlet注解进行配置
@WebServlet(name = "UserServlet",
urlPatterns = {"/user/test","/userInfo"},
loadOnStartup = 1,
initParams = {
@WebInitParam(name="name1", value="value1"),
@WebInitParam(name="name2", value="value2")
}
)
2、web.xml文件中配置
<servlet>
<servlet-name>getUser</servlet-name>
<servlet-class>user.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getUser</servlet-name>
<url-pattern>/user/UserServlet</url-pattern>
</servlet-mapping>
(1)、loadOnStartup属性:标记容器是否在启动应用时就加载Servlet,默认不配置或数值为负数时表示客户端第一次请求Servlet时再加载;0或正数表示启动应用就加载,正数情况下,数值越小,加载该Servlet的优先级越高;
(2)、name属性:可以指定也可以不指定,通过getServletName()可以获取到,若不指定,则为Servlet的完整类名,如:cn.edu.njit.servlet.UserServlet
(3)、urlPatterns/value属性: String[]类型,可以配置多个映射,如:urlPatterns={"/user/test", "/user/example"}
(4)、在使用注解方式时,需要注意:
- <web-app> </web-app>根元素中不能配置属性metadata-complete="true",否则无法加载Servlet。metadata-complete属性表示通知Web容器是否寻找注解,默认不写或者设置false,容器会扫描注解和Web分片,为Web应用程序构建有效的元数据;设置true,表示将由部署描述符为Web程序提供所有的配置信息
- web.xml中不能再配置该Servlet
(5).urlPatterns的常用规则:
- /*或者/:拦截所有
- *.do:拦截指定后缀
- /user/test:拦截路径
- /user/*.do、/*.do、test*.do都是非法的,启动时候会报错
(6).urlPatterns的配置规则:精确匹配、扩展名匹配、路径匹配以及会包含一些优先级。
参考:https://blog.csdn.net/mytt_10566/article/details/70173007