【JavaWeb】知识总结Ⅶ(Servlet)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 什么是 Servlet? Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

目录


🌓一.servlet的引出


🌓二. servlet的介绍


🌕三. Servlet 的工作原理


🌔四. Servlet 接口中定义的方法


五. Servlet的生命周期


🌔1. init() 初始化阶段


🌔2. service()处理浏览器请求阶段


🌔3. destroy()终止阶段


🌕✨总结 :


🌕✨我的领悟(请认真看完或许对你有帮助) :


一.servlet的引出

   普通的网页只有静态页面, 静态的HTML, 无法进行交互, 如果我们需要交互并且应用动态页面, 进行登录和注册等活的信息传输, 那么就需要servlet, 所以显而易见, servlet是数据交互的基础.



二. servlet的介绍

什么是 Servlet?

 Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

Servlet 在开发动态 WEB 工程中,得到广泛的应用,掌握好 Servlet 非常重要了 , Servlet( 基

石 ) 是 SpringMVC 的基础,  servlet不能单独拿出来用, 它与tomcat搭配使用


学习servlet 只是为了我们更好的理解web开发原理以及本质的一个手段


servlet3.0前使用web.xml (这种方式更清晰更容易理解)


servlet3.0版本以后支持注解, 同时支持web.xml配置


学习SpringBoot 时,多用注解方式, 从 ssm , springboot 后面全部使用注解

如果是学习servlet的话为让大家更清晰知道 servlet 使用原理, 还是适合用配置方式(说明,原生 的 Servlet 在项目中使用很少)

这两种方式不同, 但是本质都一样

Servlet(java 服务器小程序),它的特点:

       1. 他是由服务器端调用和执行的 ( 一句话:是 Tomcat 解析和执行 )

       2. 他是用java 语言编写的 , 本质就是 Java 类

       3. 他是按照 Servlet 规范开发的  ( 除了 tomcat->Servlet weblogic->Servlet还有其他实现的servlet)

       4. 功能强大,可以完成几乎所有的网站功能 ( 在以前老程员都使用 Servlet 开发网站 ) 技

           术栈要求高

三. Servlet 的工作原理


   Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。


   用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。


   ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。


   对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。


四. Servlet 接口中定义的方法

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;
    ServletConfig getServletConfig();
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
    String getServletInfo();
    void destroy();
}

五. Servlet的生命周期

init()初始化阶段,  service()处理浏览器请求阶段   destroy()终止阶段 是Servlet生命周期的方法。代表了Servlet从“出生”到“工作”再到“死亡 ”的过程。Servlet容器(例如TomCat)会根据下面的规则来调用这三个方法:


//     首先,我们来编写一个简单的Servlet来验证一下它的生命周期:

//     首先,我们来编写一个简单的Servlet来验证一下它的生命周期:
public class HelloServlrt implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Servlet被掉");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //专门向客服端提供响应的方法
        System.out.println("hi HelloServlet~");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("Servlet正在销毁");
    }
}      

记得在xml中配置正确的映射关系 :

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <!--servlet-name   标签Servlet程序起一个别名 (一般是类名)-->
        <servlet-name>HelloServlet</servlet-name>
        <!--servlet-class   是Servlet程序的全类名-->
        <servlet-class>com.lxb.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--url-name     标签的作用是告诉服务器, 我当前配置的地址给那个 Servlet 使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--url-pattern  对外提供访问Servlet地址为 : http://ip:port/工程路径/hello-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

 


<servlet>里面是根据上面找下面


<servlet-mapping>里面的<servlet-name>和上面<servlet>里面的<servlet-name>是一个东西


先是从<servlet-mapping>里面找有没有<url-pattern>对应的<servlet-name>


如果有就去上面的<servlet>里面得到<servlet-class>


总体就是这样


1. init() 初始化阶段

init( ),当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,但是这个方法在后续请求中不会再被Servlet容器调用,就像人只能“出生”一次一样。我们可以利用init( )方法来执行相应的初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig(含有配置信息)对象进来从而对Servlet对象进行初始化。



 执行结果为 :


2. service()处理浏览器请求阶段

Tomcat(servlet容器加载)


service( )方法,每当请求Servlet时,Servlet容器就会调用这个方法。就像人一样,需要不停的接受老板的指令并且“工作”。第一次请求时,Servlet容器会先调用init( )方法初始化一个Servlet对象出来,然后会调用它的service( )方法进行工作,但在后续的请求中,Servlet容器只会调用service方法了。


执行结果为 :


上一个图中的第二行语句之后的所有


3. destroy()终止阶段

destory,当要销毁Servlet时,Servlet容器就会调用这个方法,就如人一样,到时期了就得死亡。在卸载应用程序或者关闭Servlet容器时,就会发生这种情况,一般在这个方法中会写一些清除代码。


一般不会使用, 但是属于该周期的一份子


✨总结 :

浏览器调用Servlet流程分析:    




(第一个和之后每一个请求的区别在于是否调用init()方法, 是否实例化)



✨我的领悟(请认真看完或许对你有帮助) :

总的来说, servlet这几个函数就是, 得到HTTP请求中的信息, 然后, 对servlet进行初始化, 初始化这一步, 是对Servlet类实例化, 只需要实例化一次即可, 因为Servlet实例对象是存储于常驻内存的;  下一步就是根据信息(HTTP请求)调用service()方法, 然后servlet对象对service方法进行处理, 处理结束之后, 它对HTTP响应servletResponse对象进行了修改, 然后tomcat会对servletResponse对象进行操作, tomcat将HTTP响应返回给用户, 这样就完成了一次HTTP请求向servlet的一次请求


由此可见, tomcat是中间件, 是用户和servlet容器之间的中间件, 相当于连接器


               servlet相当于处理器, 存在两个api, 一个是传入HTTP请求, 一个是传出HTTP请求


               里面的操作主要分为两类,


                       一类是对servlet对象信息的配置和web资源的调控


                       一类是对请求的实现, 并封装好请求需要的信息给HTTP响应返回给tomcat


tomcat的整理与感悟 :


tomcat的作用是监听HTTP请求, 并解析HTTP请求, 将它封装在一个对象里面 (这样就简化了代码, 程序员只需要用get 和 set 两个方法就可以对HTTP请求进行调用)

如果只是静态页面, 那么tomcat就会自己解析出我要用哪个应用, 以及那个应用里面的资源, 然后去找到那个资源文件, 以文本的形式返回给tomcat, tomcat又以文本的形式返回给浏览器, 浏览器接收到一个文件, 自己对.HTML文件进行解析, 然后显示

如果是交互性页面, 那么就会使用到servlet, 但使用到servlet的时候, tomcat会去web.xml文件里查看是否有需要的参数pattern对应的name, 通过name知道servlet类在哪里, 如果没有查询到, 那么就根据你需要的类, 去找到servlet类进行实例化 (这种情况是存在<servlet>不存在<servlet-mapping>不是都不存在), 并放到web.xml文件里的HashMap里面, 下次就可以直接知道文件id(比如上文中HelloServlet类文件的路径在哪) 在哪里了, 当得到id 之后就会去到servlet实例那里去, 进行方法的调用和执行(service()方法), 执行的时候需要tomcat处理解析后的HTTP请求和HTTP响应的对象, 当执行方法之后, 这些对象也会被改动, tomcat对HTTP响应进行处理, 并返回给用户的浏览器。


相关文章
|
6月前
|
缓存 Java 应用服务中间件
javaweb实训第三天上午——Servlet(1)
Servlet基础 课程介绍 Servlet基础; (掌握) 基本结构 生命周期 执行流程 接收参数 响应数据
85 0
|
2月前
|
Java 应用服务中间件 Maven
JavaWeb基础5——HTTP,Tomcat&Servlet
JavaWeb技术栈、HTTP、get和post区别、响应状态码、请求响应格数据式、IDEA使用Tomcat、报错解决、Servlet的体系结构、IDEA使用模板创建Servlet
JavaWeb基础5——HTTP,Tomcat&Servlet
|
5月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
34 0
|
5月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
24 0
|
6月前
|
存储 安全 JavaScript
JavaWeb之Servlet(下)
本文主要介绍了JavaWeb开发中关于请求、响应、会话和Servlet3.0注解的相关知识。首先讲解了请求(Request)的常用方法,以及处理请求乱码问题的几种方式。接着讨论了响应(Response)的方法,,以及设置全局初始化参数。然后介绍了会话(Session)的概念,包括其生命周期、如何设置和获取初始化参数,并对比了全局初始化参数和Servlet3.0的`@WebServlet`注解。文中给出了具体的代码示例和测试结果,帮助读者更好地理解和掌握这些概念。
|
6月前
|
Java 应用服务中间件 程序员
JavaWeb之Servlet(上)
本篇博文介绍了JavaWeb中Servlet的基本概念和应用。Servlet是用于交互式浏览和修改数据、生成动态Web内容的Java程序,通常运行在支持Java的应用服务器上。文章讲解了Servlet的工作模式,包括客户端请求、服务器调用Servlet以及响应返回客户端的过程。此外,还提到了Servlet API,特别是doGet和doPost方法用于处理请求和响应。作者通过创建第一个Servlet的步骤,展示了如何实现Servlet接口并配置web.xml文件。最后,文章简述了Servlet的工作原理和生命周期,强调了Servlet的单例特性以及初始化、服务和销毁的过程。
|
6月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
172 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
6月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
94 0
|
6月前
|
编解码 应用服务中间件 数据库
|
6月前
|
小程序 应用服务中间件 数据库连接