前言

用了那么久的tomcat,今天却在war包部署tomcat,启动tomcat,访问项目这么一个常规而又傻瓜的流程中,对tomcat抛出的异常一知半解,只见异常是这样的:

1
2
3
org.apache.jasper.compiler.JDTCompiler$1 findType
严重:Compilation error
org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException

大概可以看出,jsp编译java代码的时候,编译出错啦,编译文件的格式有问题。喔~突然想到java代码一般是在打包的时候就编译成class文件,但是jsp里的java代码好像没有,那估计是jsp的java代码是在服务器运用到的时候才去进行编译的。

本文结构:

  1. tomcat的基本启动逻辑
  2. tomcat不常用但应该知道的操作

运行环境:

  • Tomcat 6.0.26
  • win10专业版

基本启动逻辑

既然jsp的java代码是在服务器运用到的时候才去进行编译的,这也就意味着这时候tomcat将会应用它所指定的jdk,我们都知道,tomcat的版本和jdk的版本是有关联关系的。好的,明白了逻辑,我们来看看tomcat的启动逻辑:

tomcat在不同的操作系统的启动文件都是startup,进入文件后我们可以看到,tomcat的路径CATALINA_HOME和jdk的路径JAVA_HOME/JRE_HOME都是在这里面寻找以及赋值的,而且startup里主要执行了两个文件,catalina和setclasspath,查看逻辑可以得知,tomcat默认查找的就是环境变量的JAVA_HOME。

知道了tomcat的启动逻辑,那我们只要在启动的任何一个相关文件里指定JAVA_HOME,就可以配置指定的JDK啦。如:

1
set JAVA_HOME={here is your own jdk path}

这里要注意,参数名称和值,与等号之间不能有空格,否则将配置失败

好了,配置好指定的jdk后,还要确认一下tomcat的运行环境,可以在%CATALINA_HOME%/bin底下,执行version,看到的结果大致是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version
Using CATALINA_BASE: "{here is your own tomcat path}"
Using CATALINA_HOME: "{here is your own tomcat path}"
Using CATALINA_TMPDIR: "{here is your own tomcat path}\temp"
Using JRE_HOME: "{here is your own jdk path}"
Using CLASSPATH: "{here is your own tomcat path}\bin\bootstrap.jar"
Server version: Apache Tomcat/6.0.26
Server built: March 9 2010 1805
Server number: 6.0.26.0
OS Name: Windows 8
OS Version: 6.2
Architecture: amd64
JVM Version: 1.6.0_45-b06
JVM Vendor: Sun Microsystems Inc.

查看到JDK的版本和路径都正确了,就大功告成了~

不常用但应该知道的操作

version

在配置完jdk等等运行环境之后,可以通过该命令查看整个运行环境,避免配置失败。

service

如果直接执行tomcat的安装版,我们往往可以看到tomcat在windows系统里会直接创建一个apache tomcat的服务,而我们也可以直接在服务里进行启动,以及设置自动启动,避免了运行程序在前台容易被其他用户误关闭。
而如果是使用tomcat的解压版的话,其实tomcat也提供了快捷的创建windows服务的操作:

1
service install {here is your custom defined serverName}

要注意的是:windows下,必须用“管理员身份”打开cmd命令窗口,才可以执行上述操作,否则会出现安装失败的情况。

同样,在创建服务之前,若要指定JDK,也需要到service文件里进行配置。