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");

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

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

相关文章

[个人感悟] 缓存应该考察哪些问题?

前言 缓存, 根据冯诺依曼计算机模型, 无非是为了更高效的交互, 使用内存IO替换本地磁盘IO. 又因为内存的稀缺性, 其必然存储的是热点数据, 且较小的数据. [虽然直至今日, 已有使用缓存作为数据库的使用, 但是与磁盘IO相比, 其价格仍是数倍之多.] 当涉及缓存问题时, 又分为本地…

调用第三方系统的签名设计与校验实例讲解与实践

在现代软件开发中&#xff0c;调用第三方系统API已经成为常见需求。为了保证数据传输的安全性和完整性&#xff0c;许多API采用了签名机制。本文将详细讲解如何设计与校验调用第三方系统的签名&#xff0c;以确保双方通信的安全和可靠。 #### 一、签名机制的意义 签名机制主要…

C语言之顺序结构以及程序调试的debug宏

一&#xff1a;C语言中的顺序结构 1:最浅显的顺序结构理解&#xff1a;三种结构之一 &#xff08;1&#xff09;代码执行的时候没有遇到判断跳转或者循环&#xff0c;默认是顺序执行的。执行完上一句则开始执行下一句。 &#xff08;2&#xff09;顺序结构说明cpu的工作状态&a…

类Copy方法:BeanUtils.copyProperties

类Copy方法&#xff1a;BeanUtils.copyProperties 需求场景 比如有时候我们想要把数据库里面的数据导出到excel表中&#xff0c;比如想要把数据库中的用户数据导出到excel表格中&#xff1b; 假设我们程序代码中与数据库对接的实体类是User&#xff0c;用于展示到前端的实体类…

Fiddler抓包工具介绍

下载 下载:Web Debugging Proxy and Troubleshooting Tools|Fiddler 进去要填一个表 汉化版 百度网盘 请输入提取码 提取码&#xff1a;xq9t 下载过附件之后分别把两个文件 点开fiddler就ok了 配置https fiddler要想抓到https包(解密的),点击tools->options勾选三个对…

总结之Docker(四)——镜像修改非ROOT用户权限后生成新镜像并发布

Docker拉去目标镜像 docker pull redis:6.2.5如果出现拉去过程超时&#xff0c;或者连接失败。 添加镜像加速器&#xff0c;以阿里云为例&#xff0c;阿里云目前推广提供镜像加速器&#xff0c;需要登录。 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 生成…

HMI(人机交互)应用的15大领域,欢迎补充。

HMI&#xff08;Human-Machine Interface&#xff0c;人机界面&#xff09;可以应用于许多不同的场景和行业&#xff0c;包括但不限于以下几个方面&#xff1a; 工业控制系统&#xff1a;HMI在工业生产中广泛应用&#xff0c;用于监控和控制生产过程。例如&#xff0c;工厂中的…

NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE ida 可能会把 一个数组或字符串拆开&#xff0c;可以通过计算地址&#xff0c;知道是一起的 也有的会藏在汇编窗口 Segments IDA的Segments窗口 &#xff1a;shiftf7 https://www.cnblogs.com/sch01ar/p/9477697.html ida 各种窗口也是需要…

AMD平台,5600X+6650XT,虚拟机安装macOS 14(2024年6月)

AMD平台安装macOS 14的麻烦&#xff0c;要比Intel平台多的多&#xff0c;由于macOS从13开始&#xff0c;对CPU寄存器的读取进行了改变&#xff0c;导致AMD平台只要安装完macOS 13及以后版本&#xff0c;开机后就报五国语言错误&#xff0c;不断重启。改vmx文件&#xff0c;被证…

mongodb command

1. start and stop ./mongod --dbpath -dbpath /data/shard1/db --logpath -dbpath /data/shard1/db/logs/mongodb.log --fork mongod --shutdown --dbpath /data/shard1/db MongoDB基础篇-03-启动与关闭_mongodb启动和关闭-CSDN博客 2. 查看分片数据分布 mongo mongo01.c…

用React编写一个密码组件表单

theme: condensed-night-purple highlight: atelier-cave-light 背景介绍 我们在使用网站或者应用程序的登录界面或创建帐户界面时&#xff0c;往往避免不了需要用户输入密码这一步骤&#xff0c;而用户是否可以选择看见他们输入的密码是十分重要的一项功能。尤其是在当输入的…

Java面向对象-final关键字

Java面向对象-final关键字 一、final1、修饰变量2、修饰方法3、修饰类4、案例 一、final 可以修饰变量、方法、类 1、修饰变量 final修饰一个变量&#xff0c;变量的值不可以改变&#xff0c;这个变量就变成一个字符常量&#xff0c;约定俗称的规定&#xff1a;名字大写。 f…

【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误

文章目录 一. 报错现象二. 方案二&#xff1a;重新编译打包flink-connector-cdc1. 排查脚本2. 重新编译打包flink-sql-connector-mysql-cdc-2.4.0.jar3. 测试flink环境 三. 方案一&#xff1a;改造flink连接器 一. 报错现象 flink sql任务是&#xff1a;mysql到hdfs的离线任务&…

IPTCP知识

1. IP&#xff1a; IP地址是一个32位的二进制数&#xff0c;通常被分割为4个“8位二进制数”IP地址分类&#xff1a;A类地址、B类地址、C类地址、D类地址、E类地址 A类地址分配给规模特别大的网络使用&#xff0c;B类地址分配给一般的中型网络&#xff0c;C类地址分配给小型网…

短URL服务设计

引言 在营销系统里&#xff0c;为了增加系统的活跃用户数&#xff0c;经常会有各种各样的营销活动。这类活动几乎都是为了充分利用存量用户的价值&#xff0c;促使他们分享产品或App以达到触达到更多用户的目的。又或者是出于营销目的&#xff0c;群发优惠券触达短信这种场景。…

MVC 框架安全

在现代 Web 开发中&#xff0c;使用 MVC 架构是一种流行的做法。MVC 是 Model-View-Controller 的缩写&#xff0c;它将 Web 应用分为三层&#xff0c;View 层负责用户视图、页面展示等工作&#xff1b;Controller 负责应 用的逻辑实现&#xff0c;接收 View 层传入的用户请求&…

016基于SSM+Jsp的医院远程诊断系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

HDU - 5651 xiaoxin juju needs help(Java JS Python C C++)

题目来源 Problem - 5651 (hdu.edu.cn) 题目描述 众所周知&#xff0c;小新是一位才华横溢的程序员。当他还是小学六年级的学生时&#xff0c;他就知道回文字符串了。 今年夏天&#xff0c;他在腾讯实习。一天&#xff0c;他的领导来找小新帮忙。他的领导给了他一个字符串&a…

MySQL之优化服务器设置(五)

优化服务器设置 高级InnoDB设置 innodb_old_blocks_time InnoDB有两段缓冲池LRU(最近最少使用)链表&#xff0c;设计目的是防止换出长期很多次的页面。像mysqldump产生的这种一次性的(大)查询&#xff0c;通常会读取页面到缓冲池的LRU列表&#xff0c;从中读取需要的行&…

Android 支持库迁移到AndroidX

对应官方文档&#xff1a; developer.android.com/jetpack/and… 简单点说就是&#xff0c;对App开发者而言&#xff0c;AndroidX更加友好&#xff0c;因为我们引入时&#xff0c;只需要关注AndroidX中具体的需要引入的构件版本即可。且大部分具体的构件&#xff0c;具有一致的…