CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-eclipse-jetty--apache-jstl

Apache JSTL dependency aggregation module for Eclipse Jetty web applications

Pending
Overview
Eval results
Files

jetty-integration.mddocs/

Jetty Integration

Configuration utilities and integration patterns for enabling JSTL functionality within Eclipse Jetty web applications, including WebAppContext setup and container include patterns.

Integration Components

JspConfig Utility Class

Centralized configuration utility for setting up JSP and JSTL processing in Jetty WebAppContext instances.

package org.eclipse.jetty.jstl;

public class JspConfig {
    /**
     * Initialize WebAppContext for JSP and JSTL processing.
     * 
     * Configures servlet context temporary directory, container include JAR patterns,
     * and resource base paths for proper JSTL library loading and JSP compilation.
     *
     * @param context WebAppContext to configure for JSTL support
     * @param baseUri Base URI for the web application resources
     * @param scratchDir Temporary directory for JSP compilation artifacts
     */
    public static void init(WebAppContext context, URI baseUri, File scratchDir);
}

Usage Example:

import org.eclipse.jetty.jstl.JspConfig;
import org.eclipse.jetty.webapp.WebAppContext;
import java.io.File;
import java.net.URI;

// Create WebAppContext
WebAppContext context = new WebAppContext();
context.setContextPath("/myapp");

// Setup directories
File webAppDir = new File("src/main/webapp");
File scratchDir = new File("target/jsp-scratch");

// Initialize JSTL configuration
JspConfig.init(context, webAppDir.toURI(), scratchDir);

// Additional context configuration
context.addConfiguration(new AnnotationConfiguration());

Container Include Patterns

The module configures specific JAR patterns to ensure JSTL libraries are properly included in the web application classpath.

// Configured JAR patterns for container inclusion:
String CONTAINER_INCLUDE_JAR_PATTERN = 
    ".*/jetty-jakarta-servlet-api-[^/]*\\.jar$|" +
    ".*jakarta.servlet.jsp.jstl-[^/]*\\.jar|" +
    ".*taglibs-standard.*\\.jar";

This pattern ensures the following JARs are included:

  • Jakarta Servlet API JAR files
  • JSTL API JAR files (jakarta.servlet.jsp.jstl)
  • Apache JSTL implementation JARs (taglibs-standard)

Module Configuration

Jetty module descriptor that enables JSTL support system-wide.

# Module: apache-jstl.mod
[description]
Enables the apache version of JSTL for all webapps.

[lib]
lib/apache-jstl/*.jar

Module Activation:

# Command line activation
java -jar jetty-start.jar --module=apache-jstl

# Or via start.ini
--module=apache-jstl

WebAppContext Configuration Details

The JspConfig.init() method performs the following configuration steps:

  1. Temporary Directory Setup:

    context.setAttribute("jakarta.servlet.context.tempdir", scratchDir);
  2. Container Include Pattern Configuration:

    context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
        ".*/jetty-jakarta-servlet-api-[^/]*\\.jar$|.*jakarta.servlet.jsp.jstl-[^/]*\\.jar|.*taglibs-standard.*\\.jar");
  3. Resource Base Configuration:

    context.setWar(baseUri.toASCIIString());
    context.setResourceBase(baseUri.toASCIIString());

Integration Patterns

Test Environment Setup

Complete example of setting up a test environment with JSTL support:

import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.toolchain.test.FS;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.jstl.JspConfig;

public class JstlTestSetup {
    public static Server createTestServer() throws Exception {
        // Create server
        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(0); // Use random available port
        server.addConnector(connector);

        // Setup web application directory
        File testWebAppDir = new File("src/test/webapp");
        File scratchDir = new File("target/test-scratch");
        FS.ensureEmpty(scratchDir);

        // Configure WebAppContext
        WebAppContext context = new WebAppContext();
        context.setContextPath("/");
        
        // Initialize JSTL configuration
        JspConfig.init(context, testWebAppDir.toURI(), scratchDir);
        
        // Add annotation processing
        context.addConfiguration(new AnnotationConfiguration());
        
        server.setHandler(context);
        return server;
    }
}

Production Deployment

Maven dependency configuration for production deployment:

<dependencies>
    <!-- Apache JSTL Module -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>apache-jstl</artifactId>
        <version>11.0.0</version>
    </dependency>
    
    <!-- Jetty WebApp support -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>11.0.0</version>
    </dependency>
    
    <!-- JSP support (if needed) -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>apache-jsp</artifactId>
        <version>11.0.0</version>
    </dependency>
</dependencies>

Custom Tag Library Integration

Example of integrating custom tag libraries alongside JSTL:

// Create custom tag library JAR
File libDir = new File(webAppDir, "WEB-INF/lib");
FS.ensureDirExists(libDir);
File customTagLibDir = new File("src/main/taglib");
JAR.create(customTagLibDir, new File(libDir, "custom-taglib.jar"));

// Configure context with both JSTL and custom tags
JspConfig.init(context, webAppDir.toURI(), scratchDir);

Types

// Core Jetty types
class WebAppContext {
    void setAttribute(String name, Object value);
    void setWar(String war);
    void setResourceBase(String resourceBase);
    void setContextPath(String contextPath);
    void addConfiguration(Configuration configuration);
}

class Server {
    void addConnector(Connector connector);
    void setHandler(Handler handler);
    void start() throws Exception;
    void stop() throws Exception;
}

class ServerConnector {
    ServerConnector(Server server);
    void setPort(int port);
    int getLocalPort();
    String getHost();
}

// Standard Java types
class URI {
    String toASCIIString();
}

class File {
    URI toURI();
    // Standard file operations
}

Error Handling

Common integration issues and solutions:

  • ClassNotFoundException: Ensure JSTL JARs are in the container include pattern
  • JSP Compilation Errors: Verify scratch directory is writable and has sufficient space
  • Tag Library Not Found: Check that taglib URI declarations match the JSTL standard URIs
  • Module Loading Failures: Verify the apache-jstl module is properly installed in Jetty's modules directory

Install with Tessl CLI

npx tessl i tessl/maven-org-eclipse-jetty--apache-jstl

docs

index.md

jetty-integration.md

jstl-core.md

jstl-formatting.md

tile.json