Servlet简介

news/2025/4/2 11:24:01/

一、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对象。 

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

相关文章

Java快速入门体验

Java快速入门体验 一、环境信息1.1 硬件信息1.2 软件信息 二、Maven安装2.1 Maven介绍2.2 Maven安装包下载2.3 Maven安装2.4 Maven初始化 三、Java安装3.1 JDK下载3.2 JDK安装3.3 JDK初始化 四、开发环境搭建4.1 安装开发工具4.2 关联Maven环境4.2.1 新建JAVA项目4.2.2 Maven与…

代码随想录算法训练营day45 | LeetCode 70. 爬楼梯 II 322. 零钱兑换 279. 完全平方数

70. 爬楼梯 II&#xff08;题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台&#xff09; 思路&#xff1a;用完全背包的方法做&#xff0c;比斐波那契数列的做法显得高大上一点。 int climbStairs(int n){vector<int> dp(…

四旋翼飞行器建模(一)

四旋翼飞行器的姿态运动学和姿态动力学建模方法 目录 一、坐标系描述:二、姿态描述三、姿态运动学四、姿态动力学1、牛顿-欧拉方程2、姿态动力学方程一、坐标系描述: 惯性坐标系: E G {E_G} E

SPI2外设驱动-W25Q64 SPI接口初始化

前言 &#xff08;1&#xff09;本系列是基于STM32的项目笔记&#xff0c;内容涵盖了STM32各种外设的使用&#xff0c;由浅入深。 &#xff08;2&#xff09;小编使用的单片机是STM32F105RCT6&#xff0c;项目笔记基于小编的实际项目&#xff0c;但是博客中的内容适用于各种单片…

element-ui table中使用type=‘selection‘ 实现禁用,勾选,默认选中不可修改 三种状态显示问题

element-ui table中使用type‘selection’ 实现禁用&#xff0c;勾选&#xff0c;默认选中不可修改 三种状态显示问题 实现效果 需求 1.status‘CheckOk 时 勾选框默认选中但不可修改勾选状态 2.status‘CheckFail 时 勾选框禁用 3.status‘ 时 勾选框可以勾选 实现思路 采…

关于 ts 这一篇文章就够了

你好 文章目录 一、js 和 ts二、TypeScript的特点三、了解 ts , 爱上 ts &#x1f923; 一、js 和 ts 随着近几年前端领域的快速发展&#xff0c;JavaScript 迅速被普及和受广大开发者的喜爱&#xff0c;借助于 JavaScript 本身的强大&#xff0c;也让使用JavaScript开发的人员…

如何在浏览器中启用 WebGL 以使用 HTML5 3D 查看器

描述 WebCenter 中的 HTML5 3D Collada Viewer&#xff08;自 14.1 以来新增&#xff09;要求在浏览器中启用 WebGL。较旧的浏览器可能不支持此功能&#xff0c;或者要求用户首先显式启用此功能。本页介绍如何为所有主要浏览器启用此功能。WebGL 3D 查看器 本文是以下超级用户…

ubuntu20.04 直接安装vpp23.06 测试双 VPP Tunnel Ike2

环境信息&#xff1a;VMware Workstation 17 Pro ubuntu20.04 (清华源) ubuntu 源点进去选&#xff1a;ubuntu-22.04.3-desktop-amd64.iso 如果之前装过VPP&#xff0c;用以下命令确定是否卸载干净&#xff1a; dpkg -l | grep vpp dpkg -l | grep DPDK 卸载&#xff1a; …