文章目录

1、Servlet的概念

  • Servlet是Server和Applet的这两个单词的组合,即运行在服务器上的小程序。
  • Servlet就是一个接口,定义了Java类被浏览器访问到的规则。
  • Java程序员自定义一个类,实现Servlet接口并重写接口中的方法,Web服务器(如Tomcat等)就可以识别并执行这个程序。

2、Servlet的快速入门

  • 创建JavaEE项目
  • Java Web的基础--Servlet_servlet


  • Java Web的基础--Servlet_java_02

  • 定义一个类,实现Servlet接口,实现接口中的方法
/**
* 定义一个实现Servlet接口的类
*
* @author zhuhuix
* @date 2020-08-23
*/
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {

}

@Override
public ServletConfig getServletConfig() {
return null;
}

// Demo服务
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet!!!");
}

@Override
public String getServletInfo() {
return null;
}

@Override
public void destroy() {

}
}
  • 在web.xml配置Servlet
<?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>
<servlet-name>demo</servlet-name>
<servlet-class>demo.servlet.ServletDemo</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>
  • 运行
  • Java Web的基础--Servlet_java_03

  • 访问http://localhost:8080/servlet_war_exploded/demo路径
  • Java Web的基础--Servlet_xml_04

3、Servlet的执行原理

  1. 当服务器接受到客户端浏览器的请求后,会解析请求的URL路径,获取访问的Servlet的资源路径
  2. 查找web.xml,是否有对应的url-pattern标签体内容
  3. 如果存在以上标签体内容,则找到其对应的servlet-class标签体中标注的类名
  4. 接着由web服务器根据全类名对应的的字节码文件加载进内存,并且创建对应的对象
  5. 最后调用该对象的相应方法

4、Servlet的生命周期

  • 例子
// 初始化方法
// 在Servlet被创建时执行,只会执行一次
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init...");
}

// 获取Servlet配置
@Override
public ServletConfig getServletConfig() {
return null;
}

// 提供服务的方法
// 每一次Servlet被访问时执行,执行多次
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service...");
}

// 获取Servlet的一些信息
@Override
public String getServletInfo() {
return null;
}

// 销毁方法
// 在web服务器正常关闭时执行,只执行一次
@Override
public void destroy() {
System.out.println("destroy...");
}

Java Web的基础--Servlet_xml_05

  • 生命周期图
  • Java Web的基础--Servlet_xml_06

4.1 指定Servlet的创建时机

  • 在服务器启动时就创建
<?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>
<servlet-name>demo</servlet-name>
<servlet-class>demo.servlet.ServletDemo</servlet-class>

<!-- 指定Servlet的创建时机
1.在服务器启动时就创建,load-on-startup配置为0或正值
-->
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>

Java Web的基础--Servlet_ide_07

  • 第一次被访问时才创建
<?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>
<servlet-name>demo</servlet-name>
<servlet-class>demo.servlet.ServletDemo</servlet-class>

<!-- 指定Servlet的创建时机
2.第一次被访问时创建,load-on-startup配置为负值
-->
<load-on-startup>-1</load-on-startup>

</servlet>

<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
</web-app>

Java Web的基础--Servlet_servlet_08

  • 注意点: Servlet的init方法中尽量不要定义成员变量。

4.2 Destroy方法

  • 只有服务器正常关闭时,才会执行Destroy方法
  • Destroy方法在Servlet销毁之前执行,一般用于释放资源。