1、环境:
idea 2020.1
window 10
java se 1.8.0_271
2、目录结构
3、HelloServlet.java文件
package com.serverlet;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class HelloServlet implements Servlet {
public HelloServlet(){
System.out.println("1、构造方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2、init初始化方法");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
//获取请求类型(get、post、delete、put等)
String type=httpServletRequest.getMethod();
switch (type.toUpperCase()){
case "GET":
doGet();
break;
case "POST":
doPost();
break;
}
System.out.println("3、service方法");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4、结束");
}
private void doGet(){
System.out.println("get请求");
}
private void doPost(){
System.out.println("post请求");
}
}
4、ServletDemo.java文件
package com.serverlet;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class ServletDemo implements Servlet {
public ServletDemo(){
System.out.println("1、构造方法--2");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2、init初始化方法--2");
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
String type=httpServletRequest.getMethod();
switch (type.toUpperCase()){
case "GET":
doGet();
break;
case "POST":
doPost();
break;
}
System.out.println("3、service方法--2");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4、结束--2");
}
private void doGet(){
System.out.println("get请求--2");
}
private void doPost(){
System.out.println("post请求--2");
}
}
5、web.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<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标签中的内容,代表这个servlet的别名,可以是随便取值,但是习惯上用类名-->
<servlet-name>ServerletDemo</servlet-name>
<!-- servlet-class标签中的内容,代表这个servlet对应的类的全类名-->
<servlet-class>com.serverlet.ServletDemo</servlet-class>
</servlet>
<!-- servlet-mapping标签将servlet与url相对应-->
<servlet-mapping>
<!-- serlet-name标签中的内容,代表这个mapping所对应的servlet的别名-->
<servlet-name>ServerletDemo</servlet-name>
<!-- url-pattern标签的内容,表示通过这个url可以访问到这个mapping所代表的servlet-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<!-- 这里servlet的别名就和类名不同-->
<servlet-name>helloServletAlisa</servlet-name>
<servlet-class>com.serverlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServletAlisa</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
</web-app>
6、第一次启动项目,控制台打印如下:
7、第一次访问\hello2路径时,控制台打印如下:
8、第二次访问\hello2路径时,控制台打印如下:
9、继续,访问\hello路径,控制台打印如下:
10、第二次访问\hello路径,控制台打印如下:
11、当我们停止这个服务时,控制台打印如下:
11、结论:
(1)每个servlet都有一个独立的生命周期
(2)每个servlet的构造方法、init方法和destroy的方法只会执行一次
(3)每次访问servlet时,都会执行service方法
(4)只有第一次访问servlet时,才会执行servlet的构造方法、init方法,而不是在tomcat启动时执行
(5)当服务停止时,才会执行destroy方法(tomcat停止)