Tomcat 详细讲解安装(让我们进一步了解tomcat作用)

article/2024/12/23 13:07:16

    今天小编主要给大家讲解一下tomcat的作用,了解什么是tomcat以及tomcat目录结构及作用。

     不知道如何下载tomcat的家人们可以看这篇博客,点击下方链接:

  JavaWeb eclipse-web如何安装&如何下载jdk&如何下载tomcat(详细讲解)_客行.的博客-CSDN博客_web怎么下载https://blog.csdn.net/m0_65725031/article/details/123722644?spm=1001.2014.3001.5501

目录

   一.tomcat是什么? 

 二.tomcat目录结构及作用

   

1.bin目录

   2.conf目录

3.lib目录

4.logs目录

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

5.temp目录

6.webapp目录

7.work目录

8.其他文件

三.session持久化示例  


   一.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(比tomcat更小,更适合嵌入式坏境里)weblogic(大,专业,要钱),websphere(大,专业,要钱),undertow等。

   注:我们通常把tomcat叫做web服务器,实际上tomcat更准确的叫法叫做应用服务器。web服务器主要是指专门来处理html,css,图片等静态资源的服务器,必要apache服务器。


 二.tomcat目录结构及作用

      tomcat目录结构的截图: 小编下载的tomcat目前是9.0.60版本的目录所示,我们要了解在该                                                     目录中每个文件夹下的文件有什么作用。

    

   


1.bin目录

        bin目录下的文件所示:

                     

  • bin目录主要存放的是tomcat命令。
  • bin目录下主要存放着两种文件,一种是以.bat为扩展名的文件,该文件是在windows平台的命令,另一种是以.sh为扩展名的文件,该文件是在linux平台的文件。

    bin目录下的主要文件介绍

1.  setclasspath.bat

       用于设置Java环境变量,如JAVA_HOME,JRE_HOME等,在我们安装的时候就会写上JAVA_HOME。

          

2.   catalina.bat

 该文件也是用来配置环境的,如CATALINA_HOME,及tomcat的安装路径, 一般没有配置的话有默认的配置,能够我们开发的时候使用,但是生产坏境下我们需要更多的内存量,我们可以在此目录设置Java的启动参数,如最大最小堆空间大小:

例如:

JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx512m -Xmn128m -XX:PermSize=128m -      XX:MaxPermSize=512m"   这段代码是java启动时,最小的内存量255M最大521M

3.   startup.bat

用来给启动tomcat,当双击startup后,tomcat启动,读取catalina脚本配置启动环catalina又会调用setclasspath脚本,用来设置jdk需要的环境变量,如果系统没有定义JAVA_HOME环境变量,则在会报错退出。

 4.  shutdomn.bat

 用于停止tomcat服务 (当我们双击starup.bat打开tomcat,想要关闭时双击shutdomn.bat关闭窗口消失)

         

   2.conf目录

    conf目录下的文件如图所示:

   

  •     该目录主要用来存放tomcat的配置文件

1. server.xml

   用于配置端口号,虚拟主机,默认加载项目,请求编码等等,是tomcat中最常使用的配置文件。

2. context.xml

所有在tomcat中发布的应用都会使用的公用配置,例如:发布的web应用的描述文件的位置及名称,及session持久化配置等。在该文件中配置session的持久化,那么所有的web项目中session会通用,大家可以往下看,等会教大家配置session持久化。

3.  web.xml

为所有的部署在该tomcat下的web应用通用的配置,与每个web应用的web.xml配合使用。

理解:

我们的web项目lib文件下面,也有一个web.xml,两者的区别在web项目lib目录下面配置的web.xml只在该项目中使用,但是在该web.xml配置那么就是所有的web项目都通用

例如:
DefaultServlet,就算系统中没有配置任何的servlet,tomcat依然可以处理html,js,css等静态资源的请求,就是这个servelt起的作用;
JspServlet,当请求jsp页面时,则会用到这个servlet。
session过期时间配置session-timeout参数,也是在这个web.xml中配置的。

4.  tomcat-users.xml
tomcat的角色(授权用户)配置文件,用于访问tomcat管理应用程序时的安全性设置,用server.xml中引用的默认的用户数据库域(UserDatabase Realm)使用它,所有的凭据都是默认被注释的。

 理解:进入tomcat官网点击Manager App弹出一个登录,让我输入账号和密码,所以该文件是帮 我们控制tomcat用户名和密码的

5.  tomcat-users.xsd                                                                                                                             定义了 tomcat-users.xml 所使用到的标签,即tomcat-user.xml 的结构定义文件

6.  catalina.policy                                                                                                                                   这个是tomcat安全相关的配置文件,主要使用安全策略文件可以在tomcat启动是附上 -                security

  示例:创建一个web项目,在servlet包下创建一个类继承httpServlet:代码如下:

package com.yjx.servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/index.do")
public class Servlet 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 {System.exit(0);//直接退出}}

操作:

先将该web文件导出来:点击该项目右键--->点击Export---->点击WAR file导入到本地那个盘都OK--->变成一个.war格式的文件

文件导入盘以后:将文件复制放在tomcat中webapps里面就部署完成啦。(还有其他的部署方式哦,下次给大家讲解,今天浅讲一些。)----->在bin目录下点击startup.bat在去网页上面打开----->无法访问

 最后一步:如图所示:

 在这里点击上面输入路径的地方,删除现在的数据,然后输入:cmd

         

  弹出一个窗口,该窗口截屏没有截全面,反正就是弹出一个这样子的窗口,在后面加上startup.bat  -security这样子在运行web项目就会变成报500的错误,不会打不开页面。

 

注:以后启动生成环境时,可以加一个安全 性的参数,就不会因为一些应用里面有一个直接退出方法,导致加载不出来。

7. catalina.properties

  安全配置,类加载设置,不需扫描的类,字符缓存等配置 


3.lib目录

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


4.logs目录

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

1.catalina.{yyyy-MM-dd}.log tomcat

自己的运行日志


2.localhost.{yyyy-MM-dd}.log

应用初始化日志,包含tomcat的启动和暂停时的运行日志,没有catalina.{yyyy-MM-dd}.log记录的全,只包含一部分(该日志会记录我们所报过的错)


4.localhost_access_log.{yyyy-MM-dd}.txt tomcat

访问日志,包括请求时间,资源,返回的状态码(里面的每一行是我们对tomcat访问一次,所有我可以理解为这个日志为tomcat访问日志)


5.manager.{yyyy-MM-dd}.log

是tomcat管理控制台应用的专有日志
在Linux系统中,tomcat将日志记入catalina.out文件,可以使用 tail -f catalina.out 进行跟踪。


5.temp目录

存放tomcat在运行期间产生的临时文件,可以清空该目录的文件,但不能删除该目录,可能会引发不可预知的错误。(运行时不能进行清除)


6.webapp目录

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

注:我们将项目从eclipse中导出,放进webapp目录底下他会自动解压出来

1.doc

 tomcat文档资料(点击下方可以看到官方文档)


2.examples tomcat

自带的web应用示例


3.host-manager tomcat

主机管理应用程序


4.manager

tomcat的管理应用程序
ROOT 如果项目部署为ROOT,则在地址栏直接输入:http://ip:port/ 就可以访问,即不用输入应用名


7.work目录

  用来部署应用中由jsp文件生成的java文件和编译之后的class文件,可以删除,删除后可以迫使tomcat重新生成jsp对用的java和class文件。(当我们修改了页面,但是运行效果没有 变,那就把这里面的子目录和我们web项目相同名称的删除,就会迫使重新生成,但是第一次访问会比较慢,需要先编译成java文件,在编译成class文件)


8.其他文件

1.LICENSE tomcat

开源许可文件


2.NOTICE

tomcat说明文件


3.RELEASE-NOTES

版本说明文件


4.README.md

即 README.txt tomcat帮助文件 


三.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);}}
}

 将web应用部署,运行之后访问servlet,查看指定的目录中是否有session的持久化数据,重新启动web,看session是否会从持久化数据中恢复。


今天的学习就到这里啦,大家有什么不懂的在下方评论或者私信我噢,有时候比较忙所以有时候回复不及时,请大家谅解,但是看到了一定会回复大家的,最近要源代码的家人比较多,每篇博客中大家需要的代码全在啦,有什么不懂的就问我就好啦,非常乐意为大家解答噢。


http://chatgpt.dhexx.cn/article/bYgrCK6V.shtml

相关文章

【JAVAWeb】Tomcat

1 Tomcat的介绍 1.1 Tomcat的简介 Tomcat服务器是一个开源的轻量级Web应用服务器&#xff0c;在中小型系统和并发量小的场合下被普遍使用&#xff0c;是开发和调试Servlet、JSP 程序的首选也是绝大多数JavaEE开发工程师所必用的 1.2 Tomcat的作用 Tomcat的作用是作为Web服务器部…

perl脚本练习

题目&#xff1a; 12 34 56 78 24 65 87 90 76 11 67 87 100 89 78 99 求出文本中数字的最大、小值 我看很多的朋友都用shell的awk实现了&#xff0c;但本人对awk不是很了解&#xff0c;试着用perl简单的写了一下&#xff0c;也能实现 code: #!/usr/bin/perl -w use str…

Perl脚本入门

Perl脚本入门——标量和标量变量 内容 由于项目中需要使用到Perl&#xff0c;本着是知识就学它的心。开始了我的菜鸟学飞之旅。以下内容主要是从《O’Reilly:Perl语言入门 第7版&#xff08;中文版&#xff09;》书中所学&#xff0c;后续也会结合项目使用案例锻炼一下自己。…

perl脚本的参数输入

参数输入 关于perl脚本的参数输入一共有两个办法&#xff1a; use Getopt::Std 或者 use Getopt::Long (use的用法与import类似&#xff0c;这里就不展开了) 对于上面两中方法&#xff0c;采用哪一种目前看来没有特别明显的区别&#xff0c;掌握其中一种&#xff0c;我觉得就…

perl脚本语言学习2——高级篇:正则表达式、线程、仿真脚本

文章目录 一、正则表达式1、元字符 二、模块三、面向对象编程1、package 四、多线程1、fork函数2、子进程间的通信 五、仿真脚本 一、正则表达式 1、元字符 m/.../&#xff1a;匹配语法&#xff0c;把元字符放在中间 字符含义\转义字符\b匹配单词边界\B非单词边界\d数字&…

脚本入门(2)-perl脚本

一、注释 pod 这里的是注释 cut 二、chomp 去掉换行符&#xff08;\n&#xff09; 去掉$/ chomp($text<STDIN>); #读入&#xff0c;但不含换行符 三、<STDIN> $line <STDIN>; #一次读一行&#xff0c;性能好。 <STDIN>会带有换行符&…

Perl脚本语言学习1:

一、perl基本要素&#xff1a;数字和字符串 perl语言的核心是正则表达式&#xff0c;在文本处理上非常有优势&#xff0c;与python类似&#xff0c;但语法不同&#xff0c;perl的语法很灵活&#xff0c;用多了才会觉得好用。 第一篇博文就这么潦草的结束&#xff0c;慢慢摸索&…

Perl脚本编程

Perl脚本学习笔记 文章目录 Perl脚本学习笔记一、编写你的第一个Perl程序二、Perl的基本构件1.直接量2.标量变量3.表达式和运算符 三、控制程序流1.if 语句2.while 循环3.for 循环 四、列表与数组1.列表2.数组3.遍历数组4.数组排序 五、文件操作1.打开文件2.读取文件3.写入文件…

71.区分异步和多线程应用场景

初学者有时候会将异步和多线程混为一谈。如果对它们之间的区别不是很清楚&#xff0c;很容易写出下面这样的代码&#xff1a; private void buttonGetPage_Click(object sender, EventArgs e) { Thread t new Thread(() >{ var request HttpWebRequest.Create(&q…

多线程的简单实现和应用场景

main方法测试&#xff0c;定义for循环造假数据&#xff0c;定义time在方法结束后时间相减获取执行毫秒数&#xff0c;单线程跟多线程对比执行时间。 上图 我定义了2000000的数据量&#xff0c;可以看到单线程执行时间为6520毫秒&#xff0c;多线程&#xff08;3个&#xff09;执…

多线程的创建方式及多线程应用场景

本篇大概详解思路如下思维导图: 目录 在java程序中创建线程 start()和run()的区别 start()方法为啥不能被重复调用 创建线程的7种方式 多线程提高速度 多线程的使用场景 在java程序中创建线程 我们知道一个进程包括多个线程(pcb---每个线程对应一块pcb,一个进程包括多个p…

Java多线程的应用场景和应用目的举例

微信公众号&#xff1a;javafirst 01 通俗的解释一下多线程 多线程用于堆积处理&#xff0c;就像一个大土堆&#xff0c;一个推土机很慢&#xff0c;那么10个推土机一起来处理&#xff0c;当然速度就快了&#xff0c;不过由于位置的限制&#xff0c;如果20个推土机&#xff0…

多线程的使用场景

多线程的使用 使用线程池ExecutorService &#xff0c;exe.execute来开始线程&#xff0c;thread,runabble,callabble都可以&#xff0c;isTerminated来判断线程池的线程是否都执行完毕 Testpublic void testThread() throws InterruptedException {//创建线程池ExecutorServi…

【多线程/线程池】项目中实际应用场景

场景一、快速响应用户的请求 描述: 用户发起的实时请求&#xff0c;服务追求响应时间。比如说用户要查看一个商品的信息&#xff0c;那么我们需要将商品维度的一系列信息如商品的价格、优惠、库存、图片等等聚合起来&#xff0c;展示给用户。 场景二、快速处理批量的任务 描…

多线程相关实例(多线程经典应用场景)

转载&#xff0c;from 网络&#xff0c;未能找到原创人员&#xff0c;只找到一个转载 https://blog.csdn.net/u013521220/article/details/79648270 多线程实例目录 相关知识&#xff1a;经典案例一&#xff1a;三个售票窗口共同出售20张票经典案例二&#xff1a;AB两人共用一个…

多线程的实现和使用场景

多线程的实现和使用场景 一、多线程实现方式1.1 Thread实现1.2 Runnable实现 二、多线程的使用场景1.多线程使用场景1.1 多线程应该最多的场景&#xff1a;1.2多线程的常见应用场景&#xff1a; 2.多线程小案列2.1 多线程计算2.2 多线程实现卖票小程序2.3多线程卖票小程序优化2…

子网掩码、网关及网络号与主机号的区分与计算

前言&#xff1a; 当前使用的IP地址有4个字节&#xff08;32bit&#xff09;组成&#xff0c;即IPV4编码方式。每个IP地址包括两部分&#xff1a;网络号和主机号。当分配给主机号的二进制位越多&#xff0c;则能标识的主机数就越多&#xff0c;相应地能标识的网络数就越少&…

计算机网络之ip、子网掩码、网络号、主机号等概念解析

在工作中谈论到计算机网络时&#xff0c;有几个经常出现的术语&#xff0c;比如&#xff1a;ip、子网掩码、网段等等。之前对这些概念的理解都比较模糊&#xff0c;只知其大概意思&#xff0c;随着工作中遇到的网络问题越来越多&#xff0c;有必要详细理解一下计算机网络的基础…

IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?

背景知识 IP地址 IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址&#xff0c;才能正常通信。我们可以把“个人电脑”比作“一台电话”&#xff0c;那么“IP地址”就相当于“电话号码”&#xff0c;而Internet中的路由器&#xff0…

若尔当型状态空间方程的能控能观判断

若尔当型状态空间方程的能控能观判断 对于若尔当型状态空间方程&#xff1a; 能控充要条件&#xff1a;当且仅当同一特征值对应的每个若尔当块的最后一行对应B矩阵的行向量线性无关。 注:每个特征值均应满足以上条件。 能观充要条件&#xff1a;当且仅当同一特征值对应的每个…