JavaWeb——Servlet

1.Servlet概念

Servlet:server applet,运行在服务器的小程序。
JavaWeb——Servlet
Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则。将来我们自定义一个类,实现Servlet接口,覆写方法。

2.Servlet快速入门

2.1.创建JavaEE项目

详见Tomcat创建一个项目:https://blog.****.net/LiLiLiLaLa/article/details/90263581

2.2.定义一个类,实现Servlet接口

JavaWeb——Servlet

2.3.实现接口中的抽象方法

JavaWeb——Servlet

2.4.配置Servlet

JavaWeb——Servlet
启动项目:
JavaWeb——Servlet
注意!!!配置虚拟路径再去访问,上篇博客Tomcat里面讲过,默认一个斜杠是从根目录访问,当项目多时就不合适了,所以要给项目配置一个访问路径(虚拟路径):
JavaWeb——Servlet
JavaWeb——Servlet

3.Servlet的执行原理

  • 当服务器接收到客户端浏览器的请求后会解析请求的URL路径,获取访问的Servlet的资源路径
  • 查找web.xml文件是否有对应的\<url-pattern>标签内容
  • 如果有则再找到对应的\<servlet-class>对应的全类名(所以注意,这里一定要是全类名)
  • Tomcat会将字节码文件加载进内存,并且创建其对象
  • 调用其方法

4.Servlet里面的方法

4.1.具体方法

package xpu.edu.web.servlet;

import javax.servlet.*;
import java.io.IOException;

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

    /**
     * 获取ServletConfig对象
     * ServletConfig: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;
    }

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

JavaWeb——Servlet

4.2.Servlet中的声命周期

  • 被创建:执行init方法,只执行一次

1.Servlet什么时候被创建?
默认情况下第一次被访问时Servlet被创建,也可以指定Servlet创建时机
JavaWeb——Servlet
2.init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的,从而多个用户同时访问时可能存在线程安全问题。如何解决?
解决方法:尽量不要在Servlet中定义成员变量,即使定义了成员变量,也不要对其修改值,只是获取没有进行修改也不会出现问题

  • 提供服务:执行service方法,每次访问Servlet时,service就会被调用一次
  • 被销毁:执行destroy方法,只执行一次,只有服务器正常关闭时才会执行destroy方法,是在Servlet被销毁之前执行,一般用于释放资源(可以看做要挂之前留下遗言,是在Servlet销毁之前执行,而不是Servlet已经挂了才执行)