本文最后更新于:December 3, 2021 pm
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
目录
1.web.xml配置
在Servlet2.5之前使用。是一种通用方式。
基本内容在前面已经有过。这里不再叙述,只是说一下 <url-pattern> 里面配置URL的方式。
1.1 url-pattern匹配配置方式
- 精准匹配:/具体名称
只要URL路径是具体的名称的时候才会触发Servlet。
如:
| <servlet> <servlet-name>my</servlet-name> <servlet-class>com.tothefor.MyWeb.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>my</servlet-name> <url-pattern>/hs</url-pattern> </servlet-mapping>
|
- 后缀匹配:*.xxx
只要是以xxx结尾的就可以匹配触发Servlet。
| <servlet> <servlet-name>my</servlet-name> <servlet-class>com.tothefor.MyWeb.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>my</servlet-name> <url-pattern>*.abcd</url-pattern> </servlet-mapping>
|
- 通配符匹配:/* (不会影响精准匹配)
匹配所有请求,包含服务器的所有资源。
| <servlet> <servlet-name>my</servlet-name> <servlet-class>com.tothefor.MyWeb.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>my</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
|
- 通配符匹配:/
匹配所有请求,包含服务器的所有资源,不包括 .jsp。
1.2 load-on-startup
配置在Servlet标签里面的。这个可以用来控制加载的时机。
- 元素标记容器是否应该在web应用程序启动的时候就加载Servlet(不需要访问触发)。
- 它的值必须为一个整数,表示Servlet被加载的先后顺序。
- 如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时(被访问触发)再加载。
- 如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个Servlet,值越小,Servlet的优先级越高,就越先被加载。当值相同时,容器会自己选择顺序来加载。
示例:
| <servlet> <servlet-name>my</servlet-name> <servlet-class>com.tothefor.MyWeb.HelloServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>my</servlet-name> <url-pattern>/hs</url-pattern> </servlet-mapping>
|
2.注解配置(推荐)
Servlet3.0 后支持。使用注解配置就可以不用再配置web.xml了。如果配置了web.xml也不会有冲突。
使用方法:只需要在类名上面添加 @WebServlet(“/hs”) 即可。
2.1 @WebServlet注解常用属性
- name:Servlet名字(可选)。
- value:配置URL路径,可以配置多个。
- urlPatterns:配置URL路径,和value作用一样,但不能同时使用。
- loadOnStartup:配置Servlet的创建的时机,如果是0或者是正整数,则启动程序时就创建;如果是负数,则访问时创建。当数为正整数时,数越小优先级越高。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package com.tothefor.MyWeb;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;
@WebServlet(name = "helloServlet" , value = {"/hs","hss"} , loadOnStartup = 0) public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("这是doGet"); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("这是doPost"); } }
|