Tomcat服务器的下载安装以及目录结构介绍。
上文我们简单介绍了Java Web的概念和发展,我们说到了Web服务器,其很重要的就是Tomcat服务器。下面我们来简单认识一下Tomcat服务器。
我们编写Java Web应用,笼统的来说就是在进行Servlet开发(包括目前的SSM、Spring Boot等框架开发的应用都可以这么认为,当然最新的Spring WebFlux已经不依靠Servlet了),而接收、封装客户端请求,以及给客户端做出响应的网络编程部分,都交给Web服务器来实现了,因此我们的“Web应用”,实际上是不能够单独运行起来的,必须运行在Web服务器中才能为用户提供服务。对于Java程序员来说,最熟悉的Web服务器就是tomcat了。
tomcat是一个完全免费的开源的小型web服务器 ,官网地址是http://tomcat.apache.org/,tomcat是一个基于HTTP协议的Web服务器,也就是说tomcat专门用于处理基于HTTP协议的发起的网络请求,而Web应用使用得最多的协议就是HTTP协议了,因此tomcat非常适合作为承载Web应用的容器。
从源码来讲,它就是一个采用Java语言开发的应用程序,它也有自己的main方法(在Bootstrap类中),运行tomcat就会启动tomcat的JVM虚拟机,我们通过start.bat启动tomcat,实际上就是在调用tomcat的启动类的main方法,org.apache.catalina.startup.Bootstrap类就是tomcat的启动类,该类中有唯一的main方法。在tomcat调用main方法启动之后,随后会加载webapp目录下面我们的web应用,解析各种路径,加载服务类,随后即可正常工作!tomcat能够处理请求和响应的原因也是因为它的底层是一个基于Socket开发的的服务端应用程序。
对于内嵌式tomcat,可以很轻松的找到启动类Bootstrap:
tomcat还实现了JavaEE的Servlet、JSP规范,因此tomcat又可以看作Servlet容器和JSP容器,这里的“容器”表示能够支持Servlet、JSP的运行。 我们可以将基于Servlet开发的Web应用程序,放到tomcat服务器的webapps目录下面,启动tomcat,我们的项目就运行起来了。实际上是tomcat运行起来了,随后它将默认自动扫描、加载我们放置在webapps(也可以设置其他目录)下面的Web应用,此后tomcat以多线程的模式帮助我们接收、封装HTTP请求为HttpServletRequest对象,并将请求转发到对应路径的Servlet实现中(tomcat帮助加载、实例化我们开发的Servlet为单例,所以需要保证Servlet线程安全),我们知道,这些Servlet中就仅仅是提供了具体的业务逻辑代码,在处理完请求之后,tomcat又帮助我们将HttpServletResponse中数据响应给客户端浏览器,这样,tomcat和Web应用相互配合,就能够为用户提供远程Web服务。
另外,作为一个服务器,tomcat 除了能支持运行 Servlet 和 JSP 这样的动态资源之外, 也能像 Apache/nginx 一样, 支持静态 html、图片、文档的访问,只是性能差一点,在实际的应用中,一般是 Apache/nginx 作为负载均衡服务器和静态资源服务器放在最前端,后面是 tomcat 组成的集群。如果用户请求的是静态资源,nginx 直接搞定,如果是动态资源(如xxx.jsp),nginx 就会按照一定的算法转发的某个 tomcat 上,达到负载均衡的目的。
简而言之: tomcat 是一个接受 http 请求并解析 http 请求并反馈客户端的一个应用程序。
下面我们简单的学习tomcat的相关知识,这次不会涉及到源码,适合初学者,后续我们会专门的讲解tomcat的源码,因为tomcat就是Java语言编写的基于Socket的应用程序,并且它的架构还是比较复杂的,但是我们还是完全有机会能够读懂的!
首先我们需要明白的是,tomcat作为一个Java程序,因此运行tomcat需要JDK的支持(tomcat会通过JAVA_HOME找到所需要的JDK)。所以我们必须保证要使用tomcat的机器上安装了JDK。
可以到官网http://tomcat.apache.org下载所需的版本。这里我们将会使用tomcat 8版本作为演示和学习的服务器,此版本至少需要JDK8的支持。
我们下载的是解压版本的tomcat,它的好处是无需安装,解压即可用,并且解压成多少份都可以(只需要修改端口号)。
在解压之后,进入bin目录,双击startup.bat(Windows下)即可启动tomcat服务器,linux下则执行startup.sh。
启动日志如下:
实际上此时已经启动成功了!但是可以看到控制台出现了乱码(也可能不会),这让人非常不爽。原因很简单,tomcat8默认使用UTF-8编码,而我们的Windows的cmd控制台默认使用GBK编码,所以解决办法有两个,一个是修改tomcat8的日志输出编码为GBK,另一个是修改cmd控制台的编码为UTF-8。
这里我们使用简单的方法,我们进入tomcat的conf目录下找到logging.properties文件,随后打开该文件,找到java.util.logging.ConsoleHandler.encoding = UTF-8
这个配置
将UTF-8改为GBK并保存修改:
随后重启tomcat,此时我们就能看到正常的日志输出了:
我们来简单的认识一下tomcat的目录结构!解压缩的tomcat8完整的结构如下:
该目录下存放的是二进制(binary)可执行文件,即一系列的批处理命令文件,其中以.sh结尾的文件是linux批处理文件,在linux环境下执行,另一类以.bat结尾的的文件是Windows批处理文件,在Windows环境下执行。
最重要的是startup.sh/startup.bat和shutdown.sh /shutdown.bat这两个批处理文件,startup文件用来启动tomcat,shutdown文件用来停止tomcat;但是需要先配置JAVA_HOME环境变量才能启动tomcat。
实际上,我们打开startup.bat或者shutdown.bat,会发现它们最终都会启动catalina.bat,因此catalina才是真正启动或者终止tomcat的命令文件。在catalina中可以设置JVM参数,比如tomcat的内存大小。而catalina.bat又会调用setclasspath.bat,setclasspath.bat会使用JAVA_HOME环境变量,所以我们必须在启动Tomcat之前把JAVA_HOME配置正确。
这是一个非常重要的配置文件目录,存放着tomcat的各种全局配置信息,重要的配置文件如下:
tomcat是组件式架构,它的server.xml配置文件中中可以通过标签配置tomcat容器中的不同类型的组件,是tomcat的核心配置文件。
server.xml文件,我们将会在下一篇文章重点讲解。
Tomcat的类库(library),里面是一大堆Tomcat运行依赖的jar文件。如果需要添加Tomcat运行的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,因为这个目录中的jar包对所有项目都可以共享。
常见的包括servlet的jar包,tomcat-dbcp连接池的jar包。
存放tomcat在运行过程中产生的日志文件,可以清理。
存放Tomcat的临时文件,可以清理。
默认的用于存放web项目的目录,可以以文件夹、war包、jar包的形式发布Web应用,当tomcat启动时默认会去webapps目录下解压、加载里面的应用程序,当然也可以配置加载外部应用。
访问某个项目的资源的时候,url默认为http://ip:port/项目目录名/资源路径,项目目录名用来区分不同的Web应用。当然这个路径也可以自己配置,比如配置域名映射。
如果解压tomcat时这个目录下已经存在了项目目录,那么这些项目都是tomcat自带的项目。tomcat8自带的项目如下:
ROOT是一个特殊的项目,在访问地址栏中没有给出项目目录名时,对应访问的就是ROOT项目。实际上名为ROOT的项目就是tomcat的默认应用,在访问时不需要加上项目目录名。默认情况下的默认项目就是tomcat的主页:
examples是一个示例项目,我们输入http://localhost:8080/examples,即可进入进入示例项目。
存放项目运行时生成的文件,例如JSP编译后的文件。可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!