第四十天 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监听端口。

•配置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文件的加载。

 

你可能感兴趣的:(学习)