Visit NES for Apache Struts Home Page

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.

Verified combinations

Struts lineApplication serverJava 8Java 11Java 17Java 21Java 25
1.0Apache Tomcat 9.0YesYesYesYesYes
1.1Apache Tomcat 9.0YesYesYesYesYes
1.2Apache Tomcat 9.0YesYesYesYesYes
1.3Apache Tomcat 9.0YesYesYesYesYes

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 covers struts, struts-el and struts-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-faces and struts-scripting — works on every combination marked Yes. struts-scripting with 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:

Maven (pom.xml)
<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.