- -

PDFPDF version

Gomba Servlets

This is an overview of the Gomba servlets, for reference documentation about these servlets see the Javadocs.

XMLServlet

Use this servlet to fetch data from a JDBC data source and expose it on the Web as an XML resource. Data may also be presented in any other format (HTML, CSV, RSS, etc) by trasforming the default XML with a custom XSLT stylesheet.

Here's a basic usage example:

 
<servlet>
  <servlet-name>articles</servlet-name>
  <servlet-class>org.gomba.XMLServlet</servlet-class>
  <init-param>
    <param-name>query</param-name>
    <param-value>
      SELECT title, abstract, creationdate, modificationdate
      FROM articles
      WHERE id=${path.0 java.lang.Integer} order by title
    </param-value>
  </init-param>
  <init-param>
    <param-name>response-headers</param-name>
    <param-value>
    Last-Modified: ${column.modificationdate}
    </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
 

DatumServlet

Use this servlet to extract a single value and expose it on the Web with an arbitrary media type. This servlet is useful for presenting images, PDF files, long texts etc (possibly stored inside BLOBs or CLOBs).

 
<servlet>
  <servlet-name>picture</servlet-name>
  <servlet-class>org.gomba.DatumServlet</servlet-class>
  <init-param>
    <param-name>query</param-name>
    <param-value>
      SELECT picture 
      FROM pictures
      WHERE articleid=${path.0 java.lang.Integer} and picture is not null
    </param-value>
  </init-param>
  <init-param>
    <param-name>media-type</param-name>
    <param-value>image/jpeg</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
 

UpdateServlet

This servlet can write to a database. It is possible to execute multiple updates by setting the batch parameter to true. Updates are performed as parts of a single transaction and rolled back in case of error.

<servlet>
  <servlet-name>articleInsert</servlet-name>
  <servlet-class>org.gomba.UpdateServlet</servlet-class>
  <init-param>
    <param-name>query</param-name>
    <param-value>/WEB-INF/sql/articleInsert.jspx</param-value>
  </init-param>
  <init-param>
    <param-name>batch</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>http-method</param-name>
    <param-value>POST</param-value>
  </init-param>
  <init-param>
    <param-name>http-status</param-name>
    <param-value>201</param-value>
  </init-param>
  <init-param>
    <param-name>response-headers</param-name>
    <param-value>
    Location: &uri-space;articles/${column.id}
    </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

Where articleInsert.jspx is something like:

<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:x="http://java.sun.com/jsp/jstl/xml"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
  <jsp:directive.page session="false"/>
  <!-- parse the XML request -->
  <x:parse doc="${pageContext.request.reader}" var="myDoc"/>

  <c:set var="title" scope="request">
    <x:out select="$myDoc/article/title" escapeXml="false"/>
  </c:set>

  <c:set var="text" scope="request">
    <x:out select="$myDoc/article/text" escapeXml="false"/>
  </c:set>

  insert into articles
  (title, text, creation_date)
  values
  (
  \${requestScope.title},
  \${requestScope.text},
  SYSDATE()
  );

  select LAST_INSERT_ID() as id

</jsp:root>

DispatcherServlet

This servlet forwards HTTP requests to other servlets. Target servlets are mapped to HTTP request methods: GET, POST, PUT, DELETE. This is useful to build read/write/update/delete web services by compositing servlets that manage only a single operation. One can also mix generic Gomba servlets with custom made ones.

 
<servlet>
  <servlet-name>myService</servlet-name>
  <servlet-class>org.gomba.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>GET</param-name>
    <param-value>articleReaderServlet</param-value>
  </init-param>
  <init-param>
    <param-name>POST</param-name>
    <param-value>articleCreatorServlet</param-value>
  </init-param>
  <init-param>
    <param-name>PUT</param-name>
    <param-value>articleUpdaterServlet</param-value>
  </init-param>
  <init-param>
    <param-name>DELETE</param-name>
    <param-value>articleEraserServlet</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
 
by Flavio Tordini