今天碰到了一个棘手的问题,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文件可以发现区别所在。