NES for Apache Struts 1.x Container Support
Verified JDK and application server combinations for NES for Apache Struts 1.0, 1.1, 1.2 and 1.3
Overview
NES for Apache Struts 1.0, 1.1, 1.2 and 1.3 are compiled for Java 8 and use the javax.servlet API. They require Java 8 or later and run on newer JDKs without any JVM flags. This page records the combinations that have been verified by running each line's example applications against each one.
NES for Apache Struts 1.3 Forward Compatibility targets Jakarta EE and Java 11. See its Container Support page for its verified containers and the configuration each requires.
Verified combinations
| Struts line | Application server | Java 8 | Java 11 | Java 17 | Java 21 | Java 25 |
|---|---|---|---|---|---|---|
| 1.0 | Apache Tomcat 9.0 | Yes | Yes | Yes | Yes | Yes |
| 1.1 | Apache Tomcat 9.0 | Yes | Yes | Yes | Yes | Yes |
| 1.2 | Apache Tomcat 9.0 | Yes | Yes | Yes | Yes | Yes |
| 1.3 | Apache Tomcat 9.0 | Yes | Yes | Yes | Yes | Yes |
These results cover Struts and its NES dependencies only. Other libraries in your application, or your own code, may not run on a newer Java version even when Struts does. Test your application on the target JDK before upgrading.
Verified on Apache Tomcat 9.0.122 (Servlet 4.0, Java EE 8). Each cell was exercised by deploying the line's example applications, requesting a page from each, logging in to the MailReader application, and submitting a multipart/form-data upload:
- 1.0 (
1.0.2-struts-1.0.4): blank, MailReader, exercise-taglib, template-example and upload. - 1.1 (
1.1.0-struts-1.1.4): blank, MailReader, exercise-taglib, Struts-EL exercise-taglib, template-example, Tiles documentation, upload and validator. This coversstruts,struts-elandstruts-legacy. - 1.2 (
1.2.9-struts-1.2.10): MailReader, examples and Tiles documentation. - 1.3 (
1.3.10-struts-1.3.17): blank, cookbook, EL example, examples, Faces examples 1 and 2, MailReader, multipage form and scripting MailReader. Every module —struts-core,struts-taglib,struts-tiles,struts-el,struts-extras,struts-facesandstruts-scripting— works on every combination marked Yes.struts-scriptingwith Groovy is subject to the limitation described in Scripting support.
Java version
Java 8 is the minimum on every line. The NES jars and the patched dependencies they bring in are compiled to Java 8 bytecode, so an older JVM fails to load them with UnsupportedClassVersionError. OSS Struts 1.0.2 ran on much older JVMs, so if you are moving from it, upgrade the JVM to at least Java 8 before switching.
Scripting support
struts-scripting, part of Struts 1.3, uses Apache BSF to run script actions. If you use it with Groovy, the Groovy version matters on newer JDKs.
Groovy 1.x calls setAccessible on JDK-internal members. JEP 396 made that a hard failure in Java 16, so on Java 17 and later the engine fails to load and the request fails with:
org.apache.bsf.BSFException: unable to load language: groovy
Adding --add-opens flags does not fix it; Groovy 1.x reaches into several JDK packages. Use Groovy 3 with its BSF engine, which needs no --add-opens flags on Java 8 through 25:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>3.0.25</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-bsf</artifactId>
<version>3.0.25</version>
</dependency>
Groovy 3 is the newest line that ships a BSF engine; groovy-bsf was discontinued after Groovy 4.0.0-alpha-2.
Jakarta EE containers
NES for Apache Struts 1.0 through 1.3 use the javax.servlet namespace. Jakarta EE 9 and later containers, such as Apache Tomcat 10 and later, use the jakarta.servlet namespace and cannot load them. To run on those containers, migrate to NES for Apache Struts 1.3 Forward Compatibility, which is based on Struts 1.3; its Container Support page lists the verified Jakarta EE containers.