You can compile a Kawa program to a Servlet, and run it in a servlet engine (a Servlet-aware web server). One or more servlets are installed together as a web application. This section includes specific information for the Tomcat and Glassfish web servers.
A web application is a group of data, servlets, and configuration files to handle a related set of URLs. The servlet specification specifies the directory structure of a web application.
Assume the web application is called myapp, and lives in a
directory with the same name. The application normally handles
requests for URLs that start with http://example.com/myapp.
Most files in the application directory are used to handle
requests with corresponding URL. For example,
a file myapp/list/help.html would be the response
to the request http://example.com/myapp/list/help.html.
The directory WEB-INF is special. It contains configuration
files, library code, and other server data.
So to create the myapp application, start with:
mkdir myapp cd myapp mkdir WEB-INF WEB-INF/lib WEB-INF/classes
Copy the Kawa jar from the lib direcory.
(You can also use a “hard” link, but symbolic links may not
work, for security systems.)
cp kawa-home/kawa-2.93.jar WEB-INF/lib/kawa.jar
If you build Kawa from source, you must specify the
--with-servlet configure option.
You should also create the file WEB-INF/web.xml.
For now, this is is just a place-holder:
<web-app> <display-name>My Application</display-name> </web-app>
Assume for simplicity that the source files
are in the WEB-INF/classes directory, and make that the
current directory:
cd .../myapp/WEB-INF/classes
Depending on the source language, you compile your script
sing the --servlet switch:
kawa --servlet -C hello.scm
or:
kawa --servlet --krl -C hello.krl
or:
kawa --servlet --xquery -C hello.xql
This lets the web-application find the compiled servlets.
Finally, you just need to add the new servlet to
the WEB-INF/web.xml file:
<web-app>
<display-name>My Application</display-name>
<servlet>
<servlet-name>MyHello</servlet-name>
<servlet-class>hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyHello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
The <servlet> clause says that the servlet named
MyHello is implemented by the Java class hello.
The <servlet-mapping> clause says that a request
URL /hello should be handled by the servlet named MyHello.
The URL is relative to the application context path,
so the actual URL would be http://example.com/myapp/hello.
Apache’s Tomcat is an open-source
implementation of the servlet specifications.
After you download it,
uncompress it in some convenient location,
which is commonly referred to as $CATALINA_HOME.
To install your web application, copy/move its directory
to be in the $CATALINA_HOME/webapps directory.
Thus for the example above you would have
a $CATALINA_HOME/webapps/myapp directory.
To start or stop Tomcat use the scripts in $CATALINA_HOME/bin.
For example to start Tomcat on a GNU/Linux system run
$CATALINA_HOME/bin/startup.sh. This will start a web server
that listens on the default port of 8080,
so you can browse the above example at http://localhost:8080/myapp/hello.
If you’re running Fedora GNU/Linux, you can use the tomcat6 package:
# yum install tomcat6 # export CATALINA_HOME=/usr/share/tomcat6
You can the manage Tomcat like other system services.
You can install webapps under $CATALINA_HOME/webapps.
Glassfish from Oracle/Sun
is a open-source “application server” that implements
Java EE 6, including the 3.0 servlet specification.
After you download it, uncompress it in some convenient location.
This location is called as-install-parent in the
Quick Start Guide.
The commands you will use is most in ,
where as-install/binas-install is .
as-install/glassfish
To start the server, do:
as-install/bin/startserv
or under under Windows:
as-install\bin\startserv.bat
The default post to listen to is 8080;
you can the port (and lots of other properties)
using the adminstration console at port 4848.
A web application does not need to be any particular location, instead you just install it with this command:
as-install/bin/adadmin deployappdir
where appdir is the application directory - myapp in the example.
(Use asadmin.bat under Windows.)
The following functions only work within a servlet container. To use these functions, first do:
(require 'servlets)
You can conditionalize your code to check at compile-time for servlets, like this:
(cond-expand (in-servlet (require 'servlets) (format "[servlet-context: ~s]" (current-servlet-context))) (else "[Not in a servlet]"))
For a run-time check you can test if (current-servlet) is
non-#!null.
When called from a Kawa servlet handler, returns the actual
javax.servlet.http.HttpServletinstance. Returns#!nullif the current context is not that ofKawaServlet. (Hence this function also returns#!nullif you compile a servlet “by hand” rather that using the--servetoption.)
Procedure: current-servlet-context
Returns the context of the currently executing servlet, as an instance of
javax.servlet.ServletContext.
Procedure: current-servlet-config
Returns the
ServletConfigof the currently executing servlet.
Return the current servlet request, as an instance of
javax.servlet.http.HttpServletRequest.
Return the current servlet response, as an instance of
javax.servlet.http.HttpServletResponse.
Procedure: request-servlet-path
Get the servlet path of the current request. Similar to
request-script-path, but not always the same, depending on configuration, and does not end with a"/".
Get the path info of the current request. Corresponds to the CGI variable
PATH_INFO.
Procedure: servlet-context-realpath [path]
Returns the file path of the current servlet’s "Web application".