第四十天 Java基础学习(三十四)

这篇具有很好参考价值的文章主要介绍了第四十天 Java基础学习(三十四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Tomcat的初步使用

● Tomcat目录结构与介绍

•bin:用来存放Tomcat服务器的可执行程序,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)

•conf:用来存放Tomcat服务器的配置文件

•lib:用来存放Tomcat服务器的jar包

•logs:用来存放Tomcat服务器运行时输出的日志信息

•temp:用来存放Tomcat服务器运行时产生的临时数据

• webapps:用来存放Tomcat服务器部署的工程

• work:是Tomcat工作时的目录,用来存放Tomcat运行时jsp翻译为Servlet的源码和编译后的文件

● Tomcat启动与关闭

Tomcat的启动与关闭需要执行bin目录中的命令脚本。

注意:如果启动时闪退,是因为JDK的环境变量配置不规范,需要重新配置。

•Tomcat启动

运行startup.bat文件。

•Tomcat关闭

运行shutdown.bat文件或者直接关闭掉启动窗口。

●Tomcat的常见配置

•Tomcat配置文件介绍

Tomcat 的配置文件由4个xml组成,分别是context.xml、web.xml、server.xml、tomcat-users.xml。每个文件都有自己的功能与配置方法。

•context.xml

context.xml是Tomcat 公用的环境配置。Tomcat服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。

•web.xml

Web应用程序描述文件,都是关于是Web应用程序的配置文件。所有Web应用的web.xml文件的父文件。

•server.xml

是tomcat 服务器的核心配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件(pojo对象),通过对xml中元素的配置,实现对 tomcat中的各个组件和端口的配置。

•tomcat-users.xml

配置访问Tomcat的用户以及角色的配置文件。

●解决控制台乱码 

控制台产生乱码的原因是在Tomcat在输出日志中使用的是UTF-8编码,而我们中文的Windows操作系统使用的是GBK编码。由于编码格式不统一,所以出现了乱码。

解决方式:修改conf目录中的logging.properties文件重新指定的编码方式。如果还是不行,那么就删除该行即可:

      47 java.util.logging.ConsoleHandler.encoding = GBK

• 修改Tomcat监听端口

Tomcat默认监听端口为8080。可通过修改server.xml文件来改变Tomcat监听端口。

<Connector port="8080"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

•配置Tomcat并发数

Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。

这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。如果每个请求都含有很多的数据库操作,那么对于数据库的性能也是非常高的。

对于单台数据库服务器来说,允许客户端的连接数量是有限制的。并发能力问题涉及整个系统架构和业务逻辑、系统环境不同、Tomcat版本不同、JDK版本不同、以及修改的设定参数不同。并发量的差异还是满大的。并发数设置参数有如下几个:

•最大并发数:maxThreads="1000"

•初始化时创建的线程数:minSpareThreads="100"

•一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程:maxSpareThreads="500"

•指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理:acceptCount="700"

●Tomcat服务器在IDEA中的配置

1.update resources:表示当你是修改了静态资源,比如HTML、css等,就可以使用它来启动

2.update classes and resources:对类的修改使用它不生效,所以不建议使用

3.Redeploy:重部署,这个适合于你修改了配置文件、修改了代码,可以重新部署项目到服务器

4.restart server:重启服务器,当你修改了web.xml,最好重启服务器

● Servlet在Tomcat中运行的原理

1.启动Tomcat服务器(以下动作只在服务器启动的时候执行):

①解析web项目的web.xml文件

②通过反射创建所有的Servlet对象

2.Tomcat服务器接收请求

请求地址:http://localhost:8080/demo/HelloServlet

3.Tomcat服务器解析请求:

Tomcat服务器解析请求后,会诞生两个对象分别为:

HttpServletRequest对象:存储此次请求的所有相关信息(行、头、体),每次请求重新创建

HttpServletResponse对象:存储了此次请求的响应流对象,每次请求重新创建

4.Tomcat服务器查找请求的资源

Tomcat服务器根据请求地址从map集合中获取要调用的Servlet对象

    Servlet servlet=map.get("/HelloServlet");

5.Tomcat服务器调用Servlet对象的过程:

Class clazz= servlet.getclass();

Method method = clazz.getMethod(“service",HttpServletRequest.class,HttpServletResponse.class);

method.invoke(servlet,request,response);

注意:

   该流程由Tomcat底层接收请求后自动执行,看不到,需要做的是将实现了Servlet接口的代码提前放到Tomcat服务器中,这样请求被接收后就可以反射调用了。

●Servlet的生命周期

浏览器发起请求后达到Tomcat服务器;

服务器会解析请求信息得到HttpServletRequest和HttpServletResponse两个对象;

然后服务器再通过反射去调用Servlet的service方法去处理请求。

•Servlet对象在创建、初始化并使用后不应该销毁。如果使用完(请求处理完)就销毁,那么下次过来请求又得去创建Servlet对象,这样效率并不高,都使用同一个Servlet对象去处理请求,如果同时有10个请求过来访问Tomcat服务器,服务器会创建10个线程来处理请求,因为service方法不涉及到全局变量的修改操作,所以也不会有线程安全问题的。

•Servlet对象只会被创建及初始化一次。之后会驻留在内存当中。

•Servlet的创建与初始化的时机有两个:

1.延迟加载:Servlet在第一次被浏览器访问的时候创建与初始化的(目前代码用的就是这种方式,默认就是这种) 

2.预加载:Servlet在启动服务器的时候被创建与初始化的(该方式需要做一些配置,告诉Tomcat服务器在启动的时候就创建Servlet对象)

•Servlet对象是由Tomcat服务器创建的,之后就一直驻留在内存中处理请求。直到服务器停止后,Servlet才会被销毁

●Servlet使用流程

•代码编写流程

1.打开IDEA

2.在IDEA中创建一个Java Enterprise项目

3.在项目的src目录下创建一个com.bjsxt.controller包,在包中创建自己的类继承HttpServlet

4.重写service方法,在service方法中写的就是处理请求的业务逻辑代码

5.在web.xml中配置映射关系

6.启动tomcat服务器

7.在浏览器输入路径访问Servlet

● 代码执行流程

1.tomcat服务器启动时,会加载解析项目的web.xml文件

2.tomcat服务器根据解析的结果,创建所有在web.xml中配置的Servlet对象(假设都配置了load-on-startup)

3.tomcat服务器将所有创建好的Servlet对象以键值对的形式放在内存中,键是你配置的url-pattern,值是Servlet对象

4.在浏览器地址栏输入url地址

5.tomcat服务器接收到浏览器发送的http请求,然后进行解析,得到本次请求的两个对象,HttpServletRequest和HttpServletResponse。

6.tomcat服务器解析url地址中要访问的资源,根据资源路径找到提前创建好的Servlet对象

7.tomcat服务器根据反射调用Servlet对象的service方法,并将此次请求解析出的request和response对象传递给service执行

8.service方法执行完后,tomcat会按照http响应的格式将数据响应给浏览器

9.浏览器接收到tomcat的响应结果后,对其进行解析,以网页的形式展示给用户看。

●web.xml配置Servlet的几种方式

• web.xml的作用:配置了Servlet所在类的全路径;配置了Servlet访问的映射路径

• web.xml的加载时机:在服务器启动的时候完成web.xml文件的加载。

 文章来源地址https://www.toymoban.com/news/detail-596241.html

到了这里,关于第四十天 Java基础学习(三十四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始学习 Java:简单易懂的入门指南之多线程(三十四)

    1.1简单了解多线程 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。 1.2并发和并行 并行:在同一时刻,有多个指令在多个CPU上同时执行。 并发:在同一时刻,有多个指令在单个CPU上交

    2024年02月08日
    浏览(67)
  • 【从零开始学习JAVA | 第四十四篇】TCP协议中的握手与挥手

    TCP(传输控制协议)作为计算机网络中的重要协议,扮演着确保数据可靠传输的角色。在TCP的通信过程中,握手与挥手问题是不可忽视的关键环节。握手是指在建立连接时,客户端与服务器相互确认彼此的身份并同步参数,确保双方准备就绪;而挥手则是在终止连接时,双方

    2024年02月11日
    浏览(52)
  • 第三十九天 Java基础学习(三十三)

    一、Servlet Java类。由Servlet容器(Tomcat)进行编译-.class -运行 产生响应结果返回给客户端浏览器。 生命周期:(方法调用流程) init:初始化方法。在第一次访问servlet时被调用一次。 service:完成servlet所做功能。每次访问servlet时都会被调用。 doGet0:只有get请求。才能访问。 doPos

    2024年02月15日
    浏览(41)
  • MySQL基础篇 | 经典三十四道练习题

    ✅作者简介:大家好我是@每天都要敲代码,希望一起努力,一起进步! 📃个人主页:@每天都要敲代码的个人主页 🔥系列专栏:MySQL专栏 目录 1. 取得每个部门最高薪水的人员名称 2. 哪些人的薪水在部门的平均薪水之上 3. 取得部门中(所有人的)平均的薪水等级 4. 用不同的

    2024年02月01日
    浏览(44)
  • C++学习笔记(三十四):c++ array

    本节介绍c++标准库模板中的array和c风格的array的区别,及什么时候使用std::array。

    2024年01月23日
    浏览(50)
  • 【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化

    通过组件的生命周期来完成网络请求,网络请求的异步代码直接放在组件中 通过redux来管理异步网络请求 在store中引入中间件 redux-thunk 构建 fetchHomeMultidataAction ,将原本在组件中的异步请求代码放入到actionCreators.js中 改写原来的category.jsx,派发异步请求的dispatch 查看运行结果

    2024年02月15日
    浏览(69)
  • k8s学习(三十四)飞腾2000+麒麟V10离线部署k8s

    需要在飞腾芯片和麒麟V10操作系统下安装k8s,目前在飞腾2000下安装成功,飞腾2500还没有成功,现介绍飞腾2000下的安装流程。 准备多台机器,其中一台作为K8S主节点,其他作为从节点。 这里只准备了2台机器,一台作为主节点,一台作为从节点。 k8s版本为1.20.2 功能 IP k8s主节

    2024年02月01日
    浏览(89)
  • 华清远见作业第四十天——Qt(第二天)

    使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为\\\"admin\\\",密码是否为\\\"123456\\\",如果账号密码匹配成功,则输出“登录成

    2024年02月22日
    浏览(40)
  • 从零开始的力扣刷题记录-第四十天

    题目描述: 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。 题解: 其实和二进制转换是一样的,除以7取余再倒序取出结果就可以了 代码(Go): 题目描述: 给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 t

    2024年02月06日
    浏览(43)
  • ElasticSearch7.3学习(三十一)----Logstash基础学习

    一、Logstash基本介绍 Logstash 是一个功能强大的工具,可与各种部署集成。 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据(文件、数据库......)。logstash简单来说就是一个 数据抽取工具 ,将数据从一个地方转移到另一个地方。 Logstash 是 Elastic 栈非

    2023年04月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包