Web服务器

news2024/11/20 2:23:29

目录

什么是Web服务器?

Web容器

Servlet

Servlet 规范

Servlet 的API结构

编写Servlet

servlet生命周期(产生到销毁的过程)

服务器产生响应信息的两种格式


什么是Web服务器?

        Web服务器是一个程序,用于接收客户端的请求并将响应发送回客户端。它通常用于处理静态内容,例如HTML文件、图像和CSS样式表等。

缺陷

        传统 Web服务器 的缺陷:产生响应信息时,只能产生静态的html页面。一旦内容更改,就需要修改网页内容,极大影响了响应信息的灵活性。

辅助应用

        在Web服务器之后增加辅助应用,辅助应用可以在Web服务器接收到客户端请求以后,进行一大堆的业务处理,然后,以数据库为介质动态返回数据库中的信息。大大增加响应信息的灵活性。

        Java利用 Web容器+servlet 方式作为辅助应用的解决方案。由Web容器进行底层操作,然后预留servlet接口,交给开发者完成业务操作。

Web容器

        Web容器是Web服务器的一部分,用于处理动态内容。它们一起工作,为Web应用程序提供服务。常见的Web容器包括Tomcat、Jetty和WebLogic等。

        通常,Web服务器会将静态内容发送到客户端,而动态内容会通过Web容器进行处理,然后再将响应发送回Web服务器,并由Web服务器发送回客户端。

特点

通讯支持按照http协议,将请求信息和响应信息,封装请求对象响应对象,以便更好的接收和发送数据。
Servlet 生命周期管理Servlet接口的实现类,由Web容器产生、初始化、方法调用、销毁
线程支持线程的创建、启动、运行、同步、销毁都由Web容器执行
JSP 支持负责编写JSP引擎,对JSP页面进行翻译

好处

提供动态内容处理Web容器可以处理动态内容,内容可以根据用户请求实时生成
提高性能Web容器通过使用线程池和请求管道等技术,可以提高Web应用程序的性能吞吐量
提供安全性Web容器可以提供对Web应用程序的安全性保护,例如通过对访问进行认证和授权,防止跨站点脚本攻击和SQL注入攻击等
简化开发Web容器可以简化Web应用程序的开发和部署,提供基础设施和应用程序接口的实现,使开发人员可以更快速地构建Web应用程序
可扩展性Web容器可以支持多个Web应用程序,这些应用程序可以在同一个Web容器中运行,从而实现共享资源和更高的可扩展性

Servlet

        Servlet是运行在Web服务器或应用服务器上的Java程序,是Web容器和开发者业务组件通信的标准。它可以处理来自Web客户端的请求并生成响应。

        开发者通过实现Servlet接口书写业务操作,Web容器通过Servlet接口调用方法,可以屏蔽开发者业务类的差异。

Servlet 规范

        java对辅助应用的实现,由 WEB 容器+servlet完成。各个厂商在完成具体实现时,各自有各自的标准。这样,对于不同的容器厂商,就会有 API、WEB应用程序结构、以及性能的差异。同一个 WEB应用程序,也就不能在不同厂商的WEB容器运行。

        为了规范不同厂家之间的差异,Sun公司制定了Servlet规范。该规范定义了一系列的标准和一系列的接口。由不同的厂商提供实现类开发者根据接口调用方法,就可以屏蔽不同厂家的差异。WEB应用程序也就有了移植性。

HttpServletRequest、HttpServletResponse 都是接口 ,实现类由 容器厂商提供

Servlet 的API结构

        

Servlet定义Servlet的行为,包括生命周期方法和处理客户端请求的方法

ServletConfig

定义了Servlet的初始化参数和ServletContext对象的配置
GenericServlet通用的Servlet实现,实现了Servlet和ServletConfig接口,并提供了一些通用的方法
HttpServletGenericServlet的子类,专门用于处理HTTP请求,提供了处理HTTP请求的方法

        在Servlet 规范中,定义了Servlet业务接口,提供了service()业务方法交给开发者实现。同时,定义了ServletConfig配置接口,用于读取Servlet初始化信息

        GenericServlet同时实现了Servlet和ServletConfig两个接口,并且重写了大部分方法。但是,没有重写service()方法,该方法应该由子类根据协议的特点去重写。

        HtppServlet是GenericServlet的子类,根据http协议的特点重写了service方法。在service

方法中,根据不同的请求方式,分别去调用doXXX(),处理请求。

编写Servlet

一、继承HttpServlet接口,实现doxxx方法

public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //doGet()方法调用doPost()方法,以便在处理GET请求时也能响应相同的逻辑
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        //向客户端 输出文本数据
        resp.getWriter().println("hello,world");
    }
}

二、创建tomcat容器,并且注册servlet,完成tomcat启动

 tomcat依赖
 <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>9.0.36</version>
        </dependency>
  </dependencies>
public class MainTomcat {
    public MainTomcat(){
        Tomcat tomcat = new Tomcat();
        //设置启动端口
        tomcat.setPort(8088);
        //引导http引擎
        tomcat.getConnector();
        //创建上下文对象
        Context context = tomcat.addContext("",null);
        //注册servlet
        Wrapper wrapper = Tomcat.addServlet(context,"testServlet",new TestServlet());
        //设置servlet访问路径
        wrapper.addMapping("/test");
        try {
            //启动tomcat
            tomcat.start();
        } catch (LifecycleException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        new MainTomcat();
    }
}

Servlet的URL映射路径有三种

一、精准匹配  /

  wrapper.addMapping("/test");

 客户端以/test 来请求服务器,就能找到对应的servlet

二、拓展匹配  *.

  wrapper.addMapping("*.test");

客户端以.test结尾的请求,都能找到对应的servlet

三、 路径匹配 / /*

  wrapper.addMapping("/test/* ");

客户端以/test/开始的请求,都能找到对应的servlet

servlet生命周期(产生到销毁的过程)

1.web容器加载并实例化servlet

2.调用 init() 方法 完成初始化

wrapper.setLoadOnStartup(0);
  • 如果设置了setLoadOnStartup,且值为0或正数。那么,web容器启动就初始化。(0,1,2为执行顺序,0优先执行)
  • 如果没有设置,或者值为负数。那么web容器会在第一次访问servlet时初始化。

3.当请求到达时,调用service方法,完成业务处理,产生响应信息(每次请求都会执行)

4.销毁阶段,调用destory方法,完成资源清理

服务器产生响应信息的两种格式

1、向客户端 发送文本数据

Witer w = resp.getWiter(); 
  • 得到打印字符流,向客户端输出文本数据

2、向客户端 发送二进制数据

OutputStream out = resp.getOutputStream();
  • 得到字节流,向客户端 输出二进制数据

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

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

相关文章

【LeetCode: 718. 最长重复子数组 | 暴力递归=>记忆化搜索=>动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Scillus | 来吧!它可以大大简化你的Seurat分析流程哦!~(一)(数据预处理)

1写在前面 太久没更了&#xff0c;真是累到极致&#xff0c;每天回到家都只想睡觉。&#x1f62d; 今天介绍一下Scillus包&#xff0c;是一个基于Seurat和ggplot2的R包&#xff0c;用于增强scRNA-seq数据的处理和可视化。&#x1f9d0; 它可以对Seurat对象进行多种类型的图形展…

多重背包问题的三种解法(转化为01背包、二进制拆分、单调队列优化)

多重背包问题的三种解法 转化为01背包二进制拆分优化单调队列优化 转化为01背包 题目链接:acwing4. 多重背包问题 I 题目描述 数据范围 思路&#xff1a; 可以转化为01背包问题求解&#xff0c;将s个物品都看作单独的一个物品&#xff0c;时间复杂度为 O ( N ∗ V ∗ S ) O(…

【一】MATLAB基础知识

【一】MATLAB基础知识 1 数值数据类型的分类 整型 无符号整数&#xff1a;无符号8位整数、无符号16位整数、无符号32位整数、 无符号64位整数。 带符号整数&#xff1a;带符号8位整数、带符号16位整数、带符号32位整数、 带符号64位整数。 无符号8位整数数据范围&#xff…

树和二叉树(概念及其结构)

1.树概念及结构&#xff08;了解&#xff09;‘ 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它 叫做树是因为它看起来像一颗倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶…

php+vue+mysql校园大学生兼职信息网站系统

商家功能模块 商家通过点击后台管理&#xff0c;进入页面可以进行首页、个人中心、热门兼职管理、兼职接单管理、学生咨询管理、兼职任务管理、完成评价管理等功能模块&#xff0c;进行相对应操作 兼职接单管理&#xff1a;通过兼职接单管理可以进行获取兼职名称、专业、分类、…

佳电股份:智能互联 绿色驱动 拥抱未来

4月 13—15 日&#xff0c;2023年易派客工业品展览会、石油石化工业展览会、第七届中国石油和化工行业采购年会&#xff0c;在苏州国际博览中心举行。在本次展会上&#xff0c;佳电股份展出了超高速永磁电机、超高效高压三相异步电动机、智慧电机以及配套服务等主要产品。 哈尔…

linux 下 mysql 平滑升级,不暴力

只适合版本跨越较小的&#xff0c;如果从5到8这种不支持 查看当前版本5.6.40,升级到5.6.50&#xff08;因为一些漏洞的原因&#xff09; 1&#xff1a;下载需要升级的版本 2&#xff1a;解压 3&#xff1a;停止当前的mysql服务 service mysql stop 4&#xff1a;备份原先系…

Spring Boot的基础使用和< artifactId>spring-boot-maven-plugin</ artifactId>爆红的处理

Spring Boot的基础使用和< artifactId>spring-boot-maven-plugin</ artifactId>爆红的处理 Spring Boot概述 微服务概述 微服务Microservices是一种软件架构风格&#xff0c;他是以专注于单一责任与功能的小型功能区块Small Building Blocks 为基础&#xff0c;…

FL Studio21安装体验试用下载fl水果支持最新中文语言功能

FL Studio是什么&#xff1f;如果你打算将来朝着艺术和音乐方向发展&#xff0c;那么学习音乐理论和音乐制作就是一门基础了。FL Studio 21还提供了几十个内置的音乐和声音样本库&#xff0c;以及多种音频效果处理器和虚拟乐器&#xff0c;包括合成器、鼓机、效果器等。这些插件…

【C++初阶】:类与对象(上)

类与对象 一.面向对象的初步认识二.初步认识类三.类的权限四.类的声明和定义五.封装六.类的实例化七.类的大小 一.面向对象的初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 例如洗衣服 而C是基于…

GFD233A 3BHE022294R0103

GFD233A 3BHE022294R0103 ABB KUC321AE PLC模块 HIEE300698R0001 KU C321 AE01 ABB KUC711 3BHB004661R0001 高压变频模块 KUC711AE ABB KUC755AE105 3BHB005243R0105 驱动控制系统模块 KUC755 ABB KUC755AE106 3BH005243R006 控制系统模块 KU C755 AE 106 ABB LDGRB-01 3BSE01…

react-10 函数式写法rsf,配合HOOKS钩子函数

函数式跨组件通信&#xff1a; useContext 实现跨组件传值&#xff0c;内层组件获取context中的值 用来解决同一个父组件的后代组件之间的数据共享问题, 同一个父组件的所有后代组件都可以用 useContext() 从最近的 context 中获取. 性能优化&#xff1a;useMemo &#xff1a…

cv2 五边形矫正,python ,多边形透视变换

#图像透视变换--矫正 #根据最大的5边形进行透视变换 #获取最大和最次长 周长对应的轮廓 #该轮廓进行5边形拟合逼近 #进行透视变换&#xff1a;应用两线交点 import numpy as np import cv2#大津阈值法 OSTU def myApprox(con,pointnum5):# con为预先得到的最大轮廓num 0.001…

2023年CDGA/CDGP数据治理工程师认证报名需要什么条件?

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

mybatis01-Lombok、mybatis原理、参数处理、模糊查询、结果封装

mybatis01 Lombok 一、Lombok的使用 Lombok 是一个Java库&#xff0c;能自动插入编辑器并构建工具&#xff0c;简化Java开发。通过加注解的方式&#xff0c;不需要为类编写getter、setter、constructor或equals&#xff0c;同时可以自动化日志变量。 第一步、在pom.xml中加…

基于动态车辆模型的百度Apollo LQR和MPC横向控制算法分析(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 Apollo 是由百度发起的一个高效、灵活的基于自动驾驶的测试和研发的平台。Apollo 的主要逻辑为局部规划 轨道跟踪。在局部规划…

4.1 插值概念与基础理论

学习目标&#xff1a; 学习插值的基础理论可以从以下几个方面入手&#xff1a; 理解插值的概念&#xff1a;插值是指根据已知数据点的函数值&#xff0c;构造出经过这些点的函数&#xff0c;用于在已知数据点之间估计函数值。可以将其看做是一种函数逼近的方法。 掌握插值多项…

【Linux】MySQL高可用之Mysql读写分离实践

一、MySQL读写分离原理 读写分离就是在主服务器上修改&#xff0c;数据会同步到从服务器&#xff0c;从服务器只能提供读取数据&#xff0c;不能写入&#xff0c;实现备份的同时也实现了数据库性能的优化&#xff0c;以及提升了服务器安全。 二、读写分离实践 绝大多数的企业的…

居家办公远程控制电脑怎么操作

居家办公或者混合办公&#xff0c;正成为一种新的流行趋势。如何更好地居家办公&#xff0c;实现更高的工作效率和更舒适办公体验&#xff0c;我们总结出如下建议。 无论您是每周远程工作几天还是全职工作&#xff0c;无论是出于选择还是因为健康状况或天气事件&#xff0c;都…