今天应用迁移,以前写的那个系统要迁到另一个服务器上,本来以为很简单的,结果装完Tomcat以后程序居然报错,说什么“&&”是不能用于boolean、Boolean,感觉很莫名其妙,&&可是基本操作符啊,怎么会出这个错误,以前从来没遇到过。不过象这种层面问题,肯定是和编译有关。初步猜测和Tomcat版本有关,因为我以前装的什么版本已经忘了,刚装的是一个5.0.30。换了一个5.0.28(Apache上5.x的版本最老的就是这个了),覆盖安装,还是不行。后来我试了很多乱七八糟的方法,换了好几个版本,挣扎了2、3个小时,终于把这个狗屎问题解决了,得到以下提示:

不知道从什么版本开始,Tomcat不能自动编译Java 5(1.5)的JSP文件,——错误提示我javac的时候使用“-source -1.5”而不是“source -1.3”,个人认为它后台使用1.3 compatible的方式进行编译。而1.5的什么泛型、autoboxing就全部被枪毙,无法通过编译。错误从这里产生。

解决方法是修改/conf/web.xml 文件:找到名为“jsp”的servlet并修改如下内容,增加 compilerSourceVM 和 compilerTargetVM 两个设置:

<servlet>
    
<servlet-name>jsp</servlet-name>
    
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    
<init-param>
        
<param-name>fork</param-name>
        
<param-value>false</param-value>
    
</init-param>
    
<init-param>
        
<param-name>xpoweredBy</param-name>
        
<param-value>false</param-value>
    
</init-param>
    
<init-param>
        
<param-name>compilerSourceVM</param-name>
        
<param-value>1.5</param-value>
    
</init-param>
    
<init-param>
        
<param-name>compilerTargetVM</param-name>
        
<param-value>1.5</param-value>
    
</init-param>
    
<load-on-startup>3</load-on-startup>
</servlet>

我看网上有人说还要拷贝tools.jar以及ant-1.6.x.jar到common/libs下面,并删除common/lib/jasper-compiler-jdt.jar,不过好像5.0.30版本并没有这种问题。5.5版本以上我确定Tomcat会安装common/lib/jasper-compiler-jdt.jar文件。

Tomcat版本直接切忌不要覆盖安装,我花了很长时间发现覆盖安装以后版本的文件恨混乱,我覆盖装了5.0.28,结果Tomcat Monitor还是显示5.0.30.........。

不要设置“CATALINA_HOME”环境变量,否则你可能无法使用2个Tomcat。记得很早以前是要手工设置这个变量的,但是现在千万不要设置这个环境变量。今天装JIRA的时候发现JIRA无论如何启动不起来,发现其老是去找8080端口,而我已经在server.xml文件中把它端口改到8081去了,很奇怪。后来想起来可能是“CATALINA_HOME”影响了JIRA的启动过程,去掉这个变量,啊,整个世界清净了.........

评论联播

Your email address will not be published. Required fields are marked *