Servlet是什么?怎么使用?

news2024/12/24 21:46:55

 前言:

服务器里面资源分为动态资源和静态资源

动态资源:Servlet、Jsp

静态资源:HTML、CSS、JS 

一、概念

1.什么是servlet?

本质上是一个接口,提供了规范。是java提供的一门动态的web资源开发技术。

2.servlet体系结构

Servlet(体系根接口)👉GenericServlet(抽象实现类)👉HttpServlet(对Http协议封装的实现类,后期开发基本用这个)

3.servlet生命周期

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

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

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

3. 请求处理:每次请求处理时,servlet将调用service方法去处理这些请求

4.服务终止:当需要释放内存或者容器关闭时,容器就会调用destroy方法完成资源的释放。然后该实例就会被java的垃圾回收器回收。

二、完整访问过程 

1.http(敲门和递名片)

敲门

浏览器去访问网页就是敲服务器家的门,有两种常见的敲门方法

(1)get方式:超链接访问和form提交,不指定method都默认为get方式

(2)post方式:form提交,指定method=post

两种请求方式的区别:

get向服务器获取信息post是提交信息(更安全)

get请求通过URL提交数据,数据可以在URL看到post请求放在请求体中

get请求提交的数据受限制(1kb左右)post请求不受限制

递名片 

那敲门请求的时候,要提交名片,让服务器认识你是谁啊。这里就有三种名片

(1)请求行:包含http请求方式、请求资源名称、请求版本

(2)请求头:包含主机请求地址、客户端环境信息、键值对形式传递

(3)请求体:以键值对的post形式传递参数给服务器,服务器收到参数后再进行解析

2.servlet(管家)

作用 接收用户发来的请求---->调用其他程序来处理------->将处理结果返回到服务器里面

情景理解:

服务器收到请求名片后。服务器的管家是servlet。servlet管家给用户开门的。(接收用户发来的请求)

servlet管家问你要干什么啊?

用户:要来这里参观参观

好嘞。于是管家先让儿子init(初始化的方法)去把房子打扫一遍

然后管家又对用户说,你来这里想要吃什么或者干什么,直接叫我儿子service(servletRequest---请求,servletResponse---响应(文章超链接))去处理就好了

等到用户走后,管家又让儿子destroy(关闭的方法)去关门

servlet的5个儿子(方法)

1.init(初始化服务器配置)

2.getServletConfig(获取servlet本身信息的,了解就好)

3.service(逻辑操作)

4.getServletInfo(返回一个字符串信息,了解就好)

5.destroy(释放资源)

总结:servlet全程参与你的访问请求需求过程,但是有什么事情它直接叫儿子(方法)去干就好了。                                                                              

三、升级版管家httpservlet(后续开发都用这个)

解释:就是封装http协议并实现了servlet这个接口,根据接收过来的请求类型判断是get还是post,然后去使用对应的get或者post方法去完成对方的请求。后面使用这个servlet管家主要就是使用继承这个httpservlet,去重写实现他的两个儿子方法,分别是dogetdopost

至于原来的servlet五个儿子方法都已经被封装到里面了,我们看不见而已,但是还是存在的

四、怎么调用自己写的类?

注意点:这两个调用方式只能用一个,不能同时用,要不然会报错的。强烈推荐注解!!!,方便又简洁 

被测试的类

package kk;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@WebServlet("/one")//利用注解的方式调用
public class HttpServletTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }

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

(1)注解:在调用该类的开头写上注解@WebServlet("/任意自定义名字")

格式为:

@WebServlet("/任意自定义名字")

 类

  如图所示:

 浏览器访问方式:https:localhost:8080/maven_java_war/one

(2)在webapp-->WEB-INF---->web.xm这里面配置

格式为:​​​​​​​

<servlet>
    <servlet-name>HttpServletTest</servlet-name>
    <servlet-class>kk.HttpServletTest</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>HttpServletTest</servlet-name>
    <url-pattern>/one</url-pattern>
</servlet-mapping>

​​​​​​​​​​​

如图所示:

 浏览器访问方式:https:localhost:8080/maven_java_war/one

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】string类超详细解析

参考文献&#xff1a;C标准库官网 前言&#xff1a;在C/C的学习过程当中一定一定要多刷题&#xff0c;牛客网作为国内内容超级丰富的IT题库&#xff0c;尤其是它的C、C&#xff0c;有从入门到大厂真题&#xff0c;而且大部分的考试题目也是从中抽取&#xff0c;还有很多面经&am…

智慧职教解决方案-最新全套文件

智慧职教解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧职教全套最新解决方案合集一、建设背景 职业教育目前存在的问题&#xff1a; 发展理念相对落后国际化程度不高基本制度不健全层次结构不合理基础能力相对薄弱社会吸引力不强行业企业参与不…

20221121将行车记录仪记录的MJPEG格式的AVI片段合并的MKV转换为MP4

20221121将行车记录仪记录的MJPEG格式的AVI片段合并的MKV转换为MP4 2022/11/21 21:51 &#xff08;一&#xff09; 缘起&#xff0c;用行车记录仪录制的爬拉胡线&#xff08;惠州大南山&#xff09;的AVI视频&#xff0c;一个片段5分钟。 使用mkvtoolnix-gui将AVI合并成为MKV视…

垂直定位系统实验平台

系统概述 本系统由控制系统和被控对象两部分组成&#xff0c;可根据课程需要进行双轴机构的轴数增减和循序渐进的运动控制实训。 控制系统部分由水平轴执行机构、人机界面机构、电源机构、驱动元件与控制器等组成。控制方式&#xff1a;人机界面模拟控制。 控制对象部分由水…

如何制作传统节日网站(纯HTML代码)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

clean-label backdoor attacks 论文笔记

#论文笔记# 1. 论文信息 论文名称Clean-Label Backdoor Attacks作者Alexander Turner(MIT)会议/出版社ICLR 2019pdf本地pdf 在线pdf代码trojanzoo-clean-label**** Label-Consistent其他这篇文章和 Label-Consistent Backdoor Attacks 基本相同 简介&#xff1a;这篇文章是最…

Java内部类解析

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaSE基础 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 目录 什么是内部类 静态内部类 静态内部类访问外部类的规则 外部类访问静态内部类的规则 实例化静态内部类 非静态内部类 内部类访问外部类…

【网安神器篇】——hydra爆破工具

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

2.16 这些都是我常用的修图工具【玩赚小红书】

一、美图秀秀 P图、拼图、贴纸文字、抠图、视频剪辑等该有的功能都有&#xff0c;有很多现成的高颜值模板可以直接套用。 软件官网&#xff1a;https://pc.meitu.com/ 支持&#xff1a;windows&#xff0c;linux&#xff0c;苹果&#xff0c;安卓手机&#xff0c;苹果手机 ​…

是js高级啊~

JavaScript高级 1.函数 1.1. this绑定规则优先级 隐式绑定的this 大于 默认的this显式绑定的this 大于 隐式绑定的thisnew绑定this 大于 隐式绑定的thisnew绑定的this 大于 bind绑定的优先级bind绑定的this 大于 apply、call绑定的this 备注&#xff1a; new关键字不可以和…

使用idea工具实现新建java项目并连接mysql数据库

1.新建java项目 如果刚打开idea工具&#xff0c;则选择Create new Project。 在里新建使用File > New > Project 新建package包和class文件 右键src > new > package后输入包名 在刚建的包下右键选择 new > Java class后并输入类名 链接mysql Java 连…

win10系统下使用opencv-dnn部署yolov5模型

文章目录前言一、环境1、硬件2、软件二、YOLO模型三、新建Qt项目1、pro文件2、main函数四、YOLO 类封装1、yolo.h2、yolo.cpp3、classes.txt五、效果前言 最近工作中需要用yolov5训练模型&#xff0c;然后在win10系统下&#xff0c;完成推理部署。本篇主要介绍使用opencv-dnn模…

7判断环的入口结点8输出倒数第k个

7.判断环的入口结点 第一次第二次看感觉都无从下手&#xff0c;还是看了题解&#xff0c;主要思路是&#xff1a; 假设前面无环的结点有a个&#xff0c;环有b个结点&#xff0c;则设置快慢结点之后&#xff0c;fast结点一次走两步&#xff0c;slow结点一次走一步。则相遇时fast…

《第一行代码》核心知识点:活动(Activity)的儿子叫碎片(Fragment)

《第一行代码》核心知识点&#xff1a;活动Activity的儿子叫碎片Fragment前言四、活动(Activity)的儿子叫碎片&#xff08;Fragment&#xff09;4.1 碎片是神马&#xff1f;4.2 碎片的基本使用4.3 向容器中动态添加碎片4.4 活动与碎片之间通信方法4.5 碎片的生命周期4.6 使用限…

重载单目运算符以及重载运算符的注意事项

一、单目运算符的重载 单目运算符可分为两种&#xff1a; 1&#xff09;可以放在前面&#xff0c;也可以放在后面的单目&#xff0c;如&#xff1a; -- 2&#xff09;只能放在前面的运算符&#xff1a;&#xff01; &#xff08;正号&#xff09; -&#xff08;负号&#x…

Python函数详解(四)——Python函数参数使用注意事项

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python函数参数使用注意事项。 在上文Python函数详解&#xff08;三&#xff09;——函数的参数传递进阶中&#xff0c;我们学习了函数参数的进阶内容。今天&#xff0c;我们来学习函数的参数使用注意事项。 一、P…

【微信小程序】使用 Cryptiojs 解密微信绑定手机号码

很抱歉断更了一段时间&#xff0c;因为最近在做一个项目比较忙&#xff0c;正好项目中小程序板块需要解密手机号码来提交给接口&#xff0c;小程序中虽然提供了获取手机号按钮点击事件&#xff1a;bindgetphonenumber&#xff0c;但是该事件的处理函数中只能获取到加密过的手机…

关于如何调节Mahony AHRS算法的参数

文章目录一、Mahony算法的控制系统特征多项式二、Kp, Ki参数调节方法三、其他自适应调参法我在之前的博客AHRS互补滤波&#xff08;Mahony&#xff09;算法及开源代码中曾提及Mahony算法的难点在于如何调节PI参数。 最近看到参考文献[1]&#xff0c;提出了基于无阻尼自由频率设…

C# 将一种类型的数组转换为另一种类型的数组

将一种类型的数组转换为另一种类型的数组 public static TOutput[] ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput, TOutput> converter); 参数: array: 要转换为目标类型的从零开始的一维 System.Array。 converter: …

【数据结构与算法】杨辉三角,相同字符的截取以及扑克牌

✨个人主页&#xff1a;bit me ✨当前专栏&#xff1a;数据结构 ✨每日一语&#xff1a;不要等到了你的人生垂暮&#xff0c;才想起俯拾朝花&#xff0c;且行且珍惜。 ArrayList题训&#x1f335; 一. 杨辉三角&#x1f334;二.相同字符的截取&#x1f332;三.扑克牌&#x1f…