The Source for Java Technology Collaboration


Welcome to AjaxAnywhere Wiki

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

Topic AjaxAnywhere . { Edit | Ref-By | Printable | Diffs r5 < r4 < r3 < r2 < r1 | More }
 XML java.net RSS

Revision r5 - 16 Nov 2005 - 17:20:28 - Main.shevit