Servlet简介

         整理自菜鸟教程(servlet教程)
         介绍了servlet的基本内容和生命周期;

一、Servlet简介

  • 定义

         运行在 web服务器 或者 应用服务器 上的程序;

         作为  web浏览器/其他HTTP客户端  和  HTTP客户端 上的 数据库/应用程序  之间的中间层;

  • 与CGI(公共网关接口)对比优势

        性能好;
        在Web服务器地址空间内执行,不必在创单独进程处理每个客户端请求;
        独立于平台;
        可信度高,Java安全管理器执行一系列限制,以保护服务器计算机上的资源;
        Java类库全部功能Servlet可用,通过socket和RMI机制与applets、数据库或软件交互;

  • 框架(Servlets grogram位于框架的位置)

  • Servlet任务

        ①读取 Web Browser 发送的 显式数据
                  HTML表单
来自applet的表单来自HTTP客户端的表单
        ②读取 Web Browser 发送的 隐式HTTP请求数据
                cookies、媒体类型、浏览器能理解的压缩格式
        ③处理数据生成结果
                访问数据库、执行RMI或CORBA调用、调用Web服务器
        ④发送 显式数据(文档)Web Browser
                文档——文本文件(HTML 或 XML)
        ⑤发送 隐式的HTTP 响应Web Browser
                返回的文档类型、设置cookies、设置的缓存参数、其他类型的任务


 

  • Servlet包

                        使用 java.servlet 和 java.servlet.http 包创建

  • Servlet创建方法

        (1)实现Servlet接口
                  · Servlet生命周期:从创建到被销毁放入过程
                  · 一次创建到处服务
              
                        实例化     使用构建方法创建对象
                        初始化
     执行ini
                        服务         执行service
                        销毁         执行destroy

public class ServletDemo1 implements Servlet{
    //生命周期方法:当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期只执行一次
    public void init(ServletConfig arg0)
            throws ServletException{
        System.out.println("------init-------");
    }
    //生命周期法:对客户端响应的方法,该方法被执行很多次,每次请求该servlet被执行都会执行该方法
    public void service(SerletRequest arg0,SerletResponse arg1)
            throws ServletException,IOException{
        System.out.println("hehe");
    }
    //生命周期法:当servlet被销毁时执行该方法
    public void destroy(){
        System.out.println("-----destroy------");
    }
    public ServletConfig getServletConfig(){
        return null;
    }
    public String getServletInfo(){
        return null;
    }
}

(2)继承GenericServlet类

public class ServletDemo2 extends GenericServlet{
    public void service(ServletRequest arg0,ServletRespoone arg1)
            throws ServletException,IOException{
        System.out.println("hehe");
    }
}

(3)继承HttpServlet方法

import java.io.IOException;

public class ServletDemo3 extends HttpServlet{
    protected void doGet(HttpServletRequset req,HttpServletResponse resp)
        throws ServletException,IOException{
        System.out.println("hehe");
    }
    protected void doPost(HttpServletRequset req,HttpServletResponse resp)
        throws ServletException, IOException{
        System.out.println("hehe");
        doGet(req,resp);
    }
}

  • HttpServlet、GenericServlet 和 Servlet 的关系

                    
 ①GenericServlet类:
       · 抽象类;

       · 实现了Servlet类(原始Servlet)接口,并对其中的init()、destroy() 和 service()提供默认
         实现;
       · 可直接调用ServletConfig中的方法;
       · 将init()中的ServletConfig赋给一个类级变量,可由getServletConfig获取;

②HttpServlet类:
       · 抽象类;
       · 继承自GenericServlet类,并扩展了Http内容

       · 使用了HttpServletRequest类和HttpServletResponse类
       · 对于原始的Servlet中的额方法进行了默认操作

二、Servlet环境设置

之前试过菜鸟上推荐的eclipse配合tomcat,后来配的idea配tomcat(香);
这个教程是 
IDEA 新建 Servlet 项目(适用于 IDEA 2020.2 及以上版本) 配合 Tomcat安装教程
这两个是目前找到最好操作的 手把手 图接图

三、Servlet生命周期

  • 定义

                从创建到销毁的整个过程,包括
                        init()——初始化
                        service()——处理客户端请求
                        destroy()——销毁
                        Servlet由JVM的垃圾回收器进行垃圾回收

  • init()方法

                (1)init()方法介绍

                        ①调用时间:被设计成只调用一次,第一次创建Servlet时被调用,每次用户请求时
                                                不再调用;

                        ②作用:创建或加载一些数据,这些数据将被用于Servlet的整个生命周期;

                (2)Servlet创建、加载、调用的时间

                        ①创建:创建于用户第一次调用对应于该Servlet的URL;

                        ②加载:可指定Servlet再服务器第一次启动时被加载;

                        ③调用:创建后就可以调用;当用户调用一个Servlet时,就会创建一个Servlet实
                                        例,每个用户请求都会产生一个新的线程,适当的时候移交给doGet或
                                        doPost方法;

                (3)init()方法定义:

    public void init()throws ServletException{
        //初始化代码……
    }

  • servlet()方法

                (1)service()方法使用的整个过程:
                        每次服务器收到一个Servlet请求时,服务器会产生一个新的线程,产生一个servlet
                实例调用service()服务,处理客户端请求(检查HTTP请求类型 GET POST PUT
                DELETE,适当时调用doGet() doPost() doPut() doDelete()),把格式化的响应写回客户
                端; 
                        整个过程见下图

                (2)service()方法定义:

    public void service(ServletRequest request,ServletResponse response) 
                throws ServletException,IOException{
        
    }

               (3)service方法特征:
                        不用对service()方法做任何董总,只需要根据客户端的请求类型重写doGet()或
                doPost()即可;

  • doGet()方法

                (1)GET请求来源:一个URL正常请求,或者一个未指定METHOD的HTML表单;
                (2)doGet()方法定义:

    public void doGet(HttpServletRequest request,HttpServletResponse response)
        throws ServletException,IOException{
        //servlet代码
    }

  • doPost()方法

                (1)POST请求来源:一个特别指定了METHOD为POST的HTML表单;
                (2)doPost()方法定义:

    public void doPost(HttpServletRequest request,HttpServletResponse response)
        throws ServletException,IOException{
        //servlet代码
    }
  • destroy()方法

                (1)destroy()方法使用的整个过程:
                        在Servlet生命周期结束时,调用destroy(),实现以下操作——
                                关闭数据库连接 、 停止后台线程 、
                                把Cookie列表或者计数器写到磁盘 、 其他清理工作 
                        调用结束后,servlet对象被标记为垃圾回收;
                (2)destroy()方法定义:

    public void destroy(){
        //终止化代码……
    }

  • 架构图

                (1)Servlet的生命周期方案:
                        ①第一个到达web服务器的HTTP请求被委派到Servlet容器(web服务器区别于
                Servlet容器,请求时从web服务器被送到servlet容器中的);Servlet容器收到请求后调
                用init()方法加载一个Servlet对象;Servlet对象调用service()服务;
                        ②接下来,服务器将多个请求发送到servlet容器,容器为每个请求一个线程,每个
                线程执行一个单一的Servlet实例的service()方法;(service()方法中看情况调用doGet()
                doPost() doPut() doDelete()
方法)
                        ③当生命周期结束前,调用destroy()方法停止生命周期,做数据库关闭、后台服务
                关闭、清理等工作;

                (2)架构图:

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值