JavaWeb——Servlet

1.Servlet概念

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

2.Servlet快速入门

2.1.创建JavaEE项目

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

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

JavaWeb——Servlet_第2张图片

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

JavaWeb——Servlet_第3张图片

2.4.配置Servlet

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

3.Servlet的执行原理

  • 当服务器接收到客户端浏览器的请求后会解析请求的URL路径,获取访问的Servlet的资源路径
  • 查找web.xml文件是否有对应的\标签内容
  • 如果有则再找到对应的\对应的全类名(所以注意,这里一定要是全类名)
  • 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_第8张图片

4.2.Servlet中的声命周期

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

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

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

5.Servlet3.0,注解配置

  • 好处:支持注解配置,可以不需要web.xml了
  • 步骤
  • 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
  • 定义一个类实现Servlet接口
  • 覆写方法
  • 1.在类上使用@WebServlet注解进行配置(配urlPatterns资源路径)
    JavaWeb——Servlet_第10张图片
    JavaWeb——Servlet_第11张图片
    JavaWeb——Servlet_第12张图片
    JavaWeb——Servlet_第13张图片
  • 2.在类上使用@WebServlet注解进行配置(配value)JavaWeb——Servlet_第14张图片
  • 3.在类上使用@WebServlet注解进行配置(配value,value可省略)
    JavaWeb——Servlet_第15张图片

6.IDEA与Tomcat的相关配置

  • IDEA会为每一个Tomcat部署的项目单独建立一份配置文件
  • 启动项目查看控制台log:Using CATALINA_BASEJavaWeb——Servlet_第16张图片
  • 查看该路径
    JavaWeb——Servlet_第17张图片
  • 工作空间项目和Tomcat部署的Web项目

1.Tomcat真正访问的是“Tomcat部署的Web项目”,“Tomcat部署的Web项目”对应着“工作空间项目”的web目录下的所有资源
2.WEB-INF目录下的资源不能直接被浏览器访问
3.断点调试:使用Debug启动
JavaWeb——Servlet_第18张图片

7.Servlet的体系结构

Servlet——接口

  • GenericServlet——抽象类(实现Servlet接口)
  • HttpServlet——抽象类(继承GenericServlet)

7.1.GenericServlet

将Servlet接口中其他方法默认做了空实现,只将service方法作为抽象,将来定义Servlet类时,可以继承GenericServlet,实现service方法即可,需要其他方法在额外覆写即可
JavaWeb——Servlet_第19张图片

7.2.HttpServlet(推荐)

对HTTP协议的封装,可以简化操作

  • 定义类继承HttpServlet
  • 覆写doGet/doPost方法
    JavaWeb——Servlet_第20张图片

8.Servlet的相关配置

8.1.urlPatterns

Servlet访问路径,可以定义多个访问路径
JavaWeb——Servlet_第21张图片
路径定义规则

  • /XXX(为主)
    JavaWeb——Servlet_第22张图片
  • /XXX/XXX
    JavaWeb——Servlet_第23张图片
    JavaWeb——Servlet_第24张图片
  • *.do
    JavaWeb——Servlet_第25张图片

你可能感兴趣的:(Java,Servlet注解配置)