Servlet 入门

一、Servlet 基础使用

1. 创建 web项目,导入 Servlet依赖坐标(pom.xml)

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

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

复制代码
package com.itheima.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(123);
    }

    @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/servlet-demo1/demo1

二、Servlet 执行流程

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

Servlet由web服务器(Tomcat)创建,Servlet方法由web服务器调用(Tomcat)。

 

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

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

三、Servlet 生命周期

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

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

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

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

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

4、服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收

@WebServlet(urlPatterns = "/demo", loadOnStartup = 1)
public class ServletDemo1 implements Servlet {
}

① 负整数:第一次被访问时创建Servlet对象

② 0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

 

四、Servlet 方法介绍

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

void init(ServletConfig config) 

2、提供服务方法, 每次Servlet被访问,都会调用该方法

void service(ServletRequest req, ServletResponse res) 

3、销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet

void destroy() 

4、获取ServletConfig对象

ServletConfig getServletConfig() 

5、获取Servlet信息

String getServletInfo() 

 

五、Servlet 体系结构

 

 

 

 

 

 我们自己也可以写一个 Servlet 实现类

复制代码
package com.itheima.web;

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

public class MyHttpServlet implements Servlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        if (method.equals("GET")){
            doGet(servletRequest, servletResponse);
        }else if (method.equals("POST")){
            doPost(servletRequest, servletResponse);
        }
    }
    
    protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse){
        
    }
    
    protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse){

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

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

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

    @Override
    public void destroy() {

    }
}
复制代码

在实现方法中继承实现类,重写doXxx方法即可

复制代码
package com.itheima.web;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

@WebServlet("/demo2")
public class ServletExtendMyHttpServlet extends MyHttpServlet{ @Override protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) { System.out.println("GET~~~"); } @Override protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) { System.out.println("POST~~~"); } }
复制代码

六、Servlet urlPattern配置

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

1. 一个Servlet,可以配置多个 urlPattern,每个匹配到该路径的,进入该方法

复制代码
@WebServlet(urlPatterns = {"/demo3", "/demo4"})
public class ServletDemo2UrlPattern 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");
    }
}
复制代码

2. urlPattern 配置规则

① 精确匹配

② 目录匹配

③ 扩展名匹配

④ 任意匹配

 

 

 

七、XML 配置方式编写 Servlet

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

步骤:

1、编写 Servlet类

2、在 web.xml中配置该Servlet

复制代码
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>ServletExtendMyHttpServlet</servlet-name>  <!-- 任意唯一名称,与后面 mapping 中的名称保持一致 -->
        <servlet-class>com.itheima.web.ServletExtendMyHttpServlet</servlet-class>   <!-- 全类名 -->
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletExtendMyHttpServlet</servlet-name>  <!-- 与前面servlet中配置的名称一致 -->
        <url-pattern>/demo5</url-pattern> <!-- 路径 -->
    </servlet-mapping>
</web-app>
复制代码

 

posted @   DeyouKong  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示