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

    今天小编主要给大家讲解一下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{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	
	
	@Override
	protected 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: 重启是是否持久化session
	maxActiveSession: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;
	}

	
	@Override
	public void sessionDidActivate(HttpSessionEvent event) {
		String name = ((Customer)event.getSession().getAttribute("cust")).getName();
		System.out.println("钝化之后 = " + name);
	}

	@Override
	public void sessionWillPassivate(HttpSessionEvent event) {
		String name = ((Customer)event.getSession().getAttribute("cust")).getName();
		System.out.println("钝化之前 = " + name);
	}

	@Override
	public 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 {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	
	@Override
	protected 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是否会从持久化数据中恢复。


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

猜你喜欢

转载自blog.csdn.net/m0_65725031/article/details/125259121