Servlet简介

news2025/1/13 8:18:36

一、servlet介绍

 1、概念

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

2、servlet的创建和使用

(1)创建一个JavaEE项目

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

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

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

@WebServlet("/demo2" )
public class servletDemo1 implements Servlet {

//    初始化方法,在servlet被创建时,执行,只会执行一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

//    获取servlet(config)配置对象
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*提供服务的方法
    每一次servlet被访问时执行。执行多次*/
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("study1");
    }

//    获取servlet的一些信息,eg:版本、作者.....
    @Override
    public String getServletInfo() {
        return null;
    }

//    销毁方法,在服务器正常关闭时执行,执行一次
    @Override
    public 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.1
		Host: localhost
		User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
		Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
		Accept-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.2
		Accept-Encoding: gzip, deflate
		Referer: http://localhost/login.html
		Connection: keep-alive
		Upgrade-Insecure-Requests: 1
		
		username=zhangsan	

(1)请求行

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

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

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

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

         常见的请求头:

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

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

                                   统计工作

(3)请求空行

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

(4)请求体

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

3、响应消息 

   响应字符串简化格式:

HTTP/1.1 200 OK
		Content-Type: text/html;charset=UTF-8
		Content-Length: 101
		Date: 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.coloradmin.cn/o/927257.html

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

相关文章

neo4jd3拓扑节点显示为节点标签(自定义节点显示)

需求描述&#xff1a;如下图所示&#xff0c;我的拓扑图中有需要不同类型的标签节点&#xff0c;我希望每个节点中显示的是节点的标签 在官方示例中&#xff0c;我们可以看到&#xff0c;节点里面是可以显示图标的&#xff0c;现在我们想将下面的图标换成我们自定义的内容 那…

【android12-linux-5.1】【ST芯片】HAL移植后配置文件生成报错

根据ST官方源码移植HAL源码后&#xff0c;执行readme指示中的生成配置文件指令时报错ST_HAL_ANDROID_VERSION未定义之类&#xff0c;应该是编译环境参数问题。makefile文件中是自动识别配置的&#xff0c;参数不祥就会报错&#xff0c;这里最快的解决方案是查询确定自己android…

【golang】panic函数、recover函数以及defer语句

从panic被引发到程序终止运行的大致过程是什么&#xff1f; 大致过程&#xff1a; 某个函数中的某行代码有意无意地引发了一个panic。这时&#xff0c;初始的panic详情会被建立起来&#xff0c;并且该程序的控制权会立即从从行代码转移至调用其所属函数的那行代码上&#xff…

ICT产教融合创新实训基地物联网实训室建设方案

一、概述 1.1物联网定义 物联网工程&#xff08;Internet of Things Engineering&#xff09;是一种以信息技术&#xff08;IT&#xff09;来改善实体世界中人们生活方式的新兴学科&#xff0c;它利用互联网技术为我们的日常生活活动提供服务和增益&#xff0c;从而让各种智能…

1996-2022全球sar卫星数据

数据简介 1992年JAXA&#xff08;Japan Aerospace Exploration Agency&#xff0c;日本宇宙航空研究开发机构&#xff09;发射了一颗JERS-1卫星&#xff0c;该卫星携带有18*24m分辨率的SAR传感器。随后&#xff0c;JAXA又在2006年和2014年分别发射了带有SAR传感器的alos卫星和…

HelpLook 免费版与商业版的比较,帮助您快速选择!

HelpLook 是一款零代码、开箱即用的帮助中心及博客网站搭建工具&#xff0c;只需简单几步&#xff0c;即可帮助企业、机构、个人发布在线品牌内容站点。 HelpLook 提供多个版本方案供不同需求的用户选择&#xff0c;今天想着重跟大家分享免费版和商业版&#xff0c;将从三个方面…

DataFrame.plot函数详解(五)

DataFrame.plot函数详解&#xff08;五&#xff09; 散点图和箱体图实例 1. scatter DataFrame.plot.scatter(x, y, sNone, cNone, **kwargs) c&#xff1a; 是每个点的颜色&#xff0c;可以是一个值&#xff0c;也可以是数组值 s&#xff1a; 是每个点的大小&#xff0c;可以…

MCU和MPU你分得清楚吗?

最近有不少同学表示在学习嵌入式的过程中分不清MCU和MPU&#xff0c;这两个确实是长得很像、容易混淆的概念&#xff0c;这里我为大家仔细分辨一下。 从概念上讲&#xff0c;MCU指的是微控制器&#xff0c;优势在于“控制”&#xff0c;MPU指的是微处理器&#xff0c;优势在于“…

Redis笔记——(狂神说)待续

Nosql概述 为什么要用NoSql&#xff1f; 1、单机mysql的年代&#xff1a;90年代&#xff0c;网站访问量小&#xff0c;很多使用静态网页html写的&#xff0c;服务器没压力。 当时瓶颈是&#xff1a;1)数据量太大一个机器放不下。2)数据的索引(BTree)&#xff0c;一个机器内存也…

激活函数总结

leakyRelu()激活函数 ReLU函数在输入大于0时返回输入值&#xff0c;否则返回0。 Leaky ReLU在输入小于0时会返回一个较小的负数&#xff0c;以保持一定的导数&#xff0c;使得信息可以继续向后传播。 Leaky ReLU函数&#xff1a; f(x) max(ax, x)其中&#xff0c;a是一个小…

基于ssm技术大健康综合咨询问诊平台源码和论文

基于ssm技术大健康综合咨询问诊平台源码和论文065 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&a…

API管理工具新趋势:一体化研发协作平台 Apipost

在数字化时代&#xff0c;API已经成为了应用程序之间进行通信的关键桥梁。随着API的普及和复杂性的增加&#xff0c;API研发和管理也面临着越来越多的挑战。为了更好地应对这些挑战&#xff0c;Apipost提供了一整套API研发工具&#xff0c;包括API设计、API调试、API文档和API自…

Kdab QML (part9)自由缩放时钟

文章目录 Kdab QML (part9)自由缩放时钟代码详细解释运行截图 Kdab QML (part9)自由缩放时钟 代码 import QtQuick 2.15 import QtQuick.Window 2.15Window {id: rootwidth: 500height: 500visible: truecolor: "lightgrey"title: qsTr("Hello World")It…

中央处理器(CPU):组成、指令周期、数据通路、控制方式、控制器、指令流水线,补充(多处理器系统、硬件多线程)

中央处理器&#xff08;CPU&#xff0c;Central Processing Unit&#xff09;&#xff0c;计算机控制和运算的核心&#xff0c;是信息处理和程序运行的执行单元。 CPU主要功能&#xff1a;处理指令、执行操作、控制时间、处理中断、处理数据。 其中&#xff0c;处理指令、执行…

vue中利用Echarts实现飞线(飞机)地图样式

实现效果 思想&#xff1a;主要是三个要素&#xff1a;1 地图样式 2散点图 3飞线 组合配置后就形成以下效果。 第一步&#xff1a;vue中引入Echarts npm install vue-echarts echarts第二步&#xff1a;导入代码 代码已经写好&#xff0c;直接引入运行就好了&#xff0c;关键…

NO.02 依赖注入

目录 1、前言 2、两种依赖注入的方式 2.1 依赖注入之setter注入 2.2 依赖注入之构造器注入 3、依赖注入之特殊值处理 3.1 字面量赋值 3.2 null值赋值 3.3 XML实体&#xff08;<&#xff09; 4、完整测试类 1、前言 依赖注入就是为类的属性赋值&#xff0c;在我们获…

卷积神经网络实现猴痘疾病图像分类 - P4

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;Pytorch实战 | 第P4周&#xff1a;猴痘病识别&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 目录…

Python数据分析实战-对列表里面的元素绘制词云图(附源码和实现效果)

实现功能 词云也叫文字云&#xff0c;是一种可视化的结果呈现&#xff0c;原理就是统计文本中高频出现的词&#xff0c;将结果生成一张图片&#xff0c;直观的获取数据的重点信息 实现代码 from wordcloud import WordCloud import matplotlib.pyplot as plt# 假设你的字符串…

浅谈大数据智能审计如何助力审计工作

随着互联网大数据的持续发展&#xff0c;大数据审计近年来面对着相等的机遇和挑战。那么&#xff0c;如果利用大数据等相关技术对审计工作作出突出贡献&#xff0c;单位和企业又该从何入手做好大数据审计工作应用&#xff0c;这些都成为每位审计人员将要面临的重要问题。 1. 政…

电机控制软件框架

应用层包括main 主函数模块&#xff0c;ISR 中断处理函数模块、时基Systick 模块和BLDC 应用接口模块&#xff1b;算法层包括BLDC Algorithm 模块和PID control 模块&#xff1b;驱动层&#xff08;Driver layer&#xff09;&#xff1a;包括GD32Fxx_Standard_peripheral libra…