blob: f6e15ed89c54e813346f3869be8371c98a1e77f3 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" "../../dtd/document-v10.dtd">
<document>
<header>
<title>Request Logicsheet</title>
<authors>
<person name="Christopher Painter-Wakefield" email="paint007@mc.duke.edu"/>
</authors>
</header>
<body>
<s1 title="Description">
<p>The Request logicsheet (taglib) is an XSP logicsheet that wraps XML tags around
standard request operations. Specifically, the Request logicsheet provides an XML
interface to most methods of the HttpServletRequest object (see the
<link href="http://java.sun.com/products/servlet/2.2/javadoc/index.html">
Java Servlet API Specification, version 2.2
</link>) for more information.</p>
<p>The Request tags provide information about all aspects of the current request,
such as the request method (GET, POST, etc.), what protocol is in use (http, https),
cookie information, preferred locale, and so forth. The Request logicsheet is
probably used mostly, however, for obtaining field values from a submitted HTML form.
See xsp-request:get-parameter below for more information on this topic.</p>
</s1>
<s1 title="Usage">
<p>As an XSP logicsheet, the Request logicsheet can only be used in an XSP page.
It may be helpful to be familiar with <link href="xsp.html">XSP</link> before
working with this (or any) logicsheet.</p>
<p>To use the Request logicsheet, you must first declare the <em>xsp-request</em>
namespace, mapping it to the uri <em>http://apache.org/xsp/request/2.0</em>.
This is typically done like this:</p>
<source><![CDATA[
<xsp:page
xmlns:xsp="http://apache.org/xsp"
xmlns:xsp-request="http://apache.org/xsp/request/2.0"
>
...
</xsp:page>
]]></source>
<p>You may then use any of the elements in the <em>request</em> namespace described
in the <link href="request.html#id_el">Elements Reference</link> section below.</p>
</s1>
<s1 title="Example Code">
<p>The following code shows a typical example of using the Request logicsheet.
The output elements display the request method and the value of the query
parameter "fruit". Of course, rather than displaying these values as we've
done, you might instead store them in elements and process them further through
an XSLT stylesheet, for instance.</p>
<source><![CDATA[
<?xml version="1.0"?>
<xsp:page
xmlns:xsp="http://apache.org/xsp"
xmlns:xsp-request="http://apache.org/xsp/request/2.0"
>
<html>
<b>Request method:</b> <xsp-request:get-method/>
<br/>
<b>Fruit requested:</b> <xsp-request:get-parameter name="fruit"/>
</html>
</xsp:page>
]]></source>
<p>If your server is www.mydomain.com and you save this XML in your Cocoon
document tree as /cocoon/request.xml, then you can see the effect of the
<em>request</em> elements by opening your browser with the URL
<code>http://www.mydomain.com/cocoon/request.xml?fruit=apple</code></p>
<p>The output should look something like:</p>
<p><strong>Request Method:</strong> GET</p>
<p><strong>Fruit requested:</strong> apple</p>
</s1>
<s1 title="XSP Interactions">
<p>The Request logicsheet tags may be used interchangeably with XSP code that
directly uses the <code>request</code> object. The <code>request</code> object
is an instance of the HttpServletRequest class, and is available inside the
user element in an XSP page. The Request logicsheet itself uses this object.
Therefore, the following code snippets function essentially the same:</p>
<source>
<strong>Using the Request logicsheet:</strong>
<![CDATA[
<xsp:page
xmlns:xsp="http://apache.org/xsp"
xmlns:xsp-request="http://apache.org/xsp/request/2.0"
>
<page>
<fruit><xsp-request:get-parameter name="fruit"/></fruit>
</page>
</xsp:page>
]]></source>
<source>
<strong>Using the request object:</strong>
<![CDATA[
<xsp:page
xmlns:xsp="http://apache.org/xsp"
>
<page>
<fruit><xsp:expr>request.getParameter("fruit")</xsp:expr></fruit>
</page>
</xsp:page>
]]></source>
<p>You may freely mix Request elements with other XSP Java code. Many, if not
most, Request elements result in String objects. Thus, the following code
fragment is valid:</p>
<source><![CDATA[
<xsp:logic>
String fruit = <xsp-request:get-parameter name="fruit"/>;
if (fruit != null) {
fruit = fruit.toUpperCase();
}
</xsp:logic>
<fruit><xsp:expr>fruit</xsp:expr></fruit>
]]></source>
</s1>
<anchor id="id_el"/>
<s1 title="Elements Reference">
<p>All Request elements which require or allow for additional information allow
you to provide the information as either an attribute or a child element. These
attributes/child elements are listed in the "Attributes/Child Elements" column
of the table below. Unless noted, these are required for the given element;
their absence will result in Java compilation errors or exceptions.</p>
<p>The following fragments are equivalent:</p>
<source><![CDATA[
<xsp-request:get-parameter name="fruit"/>
]]></source>
<source><![CDATA[
<xsp-request:get-parameter>
<xsp-request:name>fruit</xsp-request:name>
</xsp-request:get-parameter>
]]></source>
<p>All Request elements which get data from the request can output the data
in two ways. The <code>as</code> attribute of the element is used to switch
between the different output options. The choice is always between some
default value for <code>as</code> and the value "node". Using the default
value for <code>as</code> (which is most easily achieved by leaving out the
attribute altogether), the Request element will put the result of its operation
in an &lt;xsp:expr> node. This allows you to use the result in a Java expression,
or converts it to text in the output DOM tree. If you use <code>as="node"</code>,
however, the output is embedded in a node or nodes, as appropriate. For instance,
the following code fragment:</p>
<source><![CDATA[
<xsp-request:get-parameter as="xml" name="fruit"/>
]]></source>
<p>results in output similar to:</p>
<source><![CDATA[
<xsp-request:parameter name="fruit">apple</xsp-request:parameter>
]]></source>
<p>This is especially useful with elements that return multiple pieces of
information, such as <code>xsp-request:get-parameter-values</code>. Without using
<code>as="node"</code>, the returned values are written out end to end
without separation. If node output is requested, however, each value
is written out in a separate node, which may then be referenced separately.</p>
<p>The elements which provide for node output are marked with a "yes" in the
"Node?" column of the table below. Unlike the other attributes used in
Request elements, <code>as</code> cannot be supplied as a child element; it
must be supplied as an attribute, if it is used at all.</p>
<note>Since these elements are primarily wrappers around HttpServletRequest
methods, the HttpServletRequest documentation in the
<link href="http://java.sun.com/products/servlet/2.2/javadoc/index.html">
Java Servlet API Specification, version 2.2
</link>
is also helpful in understanding the behavior and usage of these elements.</note>
<table>
<caption>All of the Request logicsheet elements, in alphabetic order.</caption>
<tr>
<th>Element Name</th>
<th>Attributes/Child Elements</th>
<th>Node?</th>
<th>Description</th>
</tr>
<tr>
<td>xsp-request:get-attribute</td>
<td>name</td>
<td>yes</td>
<td>Gets a named attribute set by the servlet container or by a previous
xsp-request:set-attribute operation.</td>
</tr>
<tr>
<td>xsp-request:get-attribute-names</td>
<td></td>
<td>yes</td>
<td>Gets the names of all available request attributes.</td>
</tr>
<tr>
<td>xsp-request:get-auth-type</td>
<td></td>
<td>yes</td>
<td>Gets the name of the authentication scheme used to protect this request
location, if used, e.g., BASIC or SSL.</td>
</tr>
<tr>
<td>xsp-request:get-character-encoding</td>
<td></td>
<td>yes</td>
<td>Gets the name of the character encoding used in the body of this request.</td>
</tr>
<tr>
<td>xsp-request:get-content-length</td>
<td></td>
<td>yes</td>
<td>Gets the length, in bytes, of the request body, or -1 if the length is unknown.</td>
</tr>
<tr>
<td>xsp-request:get-content-type</td>
<td></td>
<td>yes</td>
<td>Gets the MIME type of the body of the request.</td>
</tr>
<tr>
<td>xsp-request:get-context-path</td>
<td></td>
<td>yes</td>
<td>Gets the portion of the request URI that indicates the context of the request.</td>
</tr>
<tr>
<td>xsp-request:get-cookies</td>
<td></td>
<td>yes</td>
<td>Gets all cookie objects supplied by the client with this request.</td>
</tr>
<tr>
<td>xsp-request:get-date-header</td>
<td>name, format <em>(optional)</em></td>
<td>yes</td>
<td>Gets the value of the named request header that represents a date. Use this
method with headers that contain dates, such as If-Modified-Since. The <code>as</code> attribute
for this element may be "long" (default), "string", "date", or "node". If "long",
the returned value is a Java <code>long</code> that represents a Java <code>Date</code>
value. If "date", the returned value is a Java <code>Date</code> object. If "string" or
"node", the optional <code>format</code> attribute may be used
to supply a format string for a Java <code>SimpleDateFormat</code> to format the resulting
string.</td>
</tr>
<tr>
<td>xsp-request:get-header</td>
<td>name</td>
<td>yes</td>
<td>Gets the string value of the named request header.</td>
</tr>
<tr>
<td>xsp-request:get-headers</td>
<td>name</td>
<td>yes</td>
<td>Gets all values of the named request header.</td>
</tr>
<tr>
<td>xsp-request:get-header-names</td>
<td></td>
<td>yes</td>
<td>Gets the names of all available request headers.</td>
</tr>
<tr>
<td>xsp-request:get-int-header</td>
<td>name</td>
<td>yes</td>
<td>Gets the value of the named request header which represents an integer,
or -1 if the named header doesn't exist. The <code>as</code> attribute may
be set to "int" (default), "string", or "node".</td>
</tr>
<tr>
<td>xsp-request:get-locale</td>
<td></td>
<td>yes</td>
<td>Gets the preferred locale for the client browser, or the default
server locale if not provided by the client.</td>
</tr>
<tr>
<td>xsp-request:get-locales</td>
<td></td>
<td>yes</td>
<td>Gets the locales accepted by the client in order of preference.</td>
</tr>
<tr>
<td>xsp-request:get-method</td>
<td></td>
<td>yes</td>
<td>Gets the name of the method associated with this request, e.g., GET, POST, or PUT.</td>
</tr>
<tr>
<td>xsp-request:get-parameter</td>
<td>name</td>
<td>yes</td>
<td>Gets the value of the named request parameter. This is a value from
the request string (e.g., ?fruit=apple) or from POSTed form data. If the parameter
has more than one value, (e.g, ?fruit=apple&amp;fruit=orange), then this gets the first
value. See xsp-request:get-parameter-values. Possible attributes:
form-encoding (depends on the encoding of the page which sends the form data)
and container-encoding (default per servlet spec: ISO-8859-1 but if your servlet container
uses another one you can adjust)</td>
</tr>
<tr>
<td>xsp-request:get-parameter-names</td>
<td></td>
<td>yes</td>
<td>Gets the names of all the request parameters.</td>
</tr>
<tr>
<td>xsp-request:get-parameter-values</td>
<td>name</td>
<td>yes</td>
<td>Gets all values for the named request parameter.</td>
</tr>
<tr>
<td>xsp-request:get-path-info</td>
<td></td>
<td>yes</td>
<td>Gets any additional path information supplied by the client with this request.</td>
</tr>
<tr>
<td>xsp-request:get-path-translated</td>
<td></td>
<td>yes</td>
<td>Gets any additional path information after the servlet name but before the query string,
translated to a real path.</td>
</tr>
<tr>
<td>xsp-request:get-protocol</td>
<td></td>
<td>yes</td>
<td>Gets the name and version of the protocol the request uses, for example, HTTP/1.1.</td>
</tr>
<tr>
<td>xsp-request:get-query-string</td>
<td></td>
<td>yes</td>
<td>Gets the query string for this request (e.g., "?fruit=apple&amp;bread=rye").</td>
</tr>
<tr>
<td>xsp-request:get-remote-address</td>
<td></td>
<td>yes</td>
<td>Gets the IP address of the requesting client.</td>
</tr>
<tr>
<td>xsp-request:get-remote-host</td>
<td></td>
<td>yes</td>
<td>Gets the fully-qualified name of the requesting client, or the IP address
if the name cannot be determined.</td>
</tr>
<tr>
<td>xsp-request:get-remote-user</td>
<td></td>
<td>yes</td>
<td>Gets the login name of the user making the request, if a user has been
authenticated.</td>
</tr>
<tr>
<td>xsp-request:get-requested-session-id</td>
<td></td>
<td>yes</td>
<td>Gets the session id contained in the request.</td>
</tr>
<tr>
<td>xsp-request:get-sitemap-uri</td>
<td></td>
<td>yes</td>
<td>Gets the part of the request URL that was matched in the sitemap.</td>
</tr>
<tr>
<td>xsp-request:get-requested-url</td>
<td></td>
<td>yes</td>
<td>Returns the full request URL including server name and port.</td>
</tr>
<tr>
<td>xsp-request:get-scheme</td>
<td></td>
<td>yes</td>
<td>Gets the name of the scheme used in this request, e.g., http or https.</td>
</tr>
<tr>
<td>xsp-request:get-server-name</td>
<td></td>
<td>yes</td>
<td>Gets the name of the server that received the request.</td>
</tr>
<tr>
<td>xsp-request:get-server-port</td>
<td></td>
<td>yes</td>
<td>Gets the port on which the request was received, e.g., 80 or 443.</td>
</tr>
<tr>
<td>xsp-request:get-servlet-path</td>
<td></td>
<td>yes</td>
<td>Gets the part of the request URL that calls the servlet.</td>
</tr>
<tr>
<td>xsp-request:get-session-attribute</td>
<td></td>
<td>no</td>
<td>Gets a given attribute of a session.</td>
</tr>
<tr>
<td>xsp-request:get-session-id</td>
<td></td>
<td>yes</td>
<td>Gets the id of the session.</td>
</tr>
<tr>
<td>xsp-request:get-user-principal</td>
<td></td>
<td>yes</td>
<td>Gets a java.security.Principal object containing the name of the user,
if a user has been authenticated.</td>
</tr>
<tr>
<td>xsp-request:get-uri</td>
<td></td>
<td>yes</td>
<td>Gets the part of the request URL after the server address and port, up to
the query string.</td>
</tr>
<tr>
<td>xsp-request:is-secure</td>
<td></td>
<td>yes</td>
<td>Indicates whether the request was made using a secure protocol such as HTTPS.</td>
</tr>
<tr>
<td>xsp-request:is-user-in-role</td>
<td>role</td>
<td>yes</td>
<td>Indicates whether the authenticated user is a member in the named role.</td>
</tr>
<tr>
<td>xsp-request:remove-attribute</td>
<td>name</td>
<td>no</td>
<td>Removes the named attribute from the request.</td>
</tr>
<tr>
<td>xsp-request:set-attribute</td>
<td>name</td>
<td>no</td>
<td>Sets the named attribute to the value represented by any children of the element.
If the element has a text node as its child, the attribute will be set to the String
containing the text.</td>
</tr>
</table>
</s1>
</body>
</document>