Overview

GeoServer uses a web application framework known as Wicket for its user interface. Wicket differs from most Java web frameworks in that it is component based rather than JSP template based. This makes Wicket a more natural web framework for many Java programmers who are more familiar with Swing programming than web programming.

Plug-ins

Because of its component based nature Wicket components can be loaded from the classpath. Which means that web applications can be built in a modular fashion, rather than in a monolithic fashion.

GeoServer takes this concept one step further to provide a pluggable user interface, in which Wicket components can be plugged in via Spring and the regular GeoServer plug-in mechanism.

Each component that is plugged in is described by a component descriptor. A component descriptor is an instance of the org.geoserver.web.ComponentInfo class:

public abstract class ComponentInfo<C extends Component> implements Serializable {

    /**
     * the id of the component
     */
    String id;
    /**
     * the title of the component
     */
    String title;
    /**
     * The description of the component
     */
    String description;
    /**
     * the class of the component
     */
    Class<C> componentClass;
    
}

A ComponentInfo instance contains meta information about the component being plugged in such as its title and description, as well as the class which implements the component.

Each subclass of ComponentInfo represents a specific extension point. For instance the class org.geoserver.web.MenuPageInfo represents the extension point for “main” pages, ie pages that are linked to from the main menu of the application.