public interface Page
Server side pages implement this interface via the concrete PageImpl
class. This class has some additional utility methods as well that page
authors may find useful.
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_BUFFER_SIZE |
static String |
DEFAULT_ENCODING
The default encoding of the page, specified in the header sent back to the client.
|
static String |
DEFAULT_MIME_TYPE
The default mime-type for each page.
|
static String |
DEFAULT_SRC_ENCODING
Used when compiling a page using javac.
|
static String |
PACKAGE_NAME |
Modifier and Type | Method and Description |
---|---|
void |
clientRedirect(javax.servlet.http.HttpServletRequest req,
javax.servlet.http.HttpServletResponse res,
String newLocation)
Redirects the client to the new page location.
|
void |
destroy()
This method is invoked whenever a page is destoryed/unloaded
|
String |
getPagePath(javax.servlet.http.HttpServletRequest req)
Returns the path to this page from the web servers document root.
|
String |
getRealPath(javax.servlet.http.HttpServletRequest req)
Returns the real absolute directory path for the
PagePath . |
CharArrayWriter |
getThreadLocalWriter()
Returns a thread specific CharArrayWriter that can be passed to this method
as various points in the page.
|
void |
init(PageServlet servlet,
String contextRelativePagePath)
This method is invoked whenever a page is created and before it
is run.
|
void |
render(javax.servlet.http.HttpServletRequest req,
javax.servlet.http.HttpServletResponse res) |
static final String PACKAGE_NAME
static final int DEFAULT_BUFFER_SIZE
static final String DEFAULT_MIME_TYPE
javax.servlet.ServletResponse.setContentType
method.static final String DEFAULT_ENCODING
<head><meta http-equiv=content-type content='text/html; charset=UTF-8'></head>Encodings can be tricky. We are first compiling a page into a java source file, then running the source file and sending it's output to the browser. Read the page encoding and charsets if you are using any non-us-ascii or non-ISO-8859-1 characters in your molly source page.
static final String DEFAULT_SRC_ENCODING
If no src_encoding directive is present in the page, we use UTF-8 is the best modern way of doing this (ISO-8859-1 is obsolete and ISO-8859-1 documents can run into issues with javac (which may default to UTF-8 on modern platforms if not specified and umlauts/diacritics/accents are in UTF-8 and ISO-8859-1).
void render(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res) throws Exception
Exception
void init(PageServlet servlet, String contextRelativePagePath) throws javax.servlet.ServletException
Pages should override this method to instantiate/set-up page variables as needed. (pages have no-arg constructors so like most of the servlet API, setup and initialization of variables is done in a init method instead).
When overriding this class, you must remember to call: super.init
The page class is reloaded if the page is modified. Variables
should therefore be cleaned up in the destory
method
as needed.
javax.servlet.ServletException
void destroy()
String getPagePath(javax.servlet.http.HttpServletRequest req)
So for example, if the page is at foo/bar.mp
and is running
under the webapp context of context1
, then the page path
will be: /context1/foo/bar.mp
. If there is no specific
web app (i.e., the most common case of a default "" webapp), then the page
path will be /foo/bar.mp
This page path is essentially what needs to be typed in the browsers URL window to invoke the page. It's also useful as form action parameters. For example, in a molly page:
This will submit the form to the same page where the form is defined. This can be hard coded of course but by using.. <form action="[=getPagePath(req)]" method="post"> .. </form>
getPagePath
, the html
does not have to be changed if the name of the page changes on disk.String getRealPath(javax.servlet.http.HttpServletRequest req)
PagePath
.
So, for example, for a webserver document root at
/web/sites/default/
and a page located in
foo/bar.mp
, the real path will be:
/web/sites/default/foo/bar.mp
void clientRedirect(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res, String newLocation) throws IOException
HttpServletResponse.sendRedirect
method.
The location parameter can be relative to the specified request's URI or relative to the context root if it contains a leading '/'. The webapp name (if any) does not have to be specified, the redirect will creates a full URL (including the webapp context path) suitable for this purpose.
For example:
webapp context | current page | location parameter | resulting page |
default web app ("/") | foo/bar.mp | baz.mp | foo/baz.mp |
default web app ("/") | foo/bar.mp | /baz.mp | baz.mp |
/myapp | foo/bar.mp | baz.mp | /myapp/foo/baz.mp |
/myapp | foo/bar.mp | /baz.mp | /myapp/baz.mp |
req
- the current requestres
- the current responselocation
- location to redirect to.IOException
CharArrayWriter getThreadLocalWriter()
Note: The writer is not reset or flushed when it is retrieved. It
must be reset manually via calling the CharArrayWriter.reset()
method. This design-decision allows request
threads to collect debugging data across multiple pages.
The suggested usage idiom is:
dbg(true); CharArrayWriter cw = getThreadLocalWriter(): bug(cw, "some message"); ... bug(cw, "other message"); ... cw.writeTo(out); cw.reset();