Servlet简介

一、servlet介绍

 1、概念

     servlet是一个运行在服务器端的小程序,也是一个接口,介绍了Java类被tomcat识别的规则。

2、servlet的创建和使用

(1)创建一个JavaEE项目

(2)定义一个类,实现servlet接口

(3)实现接口中的抽象方法

    ①servlet有五个方法,如下图代码所示:

@WebServlet("/demo2" )
public class servletDemo1 implements Servlet {//    初始化方法,在servlet被创建时,执行,只会执行一次@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}//    获取servlet(config)配置对象@Overridepublic ServletConfig getServletConfig() {return null;}/*提供服务的方法每一次servlet被访问时执行。执行多次*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("study1");}//    获取servlet的一些信息,eg:版本、作者.....@Overridepublic String getServletInfo() {return null;}//    销毁方法,在服务器正常关闭时执行,执行一次@Overridepublic void destroy() {}

    ②servlet被创建的时机?

            默认情况下,第一次被访问时,servlet被创建。

       也可进行配置:

               第一次被访问时,创建:<load-on-startup>的值为负数
               在服务器启动时,创建:<load-on-startup>的值为0或正整数

        注意事项:Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的,多个用户同时访问时,可能存在线程安全问题
            解决方法:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

     ③服务器正常关闭时,才会执行destroy方法,destroy方法在Servlet被销毁之前执行,一般用于释放资源。

(4)配置servlet

           方法一:在web.xml中进行配置

       <servlet><servlet-name>demo1</servlet-name><servlet-class>全类名</servlet-class></servlet><servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/demo1</url-pattern></servlet-mapping>

执行原理:当服务器接收到客户端的请求时,会解析请求的url,获取访问servlet的资源路径。查找web.xml文件,是否有对应的<url-pattern>标签体内容,若存在查找对应的<servlet-class>全类名,tomcat会将字节码文件加载进内存,并且创建其对象,最后调用其方法。

方法二:在tomcat3.0以后便支持注解配置,也就可以不在web.xml中进行配置了。

     在类上使用@WebServlet注解,进行配置---- @WebServlet("资源路径"),资源路径的定义多种:

//@WebServlet({"/demo1","/d1"})
//@WebServlet("/user/demo3")
//@WebServlet("demo3.do ")
@WebServlet( "/Demo1")
public class responseDemo1 extends HttpServlet {}

3、servlet体系结构

 (1)GenericServlet

          ①Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,因此继承GenericServlet,实现service()方法即可。

         ②GenericServlet是一个通用的Servlet类,适用于为不特定的协议提供服务。

(2)HttpServlet

        ①对http协议的一种封装,专门用于处理HTTP协议的Servlet类。

        ②提供了针对HTTP请求方法的处理方法,doGet/doPost方法,因此继承HttpServlet,实现doGet/doPost方法方法即可。

 二、HTTP

1、概念

     HTTP(超文本传输协议):定义了客户端与服务器进行通信时,发送数据的格式。

    特点:

          (1)基于TCP/IP的高级协议。

          (2)默认端口号80。

          (3)一次请求对应一次响应

          (4)每次请求之间是独立的,不能进行交互。

     历史版本:

           1.0:每一次请求响应都会建立新的连接
           1.1:复用连接

2、请求消息

  请求消息字符串格式:

POST /login.html	HTTP/1.1Host: localhostUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateReferer: http://localhost/login.htmlConnection: keep-aliveUpgrade-Insecure-Requests: 1username=zhangsan	

(1)请求行

         格式:请求方式  请求url 请求协议/协议版本号

        *请求方式有7种:常用的有post和get,在前面的知识点中介绍过了。

(2)请求头:客户端浏览器告诉服务器一些信息

         格式:请求头名称:请求头值

         常见的请求头:

               ①User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
                       作用: 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

               ②Referer:告诉服务器,当前请求的来源
                       作用: 防盗链

                                   统计工作

(3)请求空行

          用于分割请求头和请求头的一条空行。

(4)请求体

          封装post请求消息的请求参数。

3、响应消息 

   响应字符串简化格式:

HTTP/1.1 200 OKContent-Type: text/html;charset=UTF-8Content-Length: 101Date: Wed, 06 Jun 2018 07:08:42 GMT<--!响应体内容--><html><head><title>$Title$</title></head><body>hello , response</body></html>

 (1)响应行

     ①格式

            响应协议/协议版本号  响应状态码  状态码描述

     ②响应状态码(3位)

           服务器告诉客户端浏览器本次请求和响应的一个状态。

     ③分类:

1xx:服务器接收客户端的消息但是未完全接受完,等待一段时间后发送1xx状态码。2xx:表明服务器成功接收、理解和处理了客户端发送的请求。3xx:重定向。表示客户端采取进一步操作以完成请求。当服务器收到请求后,可能需要将客户端重定向到另一个URL或执行其他操作。4xx:客户端错误。例如:404(请求路径没有对应的资源) 405:请求方式没有对应的doXxx方法5xx:服务器端错误

(2)响应头

       ①格式

            响应头名称:响应头的值

       ②常见响应头
Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
Content-disposition:服务器告诉客户端以什么格式打开响应体数据值:in-line:默认值,在当前页面内打开attachment;filename=xxx:以附件形式打开响应体。文件下载

(3)响应空行

             响应头和响应主体之间的一个空白行。

(4)传输的数据

             传输的数据。

*下一篇我将介绍一下request对象和response对象。 

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

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

相关文章

为Android做一个ShowModal窗口

大家知道&#xff0c;用Delphi实现一个Form&#xff0c;并用ShowModal显示出来&#xff0c;在Android平台是非阻塞的&#xff0c;即执行了Form.ShowModal&#xff0c;代码会继续往下执行而不是等待&#xff0c;这跟在Windows平台是完全不一样的。如果我们需要类似阻塞的效果&am…

Vue3 ElementPlus el-cascader级联选择器动态加载数据

参考了这位的大佬的写法 element el-cascader动态加载数据 &#xff08;多级联动&#xff0c;落地实现&#xff09;_el-cascader 动态加载_林邵晨的博客-CSDN博客 <el-cascader style"width: 300px" :props"address" v-model"addressValue" …

Redis 主从复制和哨兵模式

一、概念 主从复制&#xff0c;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Redis 服务器。前者称为主节点&#xff08;master/leader&#xff09;&#xff0c;后者称为从节点&#xff08;slave/follower&#xff09;。数据的复制是单向的&#xff0c;只能由主节点…

【Vue2.0源码学习】生命周期篇-初始化阶段(initEvents)

文章目录 1. 前言2. 解析事件3. initEvents函数分析4. 总结 1. 前言 本篇文章介绍生命周期初始化阶段所调用的第二个初始化函数——initEvents。从函数名字上来看&#xff0c;这个初始化函数是初始化实例的事件系统。我们知道&#xff0c;在Vue中&#xff0c;当我们在父组件中…

AUTOSAR开发工具DaVinci Configurator里的Modules

DaVinci Configurator 里面有个Module这个概念。 如你所想&#xff0c;基本上跟AUTOSAR架构里面的Module相对应 从软件的Project菜单中的Basic Editor项可以打开 打开这个菜单后&#xff0c;会看到很多Modules项以及其相关配置项 这个Basic Editor显示出整个ECU配置中的所有…

代码题: 看代码说结果, 事件循环 + async 函数的

1. 基本的 async/await 和事件循环 console.log(1);async function asyncFunc() {console.log(2);await Promise.resolve();console.log(3); }asyncFunc();console.log(4);执行顺序&#xff1a; 打印 1定义异步函数 asyncFunc&#xff0c;但并不执行它。调用 asyncFunc()。 打…

Python中的迭代器与生成器

文章目录 1、迭代器2、生成器3、列表推导式和生成器表达式4、enumerate() 在Python中&#xff0c;迭代器&#xff08;Iterator&#xff09;和生成器&#xff08;Generator&#xff09;是两种用于处理可迭代对象的重要工具。而可迭代对象包括列表&#xff0c;元组&#xff0c;字…

C#里Bitmap转Halocn的HObject

一般情况下&#xff0c;图像的width是4的倍数的话&#xff0c;用以下代码便可将彩色bitmap转出halcon里的HObject public void Bitmap2HObject(Bitmap bmp, out HObject image){try{Rectangle rect new Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData srcBmpData bmp.L…

day-06 多进程服务器端 -- 进程间通信

一.多进程服务器端 &#xff08;一&#xff09;进程概念及应用 利用之前学习到的内容&#xff0c;我们的服务器可以按照顺序处理多个客户端的服务请求。在客户端和服务时间增长的情况下&#xff0c;服务器就不足以满足需求了。 1.两种类型的服务器端 &#xff08;1&#xff…

记录--解决前端内存泄漏:问题概览与实用解决方案

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 内存泄漏是前端开发中的一个常见问题&#xff0c;可能导致项目变得缓慢、不稳定甚至崩溃。在本文中&#xff0c;我们将深入探讨在JavaScript、Vue和React项目中可能导致内存泄漏的情况&#xff0c;并提…

xml和json互转工具类

分享一个json与xml互转的工具类&#xff0c;非常好用 一、maven依赖 <!-->json 和 xm 互转</!--><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version></dependency&g…

使用kafka还在依赖Zookeeper,kraft模式了解下

Kafka的Kraft模式 概述 ​ Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。其核心组件包含Producer、Broker、Consumer&#xff0c;以及依赖的Zookeeper集群。其中Zookeeper集群是Kafka用来负责集群元数据的管理、控制器…

如何查看数据集下载后保存的绝对路径?

1.问题 当我们下载torchvision.datasets里面的数据集时&#xff0c;有时候会遇到找不到数据集保存路径的问题。 2.解决 引入os库 import os调用如下方法 os.path.abspath(数据集对象.root)以下面代码为例 import os import torchvision.datasets as datasets# 指定数据集…

vue3+tsx+element-plus中遇到的一些问题总结

前言&#xff1a; vue3tsxelement-plus中遇到的一些问题总结 1、手动打开/关闭 el-tooltip 1、定义ref const tooltipMoreRef ref(); 2、在标签上加ref <el-tooltip ref{tooltipMoreRef} content{t("chat.messageBox.more")} placement"top" effect&…

Java篇(输入输出和快捷键)

目录 定义 输入&#xff1a; 使用 Scanner类读入 循环读入数据 输出&#xff1a; 1.println() 2.println () 3.printf() 4.格式化输出 快捷输入 定义 1.输入&#xff08;Input&#xff09;输出&#xff08;Output&#xff09;—— IO 流 输入流&#xff1a;以电脑为…

Java连接websocket优雅断线、重连功能

为了实现优雅重连和重试&#xff0c;您需要在代码中添加一些逻辑来处理连接失败或断开连接的情况。 实现代码如下&#xff1a; import javax.websocket.*; import java.io.IOException;ClientEndpoint public class WebSocketClientEndpoint {private Session userSession n…

算法训练营第四十天(8.31)| 动态规划Part10:购买股票

目录 Leecode 309.买卖股票的最佳时机含冷冻期 Leecode 714.买卖股票的最佳时机含手续费 Leecode 309.买卖股票的最佳时机含冷冻期 题目地址&#xff1a;​​​​​​​力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目类型&#xff1a;股票问题 c…

设备报修系统有什么用?企业如何提高维修效率和质量?

在数字化时代&#xff0c;基于人工智能和大数据技术的设备报修系统已经成为企业提高服务质量和效率的重要手段。这种系统可以为用户提供方便快捷的报修方式&#xff0c;例如通过扫描设备上的二维码或通过公众号、企业微信、钉钉等平台提交报修请求。这种报修系统不仅可以提高故…

学习笔记:ROS使用经验(rviz)

rviz_config.rviz里面的参数是什么结构 在RViz中的配置文件&#xff08;例如rviz_config.rviz&#xff09;使用YAML格式来定义不同的可视化参数和设置。以下是一些常见的参数结构&#xff1a; Class: 指定显示或组件的类别&#xff0c;如rviz/PointCloud2、rviz/MarkerArray、…

香港服务器快还是台湾服务器快?

​  基于机房位置不同&#xff0c;香港服务器相对于台湾服务器在访问速度方面有一定的优势。香港服务器拥有CN2线路&#xff0c;因此访问速度较快。在网络服务商方面&#xff0c;中华电信等台湾服务商提供的带宽也具有很高的性价比。 香港服务器对大陆用户的影响 对于大陆用户…