Returning General Content
The typical result of a web
Mathematica request is an HTML page, which might include references to images. The commands available for web
Mathematica are designed to make this type of request very convenient. However, it is also very useful to be able to return other formats such as
Mathematica notebooks or TeX documents.
Mathematica commands for generating these other formats are
Export and
ExportString. When these other formats are returned to a browser, it can often launch a helper application that provides special functionality for that format. This section discusses how to use web
Mathematica to return general content of different formats.
Direct Return
The simplest way to return content type other than HTML is to write a page that only returns your data. If your data is static, you should insert it into the page. Alternatively, if it has to be generated each time by
Mathematica, you should just have an
evaluate tag that returns your data and not use any HTML markup. It is a good idea to set the content type at the top of the page. This technique can be useful for
AJAX and
web service interactions. An example follows.
<%@ page contentType="text/mathml"%>
<%@ taglib uri="http://www.wolfram.com/msp" prefix="msp" %>
<msp:evaluate>
MSPFormat[ Integrate[ 1/(1-x^3),x], StandardForm, RawMathML]
</msp:evaluate>
An alternative to using a page directive is to use the
ContentType option of
MSPPageOptions. The following example demonstrates how this can be done.
<msp:evaluate>
MSPPageOptions[ ContentType -> "text/mathml"]
</msp:evaluate>
<msp:evaluate>
MSPFormat[ Integrate[ 1/(1-x^3),x], StandardForm, RawMathML]
</msp:evaluate>
It is probably more convenient just to use the page directory.
MSPReturn
When an MSP script evaluates
MSPReturn, the processing of the script is terminated and the first argument is immediately returned. The second argument specifies the content type. In this example a notebook object is returned, and the result is set to be
application/mathematica.
MSPReturn[ "Notebook[Cell[\"Hello\",\"Title\"]]","application/mathematica"]
Certain HTTP clients can use the content type to launch a helper application. However, some clients need a filename to be associated with the request. For this purpose,
MSPReturn takes a third argument that sets the filename in an HTTP header. An example follows.
<msp:evaluate>
If[ format === Notebook,
MSPReturn[ data, "application/mathematica","notebook.nb"]];
</msp:evaluate>
However, for some HTTP clients (for example Internet Explorer) this has the undesirable effect of causing the client to display two
Open or Save dialog boxes. Most clients work much better if the request for the script that contains the
MSPReturn uses the filename with an appropriate extension. Since the extension for web
Mathematica requests has to end in
.jsp, this is not possible. An alternative is to generate a URL that has the correct extension; this functionality is provided by
MSPURLStore.
MSPReturn is useful when the commands are embedded inside an existing page and you just want to terminate processing the page and return the result. It is simpler to use the
direct return technique, so this would be preferred if it is possible.
MSPURLStore
MSPURLStore uses the mechanism that web
Mathematica provides for storing images generated by commands such as
MSPShow. It actually stores its argument on the server and returns a URL that references the argument.
Out[3]= | |
The URL is relative to the request that contained the
MSPURLStore. It contains a unique identifier and a description of the content type. Since the server steadily deletes stored information on the server, the information will not remain on the server indefinitely. This mechanism is particularly useful for preparing input for plug-ins and applets.
MSPURLStore can also take a third argument to set the filename, which is put into the URL that is returned. For example, the filename of notebook.nb is set in this example.
Out[4]= | |
Setting the filename can be helpful for the browser to choose the correct helper application. The example script
Examples/ContentStore.jsp has an example of
MSPURLStore.
MSPURLStore is useful as a way of returning content if you need a URL such as in a
src attribute of an
img tag. This can be useful when working with dynamic client technologies such as AJAX or Flash.