学无先后,达者为师

网站首页 编程语言 正文

Servlet快速入门

作者:玥骋 更新时间: 2022-05-17 编程语言

Servlet

文章目录

  • Servlet
    • @[toc]
    • Servlet快速入门
    • Servlet执行流程
    • Servlet生命周期
      • Servlet方法介绍
    • Servlet体系结构
      • 思考
      • 总结
    • Servlet urlpattern配置
      • urlPattern配置规则
    • XML配置方式编写Servlet

Servlet快速入门

在这里插入图片描述

1.创建Web项目,导入Servlet坐标

 <dependencies>
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>javax.servlet-apiartifactId>
            <version>3.1.0version>
            
            <scope>providedscope>
        dependency>
    dependencies>

2.定义一个类,实现Servlet接口,并重写Servlet接口中的所有方法,并在service方法中输入一句话

package com.tiyc.web;

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


@WebServlet("/demo1")/*配置访问路径*/
public class ServletDemo1 implements Servlet {

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet hello world~");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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


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

    @Override
    public void destroy() {

    }
}

3.配置:在类上使用@WebServlet注解,配置该Servlet的访问路径

@WebServlet("/demo1")/*配置访问路径*/
public class ServletDemo1 implements Servlet {

4.访问:启动Tomcat,浏览器输入URL访问该Servlet

http://localhost:8080/tomcat-demo02/demo1

Servlet执行流程

1.客户端发送请求给服务器。
2.服务器开始接受,先判断该请求的servlet实例是否存在,如果不存在先装载一个servlet类并创建实例。如果存在则直接调用该servlet的service方法,之后进行判断是调用doGet方法还是doPost方法。
3.servlet创建实例后,调用init方法进行初始化。之后调用servce方法,判断是调用doGet方法还是doPost方法。
4.最后判断服务是否关闭,如果关闭则调用destroy方法。

注:

Servlet由谁创建?Servlet方法由谁调用?

  • Servlet有Web服务器创建,Servlet方法由web服务器调用。

服务器怎么知道Servlet中一定有service方法?

  • 因为我们自定义的Servlet,必须实现Servlet接口并复写其方法,而Servlet接口中有service方法。

Servlet生命周期

  • 对象的生命周期指:一个对象从被创建到被销毁的整个过程。

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段:

  1. 加载与实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

    @WebServlet(urlPatterns = "/demo",loadOnStartup = 1);
    
    // 1.负整数:第一次访问时创建Servlet对象
    // 2.0或正整数:服务器启动时创建Servlet对象。数字越小优先级越高
    

    在这里插入图片描述

  2. 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如:加载配置文件,创建连接等初始化工作。该方法只调用一次。

  3. 请求处理:每次请求Servlet时,Servlet容器都会调用Servlet 的service()方法对请求进行处理

    /**
         * 提供服务
         * 1.调用时机:每一次Servlet被访问时
         * 2.调用次数:可多次调用
         * @param servletRequest
         * @param servletResponse
         * @throws ServletException
         * @throws IOException
         */
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("Servlet hello world~");
        }
    
  4. 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例destroy()方法完成资源的释放。当descroy()方法调用之后容器会释放这个Servlet实例,该实例会随后被Java的垃圾收集器所回收

    /**
         * 销毁方法:
         * 1.调用时机:内存释放或者服务器关闭时,Servlet对象会被销毁,调用
         * 2.调用次数:1次
         *
         */
        @Override
        public void destroy() {
            System.out.println("我是销毁方法:destroy()....");
        }
    

    在这里插入图片描述

Servlet方法介绍

  • 初始化方法,在Servlet被创建时执行,只执行一次

    void init(ServletConfig config)
    
  • 提供服务方法,每次Servlet被访问,都会调用该方法

    void service(ServletRequest req,ServletResponse res)
    
  • 销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet

    void destroy()
    
  • 获取ServletConfig()对象

    ServletConfig getServletConfig()
    
  • 获取Servlet信息

    String getServletInfo()
    

Servlet体系结构

在这里插入图片描述

@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get.....");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post.....");
    }
}

在这里插入图片描述

思考

1.HttpServlet中为什么要根据请求方式的不同,调用不同方法?

2.如何调用?

答:

模拟HttpServlet写个MyHttpServlet

public class MyHttpServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //根据请求方式的不同,进行分别处理

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        //1.获取请求方式:借助ServletRequest对象
        String method = request.getMethod();
        //2.判断
        if ("GET".equals(method)){
            //get方式的处理逻辑
            doGet(servletRequest,servletResponse);
        }else if("POST".equals(method)){
            //post方式的处理逻辑
            doPost(servletRequest,servletResponse);
        }
    }

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

    }
    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
    }
    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
    }

}

继承MyHttpServlet的效果:

在这里插入图片描述

总结

1.HttpServlet的使用步骤

  • 继承HttpServlet
  • 重写doGet()和doPost()方法

2.HttpServlet原理

  • 获取请求方式,并根据不同的请求方式,调用不同的doXxx方法

Servlet urlpattern配置

  • Servlet想要被访问,必须配置其访问路径(urlPattern)

    1. 一个Servlet,可以配置多个urlPattern

      @WebServlet(urlPatterns = {"/demo1","demo2"})
      

urlPattern配置规则

注:范围越小越精确,优先级越高。

1.精准匹配

  • 配置路径:

    @WebServlet(urlPatterns = "/demo7")
    
  • 访问路径:

    http://localhost:8080/tomcat-demo02/demo7
    

2.目录匹配

  • 配置路径:

    @WebServlet(urlPatterns = "/user/*")
    
  • 访问路径:

    http://localhost:8080/tomcat-demo02/user/aaa
    http://localhost:8080/tomcat-demo02/user/bbb
    

3.扩展名匹配

  • 配置路径:

    @WebServlet(urlPatterns = "*.do")
    
  • 访问路径:

    http://localhost:8080/tomcat-demo02/aaa.do
    http://localhost:8080/tomcat-demo02/bbb.do
    

4.任意匹配

  • 配置路径:

    @WebServlet(urlPatterns = "/")
    
    @WebServlet(urlPatterns = "/*")
    
  • 访问路径:

    http://localhost:8080/tomcat-demo02/hehe
    http://localhost:8080/tomcat-demo02/haha
    

    注:/* 与/ 的区别

    • 当我们的项目中的Servlet配置了/,会覆盖掉Tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时就会走这个Servlet
    • 当我们的项目中配置了/* 意味着匹配任意访问路径
    • /* 的优先级比 / 高。

XML配置方式编写Servlet

  • Servlet从3.0版本后开始支持使用注解配置,3.0版本前只支持XML配置文件的配置方式。

  • 步骤:

    1.编写Servlet类

    2.在web.xml中配置该Servlet

在这里插入图片描述

3.运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

原文链接:https://blog.csdn.net/weixin_50659410/article/details/124778711

栏目分类
最近更新