• 【Servlet】Servlet学习之基础篇


    前言:本文很多地方会以小白的角度来思考很多看似“简单”的问题。适用于对Servlet 有简单了解的人。本文是自己学习的过程,学习的体验,也是在本人的能力范围内,给大家尽量带来由浅入深的文章

    Servlet是什么

    其实如果给你推荐或者搜索了这个问题,那就默认你懂一点了 Servlet。
    用途:
    【在容器的帮助下】:使用servlet可以接收到用户发送的Http请求,在servlet通常称为 HttpServletRequest。Servlet接收到之后
    【处理用户的请求】:接收到请求之后,可以根据用户的请求进行处理,
    【返回数据】:比如说用户要余额,那么接收到该请求后,就把数据打包成一个HTTP报文,再通过容器返回,返回的数据称为响应 HttpServletResponse,单称为Response也行,知其意思便可。

    上面即是功能,也是Servlet处理流程。

    【更多基础知识】

    1. 使用HTTP进行传输:传输网页时,网页可以作为HTTP响应中体的一部分,文件也是类似。

    访问网页流程解析:

    当输入一个网址,会调用 get请求发送到服务器,服务器反应后找到页面代码,包装到响应体中,然后返回给用户。
    在这里插入图片描述

    容器

    .容器有很多种,在学习的时候常用tomcat,他是管理Servlet的,负责他们的生、初始化、死,他们初始化之后,就可以返回,对应功能就可以接收响应了。 容器负责传递请求和响应,接收到之后,传给对应servlet,然后返回响应时也经过容器返回给用户

    ● 通信支持

    • 无需我们使用ServerSocket和Socket来建立客户端和服务端的联系,容器会自己处理,包括建立连接,监听端口,IO流,我们可以专注于业务处理

    • 生命周期管理,容器管理着 servlet的加载初始化和销毁,并且能够使得实例能够销毁

    • 多线程支持:一个客户端创建一个线程,运行完就销毁

    基础且有大用

    Servlet作为我们首先接触到的一个接口,还是算比较基础的技术,但是其作用是非常大的,需要认真学。
    【出现的原因】:一个新技术必然是要弥补原有技术的不足而产生的。原先静态的页面,是无法和服务器交互的,每个人看见的页面都是不变的,其页面都只是从服务器传来的文件,不像你现在,== 你可以在看我的文章的同时,给我点赞,粉我,收藏该文章 ==,收藏之后,你能经常看见我写的、推荐的文章,这就是“针对于你的”页面。

    【更多用处】:通过请求,可以返回一个HTML页面,可以返回一个图片(然后浏览器加载),可以返回一个文章, pdf,返回各种文件。这其实就和我们的网页大差不差了,思考一下自己平常使用的都是什么功能,也无非是登录,然后显示页面,当你点击的时候,显示另一个页面,获取文件,查看图片。

    Servlet基础使用探究

    1. 编写一个类,继承Servlet,重写doGet和do post。
    2. 在web.xml文件中注册该Servlet,需要注册servlet的名字和其类,然后再绑定这个servlet和它的url
    <servlet>
    	<servlet-name>Servlet1</servlet-name>
    	<servlet-class>com.example.ServletDemo</servlet-class>
    <servlet>
    	
    <servlet-mapping>
    	<servlet-name>Servlet1</servlet-name>
    	<url-pattern>/servelt</url-pattern>
    </servlet-mapping>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注:当用户要请求某个servlet,并不需要知道它的类名,只需要知道在xml文件中,对其配置的映射即可。所以说上面不仅定义了Servlet,还定义了其映射mapping

    为什么使用xml这种部署描述文件来提供一种声明的机制来定制web应用

    • 动态灵活性高:假如不采用这种xml,我们就需要在加载的方法中,去思考该调用哪个功能的代码,这里使用xml,在加载的时候,解析xml文件后再加载具体的java代码
    • 方便维护:集中了所有的声明,当你要进行网址映射的修改,打开这个xml文件即可

    什么?你还没觉得xml很好用

    好不好用是在使用的时候,才能体会到的,当提及“方便”,“灵活性高”,你可能觉得会空。
    下面提前讲两个知识点:
    全局参数::很清楚,就是设置给所有的servlet的,假如说,你在开发一个广告后台,你最重要的一个信息是什么??那肯定是你的咨询电话,假如你有1个页面,或者是100个页面,这个电话都不应该不一样,应该是全局的,并且是容易修改的,全局参数就提供了你这样的帮助,

    Servlet初始化参数::不同的Servlet有不同的需求,还是上面的例子,假如你的广告里面,有个功能是,相关企业,你也需要提供他们的电话号码,哎呀,只有这个功能(servlet)需要他们的电话电话号码,怎么办?

    1. 选择在Servlet内部使用一个map,修改,维护麻烦

    1.创建Servlet
    2.声明一个map,显式声明电话号码和公司名
    3.如果要修改,就需要找到这个Servlet,然后修改

    1. 【方便维护】在声明Servlet的同时,使用初始化参数
    <servlet>
    	<servlet-name>Servlet1</servlet-name>
    	<servlet-class>com.example.ServletDemo</servlet-class>
    	<init-param>
    		<param-name>phone</param-name>
    		<param-value>110</param>
    	</init-param>
    </servlet>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    【相关知识后面文章会讲】

    Servlet的在这里插入图片描述

    生命周期

    servlet和容器处理请求流程

    1. 用户点击一个连接,链接的URL指向一个servlet
    2. 容器接收到,这个请求创建两个对象:HttpServletResponse、HttpServletRequest
    3. 容器根据请求找到对应的servlet,然后创建线程,调用servlet的service方法
    4. service方法根据用户发出的Http请求来判断调用方法
    5. servlet使用响应对象写响应,然后通过容器传回
    6. service方法结束,线程要么撤销,要么返回到容器管理的一个线程池

    除了doGet、doPost有没有其他方法

    有的,在HttpServlet里面,还有doOptions,doHead,等等,但是不常用

    Servlet生命周期和API

    1. 容器加载类,会调用servlet的无参构造函数,并且调用servlet的init方法,从而初始servlet
    2. init方法,在servlet一生中只调用一次,往往servlet为客户请求提供服务之前调用
    3. init方法可以使得servlet访问ServletConfig和ServletContext对象,servlet需要这些对象得到有关servlet配置和web应用的信息
    4. 容器通过调用servlet的destory方法来结束servlet的生命周期
    5. servlet的绝大多数时间都在为客户的请求运行service方法
    6. servlet要真正初始化完成,需要servletConfig 和servletContext

    本篇文章讲到了啥

    1. 主要讲解了Servlet大致运行流程,运行原理
    2. 简单介绍了使用Servlet

    下面的文章还会介绍什么

    目前,讲解的是基础的Servlet使用,如果你能创建一个 Servlet,那么你其实就已经能写一个最简单的网页了,==你的web之路始于脚下。 ==
    【后续正在创作中】:
    Servlet请求和响应详细解析
    Servlet学习之HTTP篇
    重定向与转发篇
    监听者篇
    会话篇

  • 相关阅读:
    LeetCode每日一题:1668. 最大重复子字符串 (简单) 字符串查找/枚举/kmp+dp/序列dp
    在线课程管理系统——lunwen
    OpenPCDet解析
    2022,云大厂“猛砸”合作伙伴生态
    20. 如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务
    【Spring篇】数据源对象管理&&加载properties文件
    vue3实现模拟地图上,站点名称按需显示的功能
    Centos7 安装keepalived
    CGCS2000、WGS84和ITRF框架坐标之间的差异和转换方法
    MySQL数据库表操作
  • 原文地址:https://blog.csdn.net/m0_52410356/article/details/126693175