Class WebTerminal

All Implemented Interfaces:
Closeable, Flushable, AutoCloseable, Sized, TerminalExt, Terminal

public class WebTerminal extends LineDisciplineTerminal
A web-based terminal implementation that extends LineDisciplineTerminal.

This class provides a web interface for terminal interaction using an embedded HTTP server. It serves an HTML page with JavaScript that communicates with the terminal via HTTP requests. The terminal supports ANSI escape sequences and renders them as HTML with CSS styling.

Features:

  • HTTP server using JDK's built-in HttpServer
  • Real-time terminal updates via AJAX polling
  • ANSI escape sequence rendering in HTML/CSS
  • Keyboard input handling via JavaScript
  • GZIP compression support
  • Constructor Details

    • WebTerminal

      public WebTerminal() throws IOException
      Creates a new WebTerminal with default settings (localhost:8080).
      Throws:
      IOException
    • WebTerminal

      public WebTerminal(String host, int port) throws IOException
      Creates a new WebTerminal with specified host and port.
      Parameters:
      host - the host to bind to
      port - the port to bind to
      Throws:
      IOException
    • WebTerminal

      public WebTerminal(String host, int port, int columns, int rows) throws IOException
      Initialize a WebTerminal bound to the given host and port and configured with the specified columns and rows.
      Parameters:
      host - the host address to bind the embedded HTTP server to
      port - the preferred port for the embedded HTTP server (use 0 to select an ephemeral port)
      columns - the initial number of terminal columns
      rows - the initial number of terminal rows
      Throws:
      IOException - if an I/O error occurs while initializing terminal resources
  • Method Details

    • getComponent

      public WebTerminal.WebTerminalComponent getComponent()
      Gets the web terminal component.
      Returns:
      the WebTerminalComponent instance
    • getUrl

      public String getUrl()
      Gets the URL where the web terminal is accessible.
      Returns:
      the web terminal URL
    • start

      public void start() throws IOException
      Starts the HTTP server and begins serving the web terminal.
      Throws:
      IOException - if the server cannot be started
    • doClose

      protected void doClose() throws IOException
      Overrides:
      doClose in class LineDisciplineTerminal
      Throws:
      IOException
    • stop

      public void stop()
      Stops the HTTP server.
    • isRunning

      public boolean isRunning()
      Returns whether the web terminal is currently running.
      Returns:
      true if running, false otherwise
    • write

      public boolean write(String text)
      Writes text to the terminal.
      Parameters:
      text - the text to write
      Returns:
      true if successful
    • pipe

      public String pipe(String input)
      Reads and processes input through the terminal.
      Parameters:
      input - the input to process
      Returns:
      the processed input
    • read

      public String read()
    • dump

      public String dump(long timeout, boolean forceUpdate) throws InterruptedException
      Dumps the terminal content as HTML.
      Parameters:
      timeout - maximum time to wait for changes in milliseconds
      forceUpdate - whether to force an update even if screen is not dirty
      Returns:
      the terminal content as HTML, or null if no update
      Throws:
      InterruptedException - if interrupted
    • setSize

      public void setSize(Sized sz)
      Description copied from interface: Terminal
      Requests that the terminal adopt the specified window dimensions. Implementations may apply constraints or ignore the request if resizing is unsupported; callers should use Terminal.getSize() to observe the effective size after calling this method.
      Specified by:
      setSize in interface Terminal
      Overrides:
      setSize in class LineDisciplineTerminal
      Parameters:
      sz - the desired terminal size (columns and rows)
      See Also:
    • setSize

      @Deprecated public boolean setSize(int columns, int rows)
      Deprecated.
      Use setSize(Sized) instead.
      Set the terminal dimensions in columns and rows.
      Parameters:
      columns - the new number of columns
      rows - the new number of rows
      Returns:
      `true` if the terminal was resized, `false` otherwise