JavaWeb之初识Tomcat

Tomcat

轻量级应用服务器、JSP、Servlet

Tomcat目录结构

image-20240611154834248

在IDEA中创建web项目

在这里不使用maven构建项目,这种方式后面会更新

  1. 新建一个java项目
  2. File -> Project Settings -> Facets -> + -> Web -> OK ( 此时src目录下有一个web目录 )
  3. Edit -> Configurations… -> Add New Configuration -> + -> Tomcat Server -> Local -> 配置
  4. 将 tomcat 的 lib 包下的 servlet-api.jar 包添加到项目中

web目录结构

image-20240611171220615

第一个请求案例

  1. 新建一个注册界面register.htmlimage-20240611171457396

  2. 在src目录下的包中写一个servlet类继承于HttpServlet,重写service方法image-20240611171531935

  3. 在WEB-INF下的web.xml中配置路径的映射信息image-20240611172235786

  4. 测试

    image-20240611171722514

Servlet生命周期

三个步骤即:初始化------>处理请求------>销毁

创建Servlet对象后---------->初始化(调用 init () 方法)------>处理/响应客户端的请求(调用 service() 方法)------->销毁(调用 destroy() 方法,最后由 JVM 的垃圾回收器进行垃圾回收

Servlet底层原理

Servlet底层原理.drawio

Servlet的线程安全问题

Servlet容器采用多线程模型来处理请求。

每个请求都由一个独立的线程处理,这意味着多个请求可以同时执行。

当一个请求到达Servlet时,Servlet容器会创建一个新的线程来处理该请求,并且该线程仅在请求处理完毕后才会被销毁。

这意味着对于同一个Servlet,不同的请求可以在不同的线程上执行,每个线程都有自己的执行路径和数据副本。

解决方法:

  1. 避免使用共享变量(成员变量)
  2. 使用局部变量
  3. 使用同步代码块
  4. 避免使用静态变量和类变量
  5. 使用ThreadLocal,可以在每个线程中存储和访问私有变量

Tomcat页面跳转

页面跳转页面\Servlet

页面之间、页面跳转Servlet 的跳转可以通过三种方式实现

  • 超链接

    <a href="page1.html">跳转到page01</a>
    
  • window.localtion

    <button onclick="fun01()">跳转到page01</button>
    <script>
    	function fun01(){
            windoe.location.href = "/page01"
        }
    </script>
    
  • 表单

    <form action="page01" method="post">
        ...
        <input type="submit"/>
    </form>
    

Servlet跳转Servlet\页面

Servlet可以通过转发和重定向两种方式实现

  • 转发

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        req.getRequestDispatcher("servlet3").forward(req, resp);
        //req.getRequestDispatcher("page01.html").forward(req, resp);
    }
    
  • 重定向

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        resp.sendRedirect("servlet5");
        //resp.sendRedirect("page01.html");
    }
    

重定向与转发

重定向与转发是Tomcat实现跳转的两种方式,但是两者之间有区别

  • 区别一:转发只请求一次,重定向请求两次
  • 区别二:转发是服务器内部的页面跳转,重定向是《告诉客户端应该从哪里请求,客户端再次向服务器请求》,所以服务器内不存在的资源转发不能响应
  • 区别三:转发可以让客户端访问受保护的资源(比如WEB-INF文件夹下的资源),重定向不可以
  • 区别四:转发可以转发服务器中中文名的资源(比如 “ 页面.html”),而重定向不可以

image-20240612194338874

编码问题

Tomcat的Servlet中的doget(req, resp) 和 doPost(req, resp)方法的req、resp都需要设置编码格式

req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

39、基于深度学习的(拼音)字符识别(matlab)

1、原理及流程 深度学习中常用的字符识别方法包括卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;。 数据准备&#xff1a;首先需要准备包含字符的数据集&#xff0c;通常是手写字符、印刷字符或者印刷字体数据集。 数据预处理&#xff1…

ElasticSearch + kibana:类型声明

当我们使用 kibana 创建索引时&#xff0c;如果不申明数据类型&#xff0c;默认字符串赋予 text类型&#xff0c;如下图所示 接下来我们继续创建多条数据如下&#xff1a; 下面我们来检索下&#xff1a; 通过以上两个案例我们发现&#xff0c;使用 match 模糊查询 li-3 明明…

智利企鹅濒临灭绝,回顾曾仕强的2025年预言!实干才是硬道理——早读(逆天打工人爬取热门微信文章解读)

你相信我们5000年凝结的精华易经吗&#xff1f; 引言Python 代码第一篇 洞见 有人晒出高考后家长支出清单&#xff0c;我觉得是时候告诉孩子挣钱的真相了第二篇 视频新闻结尾 引言 昨天有点破了 看小视频不小心看过头了 大概看了有2个小时 才醒悟过来 再接再厉呀&#xff01; …

vue3中如何使用pinia -- pinia使用教程(一)

vue3中如何使用pinia -- pinia使用教程&#xff08;一&#xff09; 安装使用创建 store使用 store访问修改 store 使用组合式 api 创建 store -- setup storepinia 和 hook 的完美结合如何解决上面的问题 使用 hook 管理全局状态和 pinia 有何优缺点&#xff1f;参考小结 pinia…

哈喽GPT-4o——对GPT-4o 文本创作的思考与看法

目录 用法1&#xff1a;创作小说用法2&#xff1a;创作散文用法3&#xff1a;创作诗歌1、古诗2、现代诗 用法4&#xff1a;创作儿童故事用法5&#xff1a;创作剧本 大家好&#xff0c;我是哪吒。 都说ChatGPT4o是目前文本创作的最强大模型&#xff0c;它都可以用于哪些方面的文…

ArcGIS 10.2软件安装包下载及安装教程!

今日资源&#xff1a;ArcGIS 适用系统&#xff1a;WINDOWS 软件介绍&#xff1a; ArcGIS是一款专业的电子地图信息编辑和开发软件&#xff0c;提供一种快速并且使用简单的方式浏览地理信息&#xff0c;无论是2D还是3D的信息。软件内置多种编辑工具&#xff0c;可以轻松的完成…

VirtualHere 允许通过网络远程使用 USB 设备,就像本地连接一样!

传统上&#xff0c;USB 设备需要直接插入计算机才能使用。有了 VirtualHere&#xff0c;就不再需要这样做&#xff0c;网络本身就变成了传输 USB 信号的电缆&#xff08;也称为 USB over IP、USB/IP、USB over WiFi、USB over Ethernet、USB 设备服务器&#xff09;。 此 USB …

Google谈出海:品牌「性价比」转向「心价比」

Google Marketing Live中国站活动现场 越来越多的中国全球化品牌基于对全球消费和海外地区的深刻洞察&#xff0c;不断提升产品研发和迭代能力&#xff0c;在海外消费者心中塑造「中国质造」和「中国智造」的新形象。2023年6月15日&#xff0c;凯度与Google合作发布《2023 凯…

JavaFX GridPane布局

网格布局 GridPane通常用于布局&#xff1a;表单布局 GridPane可以在行&#xff0c;列或单元格级别指定约束。 例如&#xff0c;我们可以设置包含输入文本字段的第二列&#xff0c;以在窗口调整大小时调整大小。 使用Java FX创建表格的时候&#xff0c;这个布局非常方便。 包…

开源低代码平台,JeecgBoot v3.7.0 里程碑版本发布

项目介绍 JeecgBoot是一款企业级的低代码平台&#xff01;前后端分离架构 SpringBoot2.x&#xff0c;SpringCloud&#xff0c;Ant Design&Vue3&#xff0c;Mybatis-plus&#xff0c;Shiro&#xff0c;JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

7大功能特色 让这款信创传输软件受众行业青睐

信创传输软件&#xff0c;顾名思义&#xff0c;也就是能够支持信创环境的文件传输系统&#xff0c;并且需要具备强大的功能&#xff0c;可以满足各种复杂的传输需求。 这种软件可能具有以下特点和功能&#xff1a; 1、兼容性&#xff1a;能够与信创环境中使用的硬件设备、网络…

智慧校园可视化大屏,对教学教务的提升是肉眼可见的

随着信息技术的快速发展&#xff0c;智慧校园已经成为许多学校追求的目标。智慧校园可视化项目是一种通过信息化手段对教学教务进行管理和提升的创新方式。 智慧利用先进的技术手段&#xff0c;将校园各个环节的数据信息进行收集、分析和展示&#xff0c;从而实现对教学教务工…

用Python分析《三国演义》中的人物关系网

用Python分析《三国演义》中的人物关系网 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计构建人物关系网完整代码 三国演义 《三国演义》是中国古代四大名著之一&#xff0c;它以东汉末年到晋朝统一之间的历史为背景&#xff0c;讲述了魏、蜀、吴三国之间…

项目方案:社会视频资源整合接入汇聚系统解决方案(六)

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分类…

[每周一更]-(第101期):打印机该如何选

文章目录 打印机分类1. 喷墨打印机 (Inkjet Printers)特点&#xff1a;优点&#xff1a;缺点&#xff1a; 2. 激光打印机 (Laser Printers)特点&#xff1a;优点&#xff1a;缺点&#xff1a; 3. 多功能一体机 (All-in-One Printers)特点&#xff1a;优点&#xff1a;缺点&…

15. 《C语言》——【如何动态内存开辟】

亲爱的读者&#xff0c;大家好&#xff01;我是一名正在学习编程的高校生。在这个博客里&#xff0c;我将和大家一起探讨编程技巧、分享实用工具&#xff0c;并交流学习心得。希望通过我的博客&#xff0c;你能学到有用的知识&#xff0c;提高自己的技能&#xff0c;成为一名优…

【2024最新精简版】SpringCloud面试篇

文章目录 SpringBoot和SpringCloud什么区别 ?你们项目为什么要使用微服务Spring Cloud 5大组件有哪些&#xff1f;&#x1f44d;什么是微服务?微服务的优缺点是什么?你们项目中微服务之间是如何通讯的? &#x1f44d;服务注册和发现是什么意思&#xff1f;Spring Cloud 如何…

第二证券A股重要变化!今起实施

A股系列重要指数迎来样本股调整&#xff01; 此前&#xff0c;深交所及其全资子公司深证信息发布公告&#xff0c;将对深证成指、创业板指、深证100&#xff08;以下统称“深市中心指数”&#xff09;施行样本股定时调整。此次调整于6月17日&#xff08;今日&#xff09;正式施…

数据分析中的数学:从基础到应用20240617

数据分析中的数学&#xff1a;从基础到应用 数据分析离不开数学的支持&#xff0c;统计学和概率论是其重要组成部分。本文将通过几个具体的实例&#xff0c;详细讲解数据分析中常用的数学知识&#xff0c;并通过Python代码演示如何应用这些知识。 1. 描述性统计 基本概念和用…

VL53L4CD TOF开发(4)----单次测量(One-Shot)模式

VL53L4CD TOF开发.4--单次测量&#xff08;One-Shot&#xff09;模式 概述视频教学样品申请完整代码下载实现demo硬件准备技术规格系统框图应用示意图生成STM32CUBEMX选择MCU串口配置IIC配置 XSHUTGPIO1X-CUBE-TOF1app_tof.c详细解释主程序演示结果 概述 最近在弄ST和瑞萨RA的…