 |
AjaxAnywhere is a Java library for AJAX.
AjaxAnywhere FAQ Section
Class Diagrams
javax.servlet.Filter
A
|
AAFilter
---------------------------------------------------------
javax.servlet.ServletResponse
A
|
javax.servlet.http.HttpServletResponse
A
|
javax.servlet.http.HttpServletResponseWrapper
// Lets us manipulate the data after that the target of the request is done with it.
// Normally, this cannot be done after the ServletOutputStream has been closed.
A
|
BufferResponseWrapper
// Unlike the typical response.getWriter() function, getWriter() returns a PrintWriter
// derived from a StringWriter(). Similarly, getOutputStream() also returns a buffered stream.
// There are extra methods: getBuffer() and findSubstring().
// Many HttpServletResponse methods such as setContentType() and setHeader() are stubbed to do nothing.
---------------------------------------------------------
Simplified Sequence Diagram for Server Request
0
/|\ -> AAFilter.doFilter()
/ \ |
V
// Store refreshZones:HashSet into request
<<AAUtils.setZonesToRefresh()>>
request.setAttribute("AjaxAnywhere.refreshZones", new HashSet())
<<AAUtils.getRefreshZonesFromURL()>>
if any zone == "document.all" setRefreshAll(request,true)
foreach( csdZoneList in request.getParameterValues("aazones") )
add each zone in comma seperated list to "refreshZones" HashSet
filterChain.doFilter() passes the request on to the target Servlet or JSP, which will write the response to bufferedResponseWriter
|
V // legend: bRW = bufferedResponseWriter
-------------<_>-------------
| | |
| ... ...
|
| bRW.getRedirect != null
| (bRW.sendRedirect() has been called)
V
XMLHandlerWrapper.sendRedirect(bRW)
|
V
doc: org.w3c.dom.Document
root: org.w3c.dom.Element = doc.createElement("redirect")
root.appendChild(doc.createCDATASection(bRW.getRedirect()))
// <redirect><![CDATA[...]]></redirect>
|
V
sendDOMDocument(bRW.originalResponse, doc)
...
...
| AAUtils.getRefreshAll(request)
| // request includes attribute: AjaxAnywhere.refreshAll (optionally set to true)
V
XMLHandler.sendCompleteResponse(bRW)
|
V
doc: org.w3c.dom.Document
root: org.w3c.dom.Element = doc.createElement("document")
root.appendChild(doc.createCDATASection(bRW.getBuffer()))
// <document><![CDATA[...]]></document>
|
V
sendDOMDocument(bRW.originalResponse, doc)
...
...
| else
V
XMLHandler.sendZones(bRW,request,refreshZones)
|
V
doc: org.w3c.dom.Document
root: org.w3c.dom.Element = doc.createElement("zones")
parser: org.ajaxanywhere.parser.ResponseParser (via Factory)
scripts: ArrayList
foreach( zone in refreshZones )
zoneNode = doc.createElement("zone")
zoneNode.setAttribute("name", zone)
result = parser.parse(AAUtils.getZoneContent(zone,bRW, request))
// uses bRW.findSubstring to extract everything between
// '<span id="aazone.'+zone and '<!-- @end of zone@ --></span>'
scripts.addAll(result.scriptContents)
zoneNode.appendChild(doc.createCDATASection(result.htmlContent))
root.appendChild(zoneNode)
foreach( script in scripts )
// For some reason, scripts seem to be truncated at first '>'
scriptNode = doc.createElement("script")
scriptNode.appendChild(doc.createCDATASection(script))
root.appendChild(scriptNode)
// <zones>
// <zone name="zoneA"><![CDATA[...]]></zone>...
// <script><![CDATA[...]]></script>...
// </zones>
|
V
sendDOMDocument(bRW.originalResponse, doc)
...
<<Exception>>
|
V
XMLHandler.handleError(response.ex)
... ... ...
<<sendDOMResponse>>
|
V
transformer: javax.xml.transform.Transformer
domSource: javax.xml.transform.dom.DOMSource(doc)
streamResult: javax.xml.transform.stream.StreamResult(originalResponse.getOutputStream())
transformer.transform( domSource, streamResult );
originalResponse.flushBuffer()
-- Main.shevit - 07 Nov 2005
-- Main.nalbion - 11 Nov 2005
|