Tomcat 知识点总结,看看你掌握的怎么样?

首先看一下 tomcat 的目录结构

Tomcat 知识点总结,看看你掌握的怎么样?

核心配置文件在 conf 目录下

Tomcat 知识点总结,看看你掌握的怎么样?

Server.xml(重点)

==============

其中最重要的就是 server.xml,主要配置了 tomcat 容器的所有配置。下面来看一下其中有哪些配置。

Server

======

是 server.xml 的根元素,用于创建一个 Server 实例,默认的实现是

port:Tomcat监听的关闭服务器的端口

shutdown:关闭服务器的指令字符串。

Server 内嵌的子元素为 Listener、GlobalNamingResources、Service。

配置的5个Listener 的含义:

GlobalNamingResources 中定义了全局命名服务

Service

=======

用于创建 Service 实例,内嵌的元素为:Listener、Executor、Connector、Engine,其中 : Listener 用于为Service添加生命周期监听器, Executor 用于配置Service 共享线程池,Connector 用于配置Service 包含的链接器, Engine 用于配置Service中链接器对应的Servlet 容器引擎。默认 Service 就叫 Catalina。

Executor

=========

默认情况,Service 并未配置共享线程池,各个连接器使用的都是各自的线程池(默认size为10)。如果我们想添加一个线程池,可以在 Service 标签中添加如下配置

<Executor name=“tomcatThreadPool”

namePrefix=“catalina-exec-”

maxThreads=“200”

minSpareThreads=“100”

maxIdleTime=“60000”

maxQueueSize=“Integer.MAX_VALUE”

prestartminSpareThreads=“false” threadPriority=“5”

className=“org.apache.catalina.core.StandardThreadExecutor”/>

相关属性说明:

Tomcat 知识点总结,看看你掌握的怎么样?

Connector

==========

用于创建连接器实例,默认情况下,server.xml 配置了两个连接器,一个支持 HTTP 协议,一个支持 AJP 协议。

1) port: 端口号,Connector 用于创建服务端Socket 并进行监听, 以等待客户端请求链接。如果该属性设置为0,Tomcat将会随机选择一个可用的端口号给当前Connector 使用。

2) protocol : 当前Connector 支持的访问协议。 默认为 HTTP/1.1 , 并采用自动切换机制选择一个基于 JAVA NIO 的链接器或者基于本地APR的链接器(根据本地是否含有Tomcat的本地库判定)。如果不希望采用上述自动切换的机制, 二是明确指定协议, 可以使用以下值。

Http协议:

org.apache.coyote.http11.Http11NioProtocol , 非阻塞式 Java NIO 链接器

org.apache.coyote.http11.Http11Nio2Protocol , 非阻塞式 JAVA NIO2 链接器

org.apache.coyote.http11.Http11AprProtocol , APR 链接器

AJP协议:

org.apache.coyote.ajp.AjpNioProtocol , 非阻塞式 Java NIO 链接器

org.apache.coyote.ajp.AjpNio2Protocol ,非阻塞式 JAVA NIO2 链接器

org.apache.coyote.ajp.AjpAprProtocol , APR 链接器

3) connectionTimeOut : Connector 接收链接后的等待超时时间, 单位为 毫秒。 -1 表示不超时。

4) redirectPort:当前Connector 不支持SSL请求, 接收到了一个请求, 并且也符合securityconstraint 约束, 需要SSL传输,Catalina自动将请求重定向到指定的端口。

5) executor : 指定共享线程池的名称, 也可以通过maxThreads、minSpareThreads 等属性配置内部线程池。

6) URIEncoding : 用于指定编码URI的字符编码, Tomcat8.x版本默认的编码为 UTF-8 , Tomcat7.x版本默认为ISO-8859-1。

Engine

======

Engine 作为Servlet 引擎的顶级元素,内部可以嵌入: Cluster、Listener、Realm、Valve和 Host。

1) name: 用于指定Engine 的名称, 默认为Catalina 。该名称会影响一部分Tomcat的存储路径(如临时文件)。

2) defaultHost : 默认使用的虚拟主机名称, 当客户端请求指向的主机无效时, 将交由默认的虚拟主机处理, 默认为localhost。 在 ip 地址解析时首先根据defaultHost 设置的 Host从 Host 列表中找对用的 Host 跳转,如果没有再从 Host 列表中查找对应的,如果列表中没有,那么就会访问不到。

除此之外,在默认的配置文件中还包含 Realn 标签,如下:

标签是用来配置用户权限的。

首先说一下 tomcat 的权限管理。因为在 tomcat 中可以配置多个 web 项目,而 tomcat 为这些项目的管理创建了管理页面,也就是默认 webapps 下 host-manager 与 manager 文件夹的项目页面,为了保证安全性,访问这两个项目需要设置权限,但是如果对每个新用户都单独的设置权限比较繁琐麻烦,所以在 tomcat 中定义了几种不同的权限,我们可以自己配置 “角色”(可以看作是特定权限的集合) 和 “用户”(设置登录名、密码,与角色相关联),然后就可以通过自定义的 “用户” 去访问管理页面。“角色” 和 “用户” 的配置默认可以在 tomcat-users.xml 中配置。当 tomcat 启动后,就会通过 conf 目录下的 server.xml 中的 Realm 标签来检查权限。

支持多种 Realm 管理方式:

1 JDBCRealm 用户授权信息存储于某个关系型数据库中,通过JDBC驱动获取信息验证

2 DataSourceRealm 用户授权信息存储于关于型数据中,通过JNDI配置JDBC数据源的方式获取信息验证

3 JNDIRealm 用户授权信息存储在基于LDAP的目录服务的服务器中,通过JNDI驱动获取并验证

4 UserDatabaseRealm 默认的配置方式,信息存储于XML文档中 conf/tomcat-users.xml

5 MemoryRealm 用户信息存储于内存的集合中,对象集合的数据来源于xml文档 conf/tomcat-users.xml

6 JAASRealm 通过JAAS框架访问授权信息

上面代码块中可以看出Realm就是使用默认的 UserDatabaseRealm 方式配置。而它的 resourceName 就对应之前 中配置的 conf 目录下的 tomcat-users.xml 文件。

如果在Engine下配置Realm, 那么此配置将在当前Engine下的所有Host中共享。 同样,如果在Host中配置Realm , 则在当前Host下的所有Context中共享。底层会覆盖掉上层对同一个资源的配置。

Host

====

用于配置一个虚拟主机, 它支持以下嵌入元素:Alias、Cluster、Listener、Valve、Realm、Context。一个 Engine 标签下可以配置多个 Host。

属性说明:

1) name: 当前Host通用的网络名称, 必须与DNS服务器上的注册信息一致。 Engine中包含的Host必须存在一个名称与Engine的defaultHost设置一致。

2) appBase: 当前Host的应用基础目录, 当前Host上部署的Web应用均在该目录下(可以是绝对目录,相对路径)。默认为webapps。

3) unpackWARs: 设置为true, Host在启动时会将appBase目录下war包解压为目录。设置为 false, Host将直接从war文件启动。

4) autoDeploy: 控制tomcat是否在运行时定期检测并自动部署新增或变更的web应用。

Context

=======

用于配置一个 Web 应用。

属性描述:

1) docBase:Web应用目录或者War包的部署路径。可以是绝对路径,也可以是相对于 Host appBase的相对路径。

2) path:Web应用的Context 路径。如果我们Host名为localhost, 则该web应用访问的根路径为:http://localhost:8080/myApp。它支持的内嵌元素为:CookieProcessor, Loader, Manager,Realm,Resources,WatchedResource,JarScanner,Valve。

tomcat-user.xml(权限管理)

=====================

上面的 realm 标签说到这个文件是配合 realm 标签来设置用户权限的,所以就来看一下具体是如何设置的。

首先看一下默认配置

<?xml version="1.0" encoding="UTF-8"?>

<tomcat-users xmlns=“http://tomcat.apache.org/xml”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://tomcat.apache.org/xml tomcat-users.xsd”

version=“1.0”>

标签内有两个子标签, 和 ,role 是用来设置 “角色”,而 user 是用来设置登陆 “用户” 的。管理页面是 webapps 下的 host-manager 与 manager 目录,分别来管理所有主机以及所有的 web项目。如果我们只将注释的部分打开,还是不能访问管理页面,因为 tomcat 设置了特定的权限名,首先是 manager:

manager-gui 允许访问html接口(即URL路径为/manager/html/*)

manager-script 允许访问纯文本接口(即URL路径为/manager/text/*)

manager-jmx 允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)

manager-status 允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)

对于 host-manager:

admin-gui 允许访问html接口(即URL路径为/host-manager/html/*)

admin-script 允许访问纯文本接口(即URL路径为/host-manager/text/*)

admin-jmx 允许访问JMX代理接口(即URL路径为/host-manager/jmxproxy/*)

admin-status 允许访问Tomcat只读状态页面(即URL路径为/host-manager/status/*)

如果我们想让某个角色直接能访问这两个项目页面,可以将 roles 配置成下面的设置,然后就可以访问 manager 和 host-manager 页面了。

Web.xml(不常用)

=============

web.xml 目前已经很少再用了,所以这部分内容简单了解下即可。web.xml 文件分为 tomcat 安装目录的 conf 下的以及各个项目的 WEB-INF 目录下的。conf 下的是全局配置,所有 web 项目都会受到影响,而 WEB-INF 下的只会作用于当前项目,但是如果与 conf 下的 web.xml 配置冲突,那么就会覆盖掉 conf的。

ServletContext 初始化全局参数

======================

K、V键值对。可以在应用程序中使用

javax.servlet.ServletContext.getInitParameter()方法获取参数值。

contextConfigLocation

classpath:applicationContext-*.xml

Spring Config File Location <

  

会话设置

=====

用于配置Web应用会话,包括 超时时间、Cookie配置以及会话追踪模式。它将覆盖server.xml 和 context.xml 中的配置。

30

JESSIONID

www.itcast.cn

/

Session Cookie

true

false

3600

COOKIE

1) session-timeout : 会话超时时间,单位:分钟

2) cookie-config: 用于配置会话追踪Cookie

name:Cookie的名称

domain:Cookie的域名

path:Cookie的路径

comment:注释

http-only:cookie只能通过HTTP方式进行访问,JS无法读取或修改,此项可以增加网站访问的安全性。

secure:此cookie只能通过HTTPS连接传递到服务器,而HTTP 连接则不会传递该信息。注意是从浏览器传递到服务器,服务器端的Cookie对象不受此项影响。

max-age:以秒为单位表示cookie的生存期,默认为-1表示是会话Cookie,浏览器关闭时就会消失。

3) tracking-mode :用于配置会话追踪模式,Servlet3.0版本中支持的追踪模式:COOKIE、URL、SSL

A. COOKIE : 通过HTTP Cookie 追踪会话是最常用的会话追踪机制, 而且Servlet规范也要求所有的Servlet规范都需要支持Cookie追踪。

B. URL : URL重写是最基本的会话追踪机制。当客户端不支持Cookie时,可以采用URL重写的方式。当采用URL追踪模式时,请求路径需要包含会话标识信息,Servlet容器会根据路径中的会话标识设置请求的会话信息。如: http://www.myserver.com/user/index.html;jessionid=1234567890。

C. SSL : 对于SSL请求, 通过SSL会话标识确定请求会话标识。

Servlet 配置

==========

Servlet 的配置主要是两部分, servlet 和 servlet-mapping :

myServlet

cn.itcast.web.MyServlet

fileName

init.conf

1

true

myServlet

*.do

/myservet/*

1)servlet-name : 指定servlet的名称, 该属性在web.xml中唯一。

2)servlet-class : 用于指定servlet类名

3)init-param: 用于指定servlet的初始化参数, 在应用中可以通过HttpServlet.getInitParameter 获取。

4) load-on-startup: 用于控制在Web应用启动时,Servlet的加载顺序。 值小于0,web应用启动时,不加载该servlet, 第一次访问时加载。

5) enabled: true , false 。 若为false ,表示Servlet不处理任何请求。

6) url-pattern: 用于指定URL表达式,一个 servlet-mapping可以同时配置多个 url-pattern。

Servlet 中文件上传配置:

uploadServlet

cn.itcast.web.UploadServlet

C://path

10485760

10485760

0

1) location:存放生成的文件地址。

2) max-file-size:允许上传的文件最大值。 默认值为-1, 表示没有限制。

3) max-request-size:针对该 multi/form-data 请求的最大数量,默认值为-1, 表示无限制。

4) file-size-threshold:当数量量大于该值时, 内容会被写入文件。

Listener 配置

============

Listener用于监听servlet中的事件,例如context、request、session对象的创建、修改、删除,并触发响应事件。Listener是观察者模式的实现,在servlet中主要用于对context、request、session对象的生命周期进行监控。在servlet2.5规范中共定义了8中Listener。在启动时,ServletContextListener的执行顺序与web.xml 中的配置顺序一致, 停止时执行顺序相反。

org.springframework.web.context.ContextLoaderListener

Filter 配置

=========

fifilter 用于配置web应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加密、数据转换等操作, 配置如下:

myFilter

cn.itcast.web.MyFilter

true

language

CN

myFilter

/*

1) filter-name: 用于指定过滤器名称,在web.xml中,过滤器名称必须唯一。

2) filter-class : 过滤器的全限定类名, 该类必须实现Filter接口。

3) async-supported: 该过滤器是否支持异步

4) init-param :用于配置Filter的初始化参数, 可以配置多个, 可以通过 FilterConfig.getInitParameter获取

5) url-pattern: 指定该过滤器需要拦截的URL。

欢迎页面配置

======

index.html

index.htm

index.jsp

尝试请求的顺序,从上到下。

错误页面配置

======

error-page 用于配置Web应用访问异常时定向到的页面,支持HTTP响应码和异常类两种形式。

404

/404.html

500

/500.html

java.lang.Exception

/error.jsp

安全与优化

=====

安全

==

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

image

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

欢迎页面配置

======

index.html

index.htm

index.jsp

尝试请求的顺序,从上到下。

错误页面配置

======

error-page 用于配置Web应用访问异常时定向到的页面,支持HTTP响应码和异常类两种形式。

404

/404.html

500

/500.html

java.lang.Exception

/error.jsp

安全与优化

=====

安全

==

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

[外链图片转存中…(img-bLvEXFDr-1714479172965)]

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值