今天碰到了一个棘手的问题,web页面老是解析不了,tomcat的log中报错如下:
 
An error occurred at line: 22 in the jsp file: /admin/UserList.jsp    
Generated servlet error:    
D:\Java\tomcat-5.0.30\work\Catalina\localhost\startshop\org\apache\jsp\admin\UserList_jsp.java:68: -source 1.3 中不支持泛型    
(请使用 -source 5 或更高版本以启用泛型)    
    List<User> users = new ArrayList<User>();    
                 ^    
1 错误
 
对开发环境检查了个遍,从开发所用JDK到编译时采用的JDK再到环境变量等一一检查,始终找不到哪里冒出了个JDK 1.3。由此怀疑应该是tomcat的问题。便在网上搜索,基本明白是Tomcat版本的问题。这里特转抄 DIY部落(http://www.diybl.com/course/3_program/java/javajs/20071111/85295_2.html)   的一片文章,非常感谢 作者。该作者发现:请求JSP时,Tomcat日志显示“javac: 目标版本 1.3 与默认的源版本 1.5 冲突”。查看错误日志,发现"compilerTargetVM=1.3",应该时Tomcat的JSP编译时使用的JDK1.3的版本。(我的日志中没有这么明显的错误提示)。进行如下修改:找到tomcat conf目录下的web.xml,将这段内容:
 
<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>
        <load-on-startup>3</load-on-startup>
    </servlet>
 
改成下列的配置:
 
<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <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>
        <init-param>
                <param-name>fork</param-name>
                <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>compiler</param-name>
            <param-value>modern</param-value>
        </init-param>
        <init-param>
                <param-name>xpoweredBy</param-name>
                <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
</servlet>
 
修改之后重启tomcat就可以了。
      这里偶用的是tomcat 5.0.30,该作者也是。该作者还特意换成tomcat 5.5.0,发现没有出现上述问题,检查conf下面的web.xml文件可以发现区别所在。