# Other configuration elements

## Overview

A page flow file is comprised of three sections:

* The `<files>` elements list files that must be served directly to the client, such as images or CSS files.
* The `<page>` elements declare pages and for each one specify identifier, path, model, view, and XML submission.
* The `<epilogue>``, <not-found-handler>`, `<unauthorized-handler>` and `<error-handler>` elements define additional behavior that apply to all the pages.

## The files element

Some files are not dynamically generated and are served to the client as-is. This is typically the case for images such as GIF, JPEG, CSS files, etc..

You tell the PFC what files to serve directly with one or more `<files>` elements in the page flow. The example below shows the configuration used by the Orbeon Forms examples:

```markup
<controller>
    <files path="*.gif"/>
    <files path="*.css"/>
    <files path="*.pdf"/>
    <files path="*.js"/>
    <files path="*.png"/>
    <files path="*.jpg"/>
    <files path="*.wsdl"/>
    <files path="*.html" mediatype="text/html"/>
    <files path="*.java" mediatype="text/plain"/>
    <files path="*.txt"  mediatype="text/plain"/>
    <files path="*.xq"   mediatype="text/plain"/>
    ...
</controller>
```

With `<files path="*.gif">`, if a request reaches the PFC with the path `images/logo.gif`, the file `oxf:/images/logo.gif` is sent in response to that request.

The `<files>` element supports the [`path` and `matcher`](#matchers) attributes like the `<page>` element. It also supports a `mediatype` attribute telling the PFC what media type must be sent to the client with the files. The PFC uses defaults for well-known extension, as defined by the [Resource Server processor](http://wiki.orbeon.com/forms/doc/developer-guide/processors-other#resource-server). In doubt, you can specify the mediatype attribute.

## The epilogue element

![](/files/-LEkC8YZAi99Y2LRkG-x)

You often want a common look and feel across pages. Instead of duplicating the code implementing this look and feel in every page view, you can define it in a central location called the *page flow epilogue*. The `<epilogue>` element specifies the [XPL pipeline](http://wiki.orbeon.com/forms/doc/developer-guide/xml-pipeline-language-xpl) which implements the page flow epilogue.

This is an example of `<epilogue>` element, pointing to the default epilogue XPL pipeline:

```markup
<epilogue url="oxf:/config/epilogue.xpl">
```

The page flow epilogue is discussed in more details in the [Page Flow Epilogue](http://wiki.orbeon.com/forms/doc/developer-guide/page-flow-epilogue) documentation.

## The not-found-handler element

The `<not-found-handler>` element is used to specify a page (the "not found" page) to call when no `<page>` element in the page flow is matched by the current request. There can be only one `<not-found-handler>` per page flow.

The "not found" page is also run by the PFC when a page throws an exception denoting that a resource has not been found:

* `HttpStatusCodeException` with code 404
* `ResourceNotFoundException`

The "not found" page does *not* run for resources served through the `<files>` element. In that case, the PFC returns instead a "not found" code to the user agent (code 404 in the case of HTTP).

This is an example of `<not-found-handler>` element and the associated `<page>` element:

```markup
<page id="my-not-found" path="/not-found" view="/config/not-found.xhtml">  
...
<not-found-handler page="my-not-found">
```

By default, `oxf:/config/not-found.xhtml` displays a simple XHTML page telling the user that the page requested cannot be found.

*NOTE: The "not found" page does not run for resources served through the* `<files>` *element. In that case, the PFC returns instead a "not found" code to the user agent (code 404 in the case of HTTP).*

## The unauthorized-handler element

The `<unauthorized-handler>` element is used to specify a page (the "unauthorized" page) to call when an unauthorized condition has taken place. Specifically, this happens when a page throws an exception:

* `HttpStatusCodeException` with code 401 or 403

Example:

This is an example of `<unauthorized-handler>` element and the associated `<page>` element:

```markup
<page id="my-unauthorized" path="/unauthorized" view="unauthorized.xhtml">  
...
<unauthorized-handler page="my-unauthorized">
```

## Error handling and the error-handler element

Several things can go wrong during the execution of a page flow by the PFC, in particular:

1. An action, page model, page view or epilogue may generate an error at runtime.
2. The page flow may be ill-formed.

Errors occurring while running a given page (#1 above) can be handled via the `<error-handler>` element. This works in a way very similar to the `<not-found-handler>` element:

```markup
<page id="error" path="/error" model="/config/error.xpl"/>
...
<error-handler page="error"/>
```

Other errors (#2 above) are not directly handled by the PFC. Instead, they are handled with the error [XPL pipeline](http://wiki.orbeon.com/forms/doc/developer-guide/xml-pipeline-language-xpl) specified in the web application's `web.xml` file. By default, the error processor is the Pipeline processor, which runs the `oxf:/config/error.xpl` XPL pipeline. You can configure `error.xpl` for your own needs. By default, it formats and displays the Java exception which caused ther error.

See [Packaging and Deployment](http://wiki.orbeon.com/forms/doc/developer-guide/packaging-and-deployment) for more information about configuring error processors.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.orbeon.com/xml-platform/controller/other.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
