PDF 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>