MapServer è un server cartografico che funziona da applicazione CGI.
Il server riceve una richiesta contenente, come parametro inviato tramite l'indirizzo URL, il nome del file di configurazione di una mappa ed eventuali altre preferenze. MapServer risponde o inviando direttamente l'immagine della mappa o copiando il file sul sistema locale e inviando in risposta al cliente un file HTML contenente le principali informazioni sulla mappa prodotta (indirizzo URL della carta, nuovo extent , nuova scala, etc.) Il formato della pagina HTML di risposta è modificabile a piacimento dall'utente, si parla di pagine template.

Meccanismo di funzionamento di MapServer con utilizzo di template HTML.
In questo scenario non vi è memoria sul programma MapServer delle precedenti richieste. Tutte le informazioni sulla mappa sono continuamente inviate avanti e indietro dal cliente al server grazie al meccanismo di templating.
La resa di una carta di MapServer si basa su tre elementi:
Il file di configurazione è un semplice file di testo contenente delle parole chiavi che permettono di identificare gli elementi di configurazione della mappa. Il seguente è un esempio di file di configurazione che definisce una carta contente un solo layer di tipo linea chiamato "fiumi".
MAP
NAME prov_ts
STATUS ON
SIZE 600 600
EXTENT 2409000.00 5048000.00 2436000.00 5075000.00
SHAPEPATH "../data"
UNITS meters
WEB
TEMPLATE "../templates/all.xml"
IMAGEPATH "C:\progetti\schede\schede\schedeWeb\tempImages\"
IMAGEURL "tempImages/"
END # END_WEB
LAYER
NAME fiumi
STATUS ON
DATA fiumi
TYPE LINE
CLASS
SYMBOL 0
NAME "fiumi"
COLOR 0 0 0
SIZE 2
END # END_CLASS
END # END_LAYER
END
MapServer fornisce un potente meccanismo di personalizzazione di una carta che consiste nella modifica del file di configurazione di una mappa tramite passaggio di parametri inviati con la richiesta URL.
Si tratta di una vera è propria sintassi, a volte difficile da applicare, che si basa sull'annidamento degli elementi del file di configurazione.
Ecco un esempio di chiamata che richiede la mappa chiedendo la modifica del colore utilizzato per la resa del layer "fiumi".
http://www.mioserver.it/mapserv?map=prov_ts.map&mode=map&map_fiumi_fiumi_color=0 0 255
Jemma si propone di fungere da memoria tra il cliente (un browser per esempio) e il server, intercettando le informazioni provenienti dal primo e generando le richieste URL da inviare al server http.
Se utilizzato all'interno di un server d'applicazione, per esempio, Jemma permette di memorizzare le preferenze dell'utente nella sessione http dell'utente, permettendo la costruzione di pagine dinamiche in java (java server pages o jsp) con mappe prodotte da MapServer.
Il cuore di Jemma consiste in un unico oggetto, rappresentazione del file di configurazione di MapServer.
L'oggetto Map viene utilizzato per memorizzare le preferenze di un utente e permettere così di modificare l'aspetto della mappa a piacimento.

Diagramma rappresentante l'oggetto e gli oggetti contenuti. La freccia semplice indica un rapporto di uno a uno (un oggetto contiene un solo oggetto dell'altro tipo). Il tratto che termina con un rombo indica un rapporto uno a n (per esempio un oggetto Map può contenere numerosi oggetti Layer).
La base di ogni mappa resta il file di configurazione associato. Ogni attributo dell'oggetto Map può essere o non essere istanziato, ossia può avere o no un valore associato. Vengono prese in considerazioni solo gli attributi istanziati mentre per gli altri vengono utilizzati i valori di default del file di configurazione.
Ciò permette di modificare una mappa complessa indicando unicamente gli attributi che si vogliano modificare e ignorando tutti gli altri.
Jemma nasce all'origine come una libreria per server d'applicazione J2EE, ma può essere ugualmente usata all'interno di applicazioni Java o applet.
Se utilizzata all'interno di un server d'applicazione l'oggetto Map viene associato ad una sessione http e le informazioni scambiate con il cliente sono minime (identificatore della mappa, parametri di personalizzazione, immagine della mappa finita) aumentando il grado di sicurezza del sistema.

Il diagramma mostra le azioni necessarie che intervengono per completare una richiesta di una mappa da un browser verso Jemma.
Cinematica di una richiesta via Jemma in uno scenario di applicazione web con pagine dinamiche.