今天小编主要给大家讲解一下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是否会从持久化数据中恢复。
今天的学习就到这里啦,大家有什么不懂的在下方评论或者私信我噢,有时候比较忙所以有时候回复不及时,请大家谅解,但是看到了一定会回复大家的,最近要源代码的家人比较多,每篇博客中大家需要的代码全在啦,有什么不懂的就问我就好啦,非常乐意为大家解答噢。