tomcat的简介

article/2025/5/20 8:55:33

1. tomcat是什么

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。
除tomcat外,web应用服务器还有jetty,weblogic,websphere,undertow等。
注意:有时我们会将web叫做web服务器,实际上tomcat更准确的叫法是应用服务器。 web服务器主要是指专门来处理html,css,图片等静态资源的服务器,必要apache服务器。

2. 目录结构及作用

tomcat目录结构的截图(tomcat8.5.42):


 

 

  • bin
    bin目录主要要来存放tomcat命令的目录,里面主要有两种类型的文件,一种是以.bat为扩展名的文件,一类是以.sh为扩展名的文件。其中.bat的文件是在windows平台的命令,.sh的文件是在linux平台的文件。
    该目录中主要的文件有一下几个:
    1) setclasspath 用于设置Java环境变量,如JAVA_HOME,JRE_HOME等
    2) catalina 该文件也是用来配置环境的,如CATALINA_HOME,及tomcat的安装路径,我们可以在此目录设置Java的启动参数,如最大最小堆空间大小:
    例如:
    JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx512m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=512m"
    3) startup 用来给启动tomcat,当双击startup后,tomcat启动,读取catalina脚本配置启动环境,catalina又会调用setclasspath脚本,用来设置jdk需要的环境变量,如果系统没有定义JAVA_HOME环境变量,则在会报错退出。
    4) shutdomn 用于停止tomcat服务

  • conf
    该目录主要用来存放tomcat的配置文件, 重要的配置文件如下:
    1)server.xml 用于配置端口号,虚拟主机,默认加载项目,请求编码等等,是tomcat中最常使用的配置文件
    2)web.xml 为所有的部署在该tomcat下的web应用通用的配置,与每个web应用的web.xml配合使用。例如:
    DefaultServlet,就算系统中没有配置任何的servlet,tomcat依然可以处理html,js,css等静态资源的请求,就是这个servelt起的作用;
    JspServlet,当请求jsp页面时,则会用到这个servlet。
    session过期时间配置session-timeout参数,也是在这个web.xml中配置的。
    3)catalina.policy 这个是tomcat安全相关的配置文件,主要使用安全策略文件可以在tomcat启动是附上 -security
    4) catalina.properties 安全配置,类加载设置,不需扫描的类,字符缓存等配置
    5)context.xml 所有在tomcat中发布的应用都会使用的公用配置,例如:发布的web应用的描述文件的位置及名称,及session持久化配置等。session持久化示例请参考第三部分的示例
    6)tomcat-users.xml
    tomcat的角色(授权用户)配置文件,用于访问tomcat管理应用程序时的安全性设置,用server.xml中引用的默认的用户数据库域(UserDatabase Realm)使用它,所有的凭据都是默认被注释的
    7)tomcat-users.xsd 定义了 tomcat-users.xml 所使用到的标签,即tomcat-user.xml 的结构定义文件

  • lib
    所有的部署在tomcat中的web应用公用的jar包

  • logs
    用于保存tomcat运行时的日志数据,

    • catalina.{yyyy-MM-dd}.log tomcat自己的运行日志
    • localhost.{yyyy-MM-dd}.log 应用初始化日志,包含tomcat的启动和暂停时的运行日志,没有catalina.{yyyy-MM-dd}.log记录的全,只包含一部分
    • localhost_access_log.{yyyy-MM-dd}.txt tomcat访问日志,包括请求时间,资源,返回的状态码
    • manager.{yyyy-MM-dd}.log 是tomcat管理控制台应用的专有日志
    • 在Linux系统中,tomcat将日志记入catalina.out文件,可以使用 tail -f catalina.out 进行跟踪。
  • temp
    存放tomcat在运行期间产生的临时文件,可以清空该目录的文件,但不能删除该目录,可能会引发不可预知的错误。

  • webapps
    tomcat默认的项目部署目录,在默认情况下,如果要发布应用可以直接将应用的war包放入该目录即可完成发布,也可以直接发布未压缩的目录,但要求该目录需要符合web应用规范。

    • doc tomcat文档
    • examples tomcat自带的web应用示例
    • host-manager tomcat主机管理应用程序
    • manager tomcat的管理应用程序
    • ROOT 如果项目部署为ROOT,则在地址栏直接输入:http://ip:port/ 就可以访问,即不用输入应用名
  • work
    用来部署应用中由jsp文件生成的java文件和编译之后的class文件,可以删除,删除后可以迫使tomcat重新生成jsp对用的java和class文件。

  • 其他文件

    • LICENSE tomcat开源许可文件
    • NOTICE tomcat说明文件
    • RELEASE-NOTES 版本说明文件
    • README.md 即 README.txt tomcat帮助文件

3. session持久化示例

1)主要配置文件
session持久化主要是在context.xml文件中进行配置的,context.xml文件可以出现在两个位置上,其作用域不同,配置方式一致:

  • tomcat安装目录\conf 目录中的context.xml配置文件,该文件中的配置对部署在该tomcat中的所用应用都有效
  • 所开发的web应用的META-INFO目录中,创建一个context.xml配置文件,放在此处的配置,只对所属的web应用有效

<?xml version="1.0" encoding="UTF-8"?>
<Context><!-- maxIdleSwap:  自上次访问session以来,session数据应被保存到stroe中的时间间隔,该值应该大于等于maxIdleBackup参数的值maxIdleBackup: 自上次访问会话后,会话有资格保留到会话存储区之前的时间间隔(秒),-1为默认值,表示禁用saveOnRestart: 重启是是否持久化sessionmaxActiveSession:session总数大于该参数设置的值时,会将超出部分空闲的session换出--><Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true" maxIdleBackup="1" maxIdleSwap="1"><Store className="org.apache.catalina.session.FileStore" directory="d:/aaa" /></Manager></Context>


2) 示例:

  • 创建web工程
  • 加入tomcat依赖
  • 创建一个Customer实体bean,之后会将该bean放入session,注意:因为session需要进行持久化,所以该bean需要实现两个接口,分别为:HttpSessionActivationListener,Serializable
  • 创建一个servlet,在用户访问该servlet时,将Customer存入session,已测试持久化

具体代码:
Customer:

public class Customer implements HttpSessionActivationListener, Serializable {private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void sessionDidActivate(HttpSessionEvent event) {String name = ((Customer)event.getSession().getAttribute("cust")).getName();System.out.println("钝化之后 = " + name);}@Overridepublic void sessionWillPassivate(HttpSessionEvent event) {String name = ((Customer)event.getSession().getAttribute("cust")).getName();System.out.println("钝化之前 = " + name);}@Overridepublic String toString() {return "Custom [hljs-string" style="color: #d69d85; line-height: 160%; box-sizing: content-box;">", name=" + name + "]";}	
}

servlet:

@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Object cust_obj = req.getSession().getAttribute("cust");		if(Objects.isNull(cust_obj)) {Customer cust = new Customer();cust.setId("cust_001");cust.setName("张三");System.out.println("将客户信息放入session");req.getSession().setAttribute("cust", cust);} else {System.out.println("客户信息已经放入session");String name = ((Customer)req.getSession().getAttribute("cust")).getName();System.out.println("从session获取客户信息,name = " + name);}}
}

http://chatgpt.dhexx.cn/article/2mkUgUX4.shtml

相关文章

仿酷狗音乐播放器开发日志十八——换肤功能的实现二:改变控件和窗体透明度(附挂件类源码)

转载请说明原出处&#xff0c;谢谢~~ 昨天把大致布局分析了一下&#xff0c;昨天晚上把布局写好实现了&#xff0c;今天把大致的功能完成了一下&#xff0c;现在的外观已经和原酷狗的换肤界面完全一样&#xff0c;其中的调整播放列表透明度和设置整个软件透明度的代码已经完成了…

stylish网站换肤与网站分析妙用

作者&#xff1a;吴甜甜 个人博客网站&#xff1a; wutiantian.github.io 微信公众号&#xff1a; 吴甜甜的博客 stylish是火狐浏览器等平台的换肤插件 结合F12开发者功能可以进行&#xff1a; 背景色看起来不舒服&#xff0c;想换种颜色页面有一些内容你不想看到&#xff0c…

Unity3D 模型换肤技术

最近在看Unity3D的人物模型和动画。所以今天先说下人物的换装吧。相信大家都玩过网游吧&#xff0c;没有玩过的也相信见过&#xff0c;就是网游或者单机游戏里的人物会有更换服装&#xff0c;更换武器的功能。如果外形(mesh)是一样的&#xff0c;那么把贴图换下就好&#xff0c…

C++ QT结合FFmpeg实战开发视频播放器-13视频播放器换肤功能实现(1)背景属性添加

视频播放器换肤功能实现(1)背景属性添加 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 视频播放器换肤功能实现(1)背景属性添加 回到我们的编辑器源码中&#xff0c; 运行程序&am…

iOS端实现节日换肤

本文是我在网上看到一篇不错的文章,因为之前没接触过,所以特意转过来,和大家一起分享下..以下正文:一、问题的提出  不知道大家有没有发现, 元旦期间, 很多APP界面里的图标都换成了具有节日气氛的样式,而在过了元旦节之后, 这些图标又悄无声息的变回了本来的面貌.   这些具…

换肤 与 静态库

一 换肤 基本的换肤功能实现选中皮肤保存至系统偏好 // 记录用户选中的皮肤[[NSUserDefaults standardUserDefaults] setObject:skinColor forKey:"skinColor"];[[NSUserDefaults standardUserDefaults] synchronize];123123 抽取SkinTools单例&#xff0c;简化视图…

C++ QT结合FFmpeg实战开发视频播放器-15换肤功能的后台实现

作者&#xff1a;虚幻私塾 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、换肤功能的后台实现 定义changeBackground函数&#xff0c;让qml去调用这个函数来实现换肤功能&#xff0c; 函数的实现调用了set…

Element UI主题换肤功能(基于vue-element-admin框架)

环境信息&#xff1a; 日期&#xff1a;2022-08-05 node版本&#xff1a;v14.15.4 "sass": "1.26.8", "sass-loader": "8.0.2", 本次实现的是基于花裤衩大佬的 vue-element-admin 或者 vue-admin-template 的前端框架实现的主题换肤功…

JavaScript:演示Ajax的get和post请求,练习选顶卡和换肤案例

JavaScript:演示Ajax的get和post请求&#xff0c;练习选顶卡和换肤案例 Ajax 异步请求 特别提示: 异步请求不要使用live server插件,必须创建一个本地服务器环境 同步与异步 以前端请求,后端响应为例 同步: 前端发请求, 必须等到后端响应完成,才允许发送另一个请求异步: 前端…

Android换肤之Android-skin-support

前言 之前做个APP需要用到换肤&#xff0c;在githup上面找了很久&#xff0c;终于找到一款功能强大、基本能够满足产品需求的换肤框架&#xff0c;那就是Android-skin-support&#xff0c;这个框架换肤功能很强大、不管是白天、黑夜还是任意颜色、图片的皮肤包都可以&#xff…

对 Android 应用换肤方案的总结

作者&#xff1a;me 虽然现在已经有很多不错的换肤方案&#xff0c;但是这些方案或多或少都存在自己的问题。在这篇文章中&#xff0c;我将对 Android 现有的一些动态换肤方案进行梳理&#xff0c;对其底层实现原理进行分析&#xff0c;然后对开发一个新的换肤方案的可能性进行…

前端换肤,聊一聊主题切换那些事

一些网站通常会提供白天、夜间模式&#xff0c;以及自定义主题等等&#xff0c;这种主题切换也就是本文说的前端换肤。 这次案例用的是白天和夜间模式的切换&#xff0c;在做换肤之前&#xff0c;得先知道一件事情&#xff1a;css的变量定义&#xff0c;对变量定义不熟悉的同学…

android 皮肤,Android换肤

前言 之前做个APP需要用到换肤&#xff0c;在githup上面找了很久&#xff0c;终于找到一款功能强大、基本能够满足产品需求的换肤框架&#xff0c;那就是Android-skin-support&#xff0c;这个框架换肤功能很强大、不管是白天、黑夜还是任意颜色、图片的皮肤包都可以&#xff0…

Android 应用换肤方案的总结

虽然现在已经有很多不错的换肤方案&#xff0c;但是这些方案或多或少都存在自己的问题。在这篇文章中&#xff0c;我将对 Android 现有的一些动态换肤方案进行梳理&#xff0c;对其底层实现原理进行分析&#xff0c;然后对开发一个新的换肤方案的可能性进行总结。 1、通过自定…

Android 插件化换肤方案

效果 实现流程 实现LayoutInflater.Factory2这个接口&#xff0c;实现onCreateView方法(主要仿照系统原来LayoutInflater.createView()方法的实现)&#xff0c;此处可以拿到页面中所有的View&#xff0c;判断有没有需要换肤的View&#xff0c;并且保存下来&#xff1b;在Activ…

墨迹天气桌面挂件换肤分析

该篇文章需要准备如下工具&#xff1a; 1、墨迹皮肤文件&#xff0c;下载地址。 Andorid换肤在网上搜索出来的结果&#xff0c;大概有三种&#xff1a; 1、应用本身带有写好的布局 优点&#xff1a;开发难度低 缺点&#xff1a;灵活性低&#xff0c;用户不能自定义皮肤。 2、使…

前端换肤的一些思考

先看看大家怎么做的。下面是两篇别人写的文章&#xff0c;最后是我自己的方法。 第一篇&#xff1a;聊一聊前端换肤 之前在做网站换肤&#xff0c;所以想谈谈网站换肤的实现。网页换肤就是修改颜色值&#xff0c;因此重点就在于怎么来替换。 一般实现 如上图&#xff0c;我们…

Visio保存为网页出错

visio 试图保存文档时出错。已创建的页面可能无效。 试图保存文档时出错。以创建的页面可能无效。最近在用Visio作图的时候时长发生的问题。 经过摸索&#xff0c;不覆盖保存没有问题&#xff0c;如果覆盖保存&#xff0c;有时会有这个问题。解决办法就是把以前生成的网页和相关…

Visio 2016软件

Visio 2016是微软官方最新发布的一款领先的图表解决方案&#xff0c;它可以帮助企业制作定义流程、编辑最佳方案的同时还可以建立可视化计划变革的一款实用工具。这款软件目前提供了&#xff1a;上手图例&#xff08;starter diagrams&#xff09;、成百上千的智能形状、一步数…

解决visio和office365冲突,无法安装visio问题

本教程用于解决office365和visio冲突&#xff0c;无法安装visio问题 目前系统中已经安装Office365 尚未安装visio专业版本 1、下载office增强工具。 office增强工具下载地址 右键解压&#xff0c;此处要记得解压的目录&#xff08;建议在当前目录下&#xff09;。 根据自…