Tomcat的学习
启动Tomcat
在bin目录下有一个文件startup.bat文件通过它来进行启动Tomcat服务器。
通过分析startup.bat文件可以得出执行这命令,实际上是执行catalina.bat这个文件。在catalina.bat文件中有一行配置:set MAINCLASS=org.apache.catalina.startup.Bootstrap(这个类就是main方法所在的类)
Tomcat服务器是JAVA语言写的,既然是JAVA写的,那么启动Tomcat服务器就是执行main方法。
在startup.bat文件中我们可以看到要启动Tomcat需要配置CATALINA_HOME这个环境变量。CATALINA_HOME就是Tomcat的根(Tomcat的家)
然后我们再看catalina.bat这个文件,里面需要一个环境变量JAVA_HOME,所以我们需要配置JAVA_HOME。就是JAVA的家(JAVA的根)
在Windows中%JAVA_HOME%表示将JAVA_HOME环境变量中的变量值取出来。
综上所述
配置Tomcat服务器需要哪些环境变量?
- JAVA_HOME=JDK的根
- CATALINA_HOME=Tomcat服务器的根
- PATH=%JAVA_HOME%\bin;%CATALINA_HOME%\bin
Tomcat的目录结构
- bin:存放着各种命令。最为最要的是 startup.bat 与 shutdown.bat 两个批处理文件,用于开启和关闭 Tomcat 服务器。
- conf:存放各种 Tomcat 的配置文件。最重要两个配置文件是 server.xml(文件可以配置端口号,默认Tomcat端口号是8080) 与tomcat-users.xml。
- lib:Tomcat 运行的类库,是Tomcat核心程序目录,即字节码文件。是全局的类库文件。而Web应用中的WEB-INF中的lib文件夹是项目所需要的类库,这里的JAR包都是class文件。
- logs:Tomcat 的运行日志。
- temp:Tomcat 运行的临时文件目录。
- webapps:存放各种具体的 Web 应用的目录。一个目录就是一个web项目。
- work:jsp 文件转换编辑结果的存放目录。用来存放JSP文件翻译之后的Java文件以及编译之后的class文件。
Tomcat 的核心配置都集中在 Tomcat 安装目录的 conf\server.xml文件中,其核心结构如下图所示。
其中 Host 即为访问的主机域名,而 Host 中的 Context,即为该主机中的应用名称。若要连接主机,则需要通过连接器 Connector。而连接器 Connector 则是由指定端口号所对应的程序通过指定访问协议所创建的连接对象。当然,主机的运行,是基于服务引擎 Engine所构建的运行环境的。
Context指的是主机包含的应用。
Server.xml的文件结构
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
- Server:代表是一个服务器,一个服务器 Server 可以提供很多种服务 Servicer。
- Service:代表是一个服务,Service可以有多个,每一个要取不同的名字。即name属性不一样。
- Connector:一个浏览器对象,浏览器要想使用这个服务就必须要使用连接器Connector,Connector是一个对象,里面配置相应的端口号,协议等相关配置。
- Engine:是服务引擎,默认主机是自己localhost。一个引擎中可以包含多个主机。一个主机对应一个域名。
- Realm:在Engine中是做安全管理的
- Host:是服务器主机,其中unpackWARs=“true”,autoDeploy="true"是对war包的自动解压与自动发布,在服务器启动的时候Tomcat看到有war包,就会自动解压war包并且自动发布war包中对应的项目。appBase="webapps"网站配置的根目录。
Context应用
我们所部署到 Tomcat 的 webapps 中的各个应用,其实是作为默认主机 localhost 的子应用模块出现的。而这一点反映到 server.xml 中的配置如下所示。
- name:主机名,即域名。
- appBase:该主机所对应的目录。该目录是一个相对于 Tomcat 安装目录的相对路径。
- unpackWars:是否会自动解压 war 包。为true,则会自动解压。
- autoDeploy:在服务器运行状态下,将一个项目放入当前目录中,是否会自动部署到服务器,由 Tomcat 来管理。即将一个项目放入当前目录中是否会自动运行在 Tomcat 下。为 true,则会自动运行。
- 若中包含子标签,则该标签所指定的项目将通过该主机域名访问。当然,appBase 目录中所有的项目默认也是通过该主机域名访问的。
配置虚拟目录
默认情况下,主机会将 appBase 指定目录中的所有项目通过当前主机域名访问。但,也可以将本地文件系统中任意目录指定为通过该主机域名访问的应用目录,交由 Tomcat 进行管理。这个被指定的文件系统中的目录,称为虚拟目录。
实现虚拟目录的两种配置方式:
-
在主机配置中添加
<Context/>
标签只需要在指定主机
<Host/>
中添加一个子标签<Context/>
即可。path:指定在当前主机域名下访问该应用的 URI。
docBase:指定应用目录的路径。
这种添加虚拟目录的方式存在一个问题:若采用添加虚拟目录的方式向当前主机中添加一个项目,则需要重启 Tomcat 服务器后,该修改过的 server.xml 文件才会被重新加载。而Tomcat 服务器的重启,将直接影响到其它项目的正常运行。
-
在主机目录中添加配置
Tomcat 启动后,会在 Tomcat 安装目录的 conf 中自动创建一个目录。该目录与 server.xml的标签对应,目录名与的 name 属性相同,默认为 Catalina。该目录即为引擎目录。打开该引擎目录,可以看到有 localhost 主机目录。
在 localhost 主机目录中新建一个 XML 文件,文件名例如为 myprimary.xml,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="d:/02-primary"/>
需要注意的是,该标签没有 path 属性。该 path 属性值即为该 XML 文件的文件名。也就是说,该 XML 文件名即为在当前主机域名下访问该应用的 URI。
该方式所创建的虚拟目录无需重启 Tomcat,就可以直接由 Tomcat 来管理。当这个 XML 文件写完后一保存,即可发现 Tomcat 的控制台信息中提示,已经成功发布该项目。
配置虚拟主机
-
配置虚拟主机,即在同一个硬件主机上运行多个域名系统,当作多个主机来使用,即在同一台机器上虚拟出多个主机。换句话说,在同一个 Tomcat 上,除了运行着默认的 localhost域名系统外,同时还运行着其它域名的系统。
-
若要配置虚拟主机,需要配置域名解析和DNS解析
-
只所以我们通过域名 locahost 可以访问本机,是因为我们 Windows 系统本身也充当前DNS 服务器的角色。在Hosts文件中。
-
C:/Windows/System32/drivers/etc是Hosts文件的路径。
-
配置虚拟主机的步骤:
-
创建应用存放的目录:
在 Tomcat 安装目录下新建一个目录,用于存放应用。其名称随意,例如为 mywebapps。该目录是与 Tomcat 下的 webapps 并列的的目录。
-
修改 server.xml
在 Tomcat 安装目录下的 conf文件夹 中的 servlet.xml 中后添加另一个主机,指定该主机的域名为自己的域名。例如:www.servletstudy.com。其中appBase的值为步骤1,所创建的目录。mywebapps。
-
然后修改hosts文件即可,这一步是为了让DNS能够解析
-
可以创建多个虚拟主机。
-
-
在 hosts 文件中,localhost、www.servletstudy.com 这两个虚拟主机均会映射到 127.0.0.1 的这个 IP,那么若使用 127.0.0.1 来访问的话,会访问哪个虚拟主机呢?在 server.xml 中的标签中有一个属性 defaultHost 指明了使用相同 IP 的不同域名设置情况下,使用 IP 访问时默认访问的主机。
-
默认情况下,defaultHost 的值为 localhost,也就是说,这里若使用 127.0.0.1 来访问的话,真正访问的是 localhost 虚拟主机。
-
若将 defaultHost 的值修改为 www.servletstudy.com,则使用 127.0.0.1 访问,则会访问www.servletstudy.com 虚拟主机。
配置默认应用
我们访问 http://localhost:8080 后只所以可以看到 Tomcat 管理主页,是因为在 Tomcat安装目录的 webapps 中存在一个名称为 ROOT 的应用。打开该应用,可以看到就是“Tomcat应用管理系统”这个应用。
若我们自己的应用系统想作为默认应用出现,即直接通过主机名就可直接访问我们的应用,则可将我们应用的目录更名为 ROOT 即可。
将原来存放着“Tomcat 应用管理系统”的 ROOT 目录删除,将我们自己的应用目录修改为 ROOT,重启 Tomcat 即可。
修改默认端口号
Tomcat 中通过 HTTP 协议所创建的 Connector 对象,默认的端口号为 8080。若 8080 端口号已被其它程序所占用,则可修改这里的端口号为其它。
ManagerAPP的用法
ManagerAPP在Tomcat的网页首页上
在Tomcat的安装目录下,找到tomcat-users.xml文件,在下面加上下面的代码,账号和密码自己写,这样就可以使用ManagerAPP了。
<role rolename="manager-gui"/>
<user username="账号" password="密码" roles="manager-gui"/>
JavaWeb 项目结构
JavaEE 规范要求 JavaWeb 项目的程序结构是:
- 在当前应用所在目录下可以直接存放资源文件,如.html、.jpg 等,也可以将其放入到子目录中访问。
- 若 Web 项目中包含 Servlet 代码,则 Servlet 的字节码文件必须存放在当前应用所在子目录/WEB-INF/classes 下。
- 在/WEB-INF/下可以包含 web.xml 配置文件,定义请求 URI 与所要访问的 Servlet 间的映射关系、指定欢迎页面等。
- 在/WEB-INF 下可以包含子目录 lib,用于存放当前 Web 应用所使用的外部 Jar 包。
- /WEB-INF/目录中的资源不能被浏览器直接访问。
解决Tomcat服务器在DOS命令窗口中的乱码问题(控制台乱码)
将CATALINA_HOME/conf/logging.properties文件中的内容修改如下:
java.util.logging.ConsoleHandler.encoding = GBK
原文地址:https://blog.csdn.net/m0_57792458/article/details/121057304
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。