使 Tomcat 编译 JSP 支持 Java 8

Tomcat 7,8 都能运行在 Java 8 上,但跑在 tomcat 上的 web app 的 JSP 页面代码里却不一定能使用 Java 8 语法,如果强行使用 Java 8 语法,IDE 可能不会报错,但 web app 运行后,可能出现类似这种报错:

An error occurred at line: 19 in the jsp file: /abc.jsp

'<>' operator is not allowed for source level below 1.7

为何?

下表是 tomcat 7/8 支持的源码版本和输出的代码版本:

compilerSourceVM - What JDK version are the source files compatible with? (Default value: 1.7)

compilerTargetVM - What JDK version are the generated files compatible with? (Default value: 1.7)

这两个参数可以在 $CATALINA_BASE/conf/web.xml 中修改,在 servlet org.apache.jasper.servlet.JspServlet 的配置项中添加

       <init-param>
            <param-name>compilerSourceVM</param-name>
            <param-value>1.8</param-value>
        </init-param>
        <init-param>
            <param-name>compilerTargetVM</param-name>
            <param-value>1.8</param-value>
        </init-param>

修改后,就可以在 JSP 页面中使用 Java 8 语法了。

修改这两个参数值,会有什么风险吗?暂未发现。

Ref:

- https://tomcat.apache.org/tomcat-8.0-doc/jasper-howto.html

- https://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html