Jsp response performance

Jsp response performance
          ===================
          The problem:
          We have performance problem while running a jsp-application.
          More specific let's assume the jsp-page generates 1000 lines as a response
          to the browser.
          I've done some testing and if the jsp makes 1000 print.out() it works out
          signaficantly
          slower then to create a StringBuffer(with 1000 lines) and do one print.out.
          Why is that ?
          I thought the print.out where buffered in the response...
          ..Per Lovdinger
          

Hi,
          When using the "out.print( ... )" in a JSP, I believe that it forces the
          compiled servlet to use a PrintWriter. Servlets that use PrintWriter
          instead of ServletOutputStream, are known to be at least 15% slower.
          If you can, I would suggest using a servlet instead of a JSP.
          Although it does not ultimately answer your question, it does give you some
          idea why the "out.print" is slow, and what you need to do if performance is
          a must!
          Also, 1000 line output is a large output. You may wish to find a way to
          break this into portions, and display it that way.
          -np
          

Similar Messages

  • How to send a text file as jsp response

    Hi
    I want to send a text file/or other file as jsp response ..How to do it..
    Pls tell me if any body knows about it..
    thanks

    Hmmm im no expert but i think you would have to convert it to a byte array and use OutputStream with the response ... not sure ...like i said, im no expert

  • Droid RAZR M slow response performance

    After a year of owning this phone, I've noticed the UI response performance has degraded significantly.  I've done a factory reset and this alleviated the problem briefly, but the problem resurfaced about a week later.
    I know it has nothing to do with the Apps installed since I deleted all installed apps on the phone prior to performing the factory reset and left it that way until it started hanging during UI interactions.
    Has anybody else experienced the same performance degradation?

    Also, the battery usage has been getting increasingly high for Wi-Fi, so I turned it off yesterday.  Even though it has been off since charging to 100%, the WiFi has expended 17% of the total used:

  • JSP response into a Javascript code

    Suppose I have a form that I submit, and its action is set to a JSP page that returns a series of elements <option>, for example:
        <option>2005</option>
        <option>2006</option>
    Is it possible to GET that JSP response, inside the JavaScript code?
    Or should I better state, inside the JSP code, to return ONLY the numbers and then I get it on the JavaScript and use the .add() funtion to add the item to a <select> ?
    How do I save that response inside the JavaScript?
    For example, I am trying with this Javascript function that handles the changes on a drop-down list:
      function clickedOnPType(lista)
      document.form1.action = "searchAvailableYears.jsp?pType=" + txtPType;}
      document.form1.submit();
    }...And I am getting, in return, a series of <option> with the correct data...
    Thanking you in advance,
    MMS

    Oh hello... in one of my 1000 searches I found that
    post days ago and I was already trying with your
    code, but I was getting several errors like
    "undefined is null or not an object" (in IE),
    "xmlhttp.responseXML has no properties" (in
    Firefox).... Well one thing i wanted to discuss here is is wat properties does in general a XmlHttpRequest Object contains
    checkout the below interface which gives a clear understanding of the Object member properties.
    interface XMLHttpRequest {
      attribute EventListener   onreadystatechange;
      readonly attribute unsigned short  readyState;
      void  open(in DOMString method, in DOMString url);
      void  open(in DOMString method, in DOMString url, in boolean async);
      void  open(in DOMString method, in DOMString url, in boolean async, in DOMString user);
      void  open(in DOMString method, in DOMString url, in boolean async, in DOMString user, in DOMString password);
      void  setRequestHeader(in DOMString header, in DOMString value);
      void  send();
      void  send(in DOMString data);
      void  send(in Document data);
      void  abort();
      DOMString  getAllResponseHeaders();
      DOMString  getResponseHeader(in DOMString header);
      readonly attribute DOMString  responseText;
      readonly attribute Document   responseXML;
      readonly attribute unsigned short  status;
      readonly attribute DOMString  statusText;
    };therefore as you can see XmlHttpRequest.reponseXML returns a Document Object which has below set of properties.
    http://www.w3schools.com/dom/dom_document.asp
    http://www.javascriptkit.com/domref/documentproperties.shtml
    and as said earlier one can send AJAX response in three ways
    1).Plain text(with comma seperated values maybe): Which we can collect using XmlHttpRequest.responseText 2).XML: @ client side XmlHttpRequest.reponseXML create a DOM Object using which one can parse it get values
    of attributes and values of different tags and then update the view accordingly.
    3).JSON(Javascript Object Notation): It is a bit complicated thing to discuss at this moment
    however it uses the first property(Plain text) and then
    uses set of libraries to parse and update the view.
    checkout below links to understand it
    http://www.ibm.com/developerworks/library/j-ajax2/
    http://oss.metaparadigm.com/jsonrpc/
    >  function handleOnChange(ddl)
    >
    var ddlIndex = ddl.selectedIndex;
    var ddlText = ddl[ddlIndex].text;
    var frmSelect = document.forms["form1"];
    var frmSelectElem = frmSelect.elements;
    if(ddl.name="pType")
         txtYear = "";
    txtDay = "";
              txtTime = "";
              unblock(document.form1.year);
              block(document.form1.day);
              block(document.form1.time1);
         laProxLista = frmSelectElem["year"];
    if (ddl.options[ddl.selectedIndex].text !=
    txtPType = ddl.options[ddl.selectedIndex].text;
    else if(ddl.name="year")
         txtDay="";
         txtTime="";
              unblock(document.form1.day);
              block(document.form1.time1);
    laProxLista = frmSelectElem["day"];
    f (ddl.options[lista.selectedIndex].text != "---")
    txtYear = ddl.options[lista.selectedIndex].text;
    else if(ddl.name="day")
    {          txtTime = "";
              unblock(document.form1.time1);
    laProxLista = frmSelectElem["time1"];
    (ddl.options[ddl.selectedIndex].text != "---")
    txtDay = ddl.options[ddl.selectedIndex].text;
    else //time1
    laProxLista = null;
    if (ddl.options[ddl.selectedIndex].text != "---")
    txtTime1 = ddl.options[ddl.selectedIndex].text;
    if ( txtPType != "---")
    xmlhttp = null
    // code for initializing XmlHttpRequest
    Object On Browsers like Mozilla, etc.
    if (window.XMLHttpRequest){ 
    xmlhttp = new XMLHttpRequest()
    // code for initializing XmlHttpRequest
    Object On Browsers like IE
    else if (window.ActiveXObject) { 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
    if (xmlhttp != null)
    if(ddl.name = "pType")
    // Setting the JSP/Servlet url to get
    XmlData
    url = "searchAvailableYears.jsp?pType="
    + txtPType;
                   else if(ddl.name = "year")
    url = "searchAvailableDOY.jsp?pType=" + txtPType
    PType + "&year=" + txtYear;
                   else(ddl.name = "day")
    url = "searchAvailableTimes.jsp?pType=" +
    e=" + txtPType + "&year=" + txtYear + "&day=" +
    txtDay;
    xmlhttp.onreadystatechange =
    handleHttpResponse;
    // Open the Request by passing Type of
    Request & CGI URL
    xmlhttp.open("GET",url,true);
    // Sending URL Encoded Data
    xmlhttp.send(null);
    else{
    // Only Broswers like IE 5.0,Mozilla & all other
    browser which support XML data Supports AJAX
    Technology
    // In the Below case it looks as if the
    browser is not compatiable
    alert("Your browser does not support
    XMLHTTP.")
    } //else
    } //if chosen
    //function
         //----------------------------Well as far as i can see i do not have any issues with it because your code looks
    preety much involved with your business logic but one thing i would like to reconfim
    here is the variable "xmlhttp" a global one.
    if no declare xmlhttp variable as a global variable.
    <script language="javascript">
    var xmlhttp;
    function handleOnChange(ddl){
    function verifyReadyState(obj){
    function handleHttpResponse() {
    </script>
    > function verifyReadyState(obj)
    if(obj.readyState == 4){
    if(obj.status == 200){
    if(obj.responseXML != null)
    return true;
    else
    return false;
    else{
    return false;
    } else return false;
    }I believe,this is preety much it.
    > function handleHttpResponse() [/b]
    if(verifyReadyState(xmlhttp) == true)
    //-----------HERE!! ---- I GET "UNDEFINED" IN THE
    DIALOG BOX
    //------- BELOW THE CODE LINE....---
    var response = xmlhttp.responseXML.responseText;
    alert(response);
    it is obvious that you would get Undefined here as responseText is not a property of Document Object or to be more specific to the Object what xmlhttp.responseXML returns.
    you might have to use that as alert(xmlhttp.responseText);
    and coming back to parsing the XML reponse you have got from the server we need to use
    var response = xmlhttp.responseXML.documentElement; property for it...
    and if you put as a alert message it has to give you an Output like"Object"
    alert(response);
    if that doesn't the browser version which you are using may not support XML properly.
    var response = xmlhttp.responseXML.documentElement;
    removeItems(laProxLista);
    var x = response.getElementsByTagName("option")
      var val
      var tex
      var newOption
                  for(var i = 0;i < x.length; i++){
                     newOption = document.createElement("OPTION")
                     var er
                     // Checking for the tag which holds the value of the Drop-Down combo element
                     val = x.getElementsByTagName("value")
    try{
    // Assigning the value to a Drop-Down Set Element
    newOption.value = val[0].firstChild.data
    } catch(er){
    // Checking for the tag which holds the Text of the Drop-Down combo element
    tex = x[i].getElementsByTagName("text")
    try{
    // Assigning the Text to a Drop-Down Set Element
    newOption.text = tex[0].firstChild.data
    } catch(er){
    // Adding the Set Element to the Drop-Down
    laProxList.add(newOption);
    here i'm assuming that i'm sending a xml reponse of format something below.
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <drop-down>
       <option>
            <value>1</value>
            <text>label1</text>
       </option>
       <option>
            <value>2</value>
            <text>label2</text>
       </option>
       <option>
            <value>3</value>
            <text>label3</text>
       </option>
    </drop-down>and i'm trying to update both option's value and label which would be something like
    <select >
    <option value="1">label1</option>
    <option value="2">label2</option>
    <option value="3">label3</option>
    <option value="4">label4</option>
    </select>else where if you are interested in getting a format like the one below
    <select >
    <option>label1</option>
    <option>label2</option>
    <option>label3</option>
    <option>label4</option>
    </select> try the below snippet
    var response = xmlhttp.responseXML.getElementsByTagName("text");
    var length = response.length;
    var newOption
    for(var i =0 ; i < length;i++){
       newOption = this.document.createElement("OPTION");
       newOption.text = response.childNodes[0].nodeValue;
    // or newOption.text = response[i].firstChild.data
    laProxList.add(newOption);
    Another thing...
    I have tried to set the content type inside the JSP
    to
    response.setContentType("text/html");
    AND to
    response.setContentType("text/xml");
    but none of the above is getting me results......use of response.setContentType("text/xml"); is more appropriate here.. as you are outputting XML or a plain text here...
    make sure you set the reponse headers in the below fashoin while outputting the results....
    response.setContentType("text/xml");
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 1);
    response.setDateHeader("max-age", 0); and if you are serious about implementing AJAX i would advice you start learn basics of XmlHttpRequest Object and more about DOM parsing is being implemented using javascript.
    http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest0
    http://www.jibbering.com/2002/4/httprequest.html
    http://java.sun.com/developer/technicalArticles/J2EE/AJAX/
    http://developer.apple.com/internet/webcontent/xmlhttpreq.html
    http://www.javascriptkit.com/domref/documentproperties.shtml
    and then go about trying different means of achieving them using simpler and cool frameworks
    like DWR,dojo,Prototype,GWT,Jmaki,Back Base 4 Struts,Back Base 4 JSF....etc and
    others frameworks like Tomahawk,Ajax4Jsf,ADF Faces,ICE FACES and many others which work with JSF.
    Please Refer
    http://swik.net/Java+Ajax?popular
    http://getahead.org/blog/joe/2006/09/27/most_popular_java_ajax_frameworks.html
    Hope that might help :)
    and finally an advice before implementing anything specfic API which may be related to any technologies (JAVA,javascript,VB,C++...) always refer to API documentation first which always gives you an Idea of implementing it.
    Implementing bad examples posted by people(even me for that matter) directly doesn't make much sense as that would always lands you in trouble.
    and especially when it is more specific to XmlHttpRequest always make habit of refering
    specific Browser site to know more about why specific Object or its property it not working 4i
    IE 6+: http://msdn2.microsoft.com/en-us/library/ms535874.aspx
    MOZILLA: http://developer.mozilla.org/en/docs/XMLHttpRequest
    Safari: http://developer.apple.com/internet/webcontent/xmlhttpreq.html
    Opera 9+: http://www.opera.com/docs/specs/opera9/xhr/
    Hope there are no hard issues on this...
    REGARDS,
    RaHuL

  • Caching JSP Response

    Hi,
    I am trying to get the response from the result of performing a pageContext.include("myPage.jsp") so that I can store it in cache to use the next time the page is loaded (for performance reasons). Does anyone know how to do this?
    Much Thanks!!

    Specifically, I want to get the String or byte array containing the page that will get sent back to the browser.

  • JSP Response Slow in OC4J

    Hi,
    I have a web application (jsps and servlets accessig to an oracle database) deployed by jdeveloper 10g in OC4J Standalone 10g, the problem appears when my aplication turned very slow where i go to a jsp page, only the html pages are fast but my jsps not, this appears incomplete because of the slow response, the pc that i install oc4j has 1GB memory, and i don't know what to do, please help me to find out why is this happening, i did the same thing in opther pc and i have no problems, so in this pc why is it happening.
    Thanks

    David, I do not think that oc4j 10.1.2 is certified with jdk-1_5_0_03. It is certified with JDK 1.3.1 and JDK 1.4.1, although it is quite possible that it can be run with other jdk versions.
    I can not see why your jsp is running incredibly slow. From what you provided, it seems that the process is stuck somewhere inside the _jspService method of the jsp page. To confirm that, it is much easier for you do a little more debugging. Just insert
      <% System.out.println(System.currentTimeMillis()); %>
    into various places of your jsp. Also, you may make a thread dump by "ctrl^break" on Windows or "ctrl^\" on Unix from time to time so as to find which methods stay on top of the stacks of the running threads. Then we can pinpoint the places that take most of the time.

  • URGENT HELP ON white space in jsp response

    I have written a jsp and printing a String at the end of jsp.Only one out.print() statement is used in the whole jsp page but the output(when we use view source) comes with lot of white space(new line characters) before the string. Actually I want only string in the response nothing else(no html code,no white space).As this string to be send as sms to mobile.
    pseudo code
    <%@ page language="java" contentType="text/plain" %>
    <%
    String text="";
    do processing
    out.println(text);
    %>
    When I see OUTPUT using view source The output is Loke this with lots of white Spaces
    String output
    </body>
    </html>
    these html tags and spces are not desirable.
    Please provide the solution .
    thanks in advance.

    I believe the white space is due to empty println statements created by jspc - jasper
    you can get rid of the spaces by setting the trimSpaces parameter to true in your web.xml
    It will be more efficient than a filter also text that is marked as <pre> or that has
    style="white-space: pre" will not be affected.
    Andrew Bailey
    www.hazlorealidad.com
    Example:
    <servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
    <param-name>fork</param-name>
    <param-value>false</param-value>
    </init-param>
    <init-param>
    <param-name>trimSpaces</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <param-name>xpoweredBy</param-name>
    <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
    </servlet>

  • Need some Suggesstions-Improving JSP Response

    Hi Friends,
    This is about improving the response time of the JSPs. I mean I have to display data from a table through a JSP page. The Queries are very heavy. Each time the jsp page is accessed by the user, a database intensive query is executed , which inturn fills the result set and which is further used by the JSP to display the Report/Data of the Result Set. There is one thing that the data is likely, to show a change only once in a period of a Day that is 24 hours. So I believe it is going to be a very intensive operation. Because my JSP has at least 12 links and each link means 12 intensive Queries. SO it means that if I click at a link a Query gets executed (Everytime a click is made) and data is displayed.(The Same Data my get Queried again and again).
    I think Since the Data changes only once in a Day(24 hours).How do I handle this situation without going into one SQL Execution per click of a link kind of Situation.
    Which in turn Reduces the Response time of the JSP to a great extent.
    And I guess makes the process inefficient also. Also toubling tha Database.
    Please Help me with a Way out of it.
    Thanks

    if the result stays the same over a longer period you
    could cache it by writing it as HTML and rebuild it
    periodiclyYou mean to say that I get the Data and create an HTML of the same. and save it.
    And the connect the Link on the Page to the Saved HTML file .
    The JSP is however very complex, Friend.

  • Tomcat 4.0.x and JSP / JSTL performance problems.

    Hello everyone,
    I've got a web application where some of my JSP pages are rendering quite slowly. As an example I'll use a JSP page that I wrote for browsing through a user database. It uses two beans...
    1. jobBean - Ensures that all of the required (and correct) beans that will be used for processing the request have been loaded.
    2. browserBean - A basic JavaBean that holds a set of UserBean(s) and other information pertinent to database queries (start, limit, order).
    I'm using Apache Struts to map requests to the appropriate processing modules. Now the problem I'm having is that each request is taking between 1 and 2 seconds to execute. As you can imagine that's not going to allow for very many simaltaneous users. I've tracked the problem down to something JSP related. All of my code executes fairly quickly (I think). It takes about 20-30ms for my code to identify the request, load the requested data from the database, and convert it into a usable format (the browserBean). Here's my code...
    <%@ page contentType="text/html"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <META http-equiv="Cache-Control" content="no-cache">
    <title>
    Browse Users
    </title>
    </head>
    <body>
    <!-- Set up the OrganizationBeans for use -->
    <jsp:useBean id="jobBean" class="com.vacode.jobs.generic.JobBean" scope="session" />
    <jsp:useBean id="browserBean" class="com.vacode.mqdb.beansets.user.UserBrowserBean" scope="session" />
    <!---------------------------->
    <!-- Start Time Logged Here -->
    <!---------------------------->
    <c:if test="${jobBean.currentJob.name != 'BrowseUserJob'}">
         <!-- This page was accessed before everything was properly initialized -->
         <c:url var="browseUser" value="manageUsers.do">
              <c:param name="action" value="browse" />
         </c:url>
         <c:redirect url="${browseUser}" />
    </c:if>
    <form action="manageUsers.do" method="get">
         <input type="hidden" name="action" value="browse">
         <input type="hidden" name="start" value="<c:out value="${browserBean.dummyStart}" />">
         <input type="hidden" name="order" value="<c:out value="${browserBean.order}" />">
         I would like to view
         <select name="limit">
              <c:forEach begin="1" end="5" var="current">
                   <option value="<c:out value="${current*5}" />"
                        <c:if test="${browserBean.dummyLimit == current*5}">
                        selected
                        </c:if>
                   >
                    <c:out value="${current*5}" />
                   </option>
              </c:forEach>
         </select>
         results per page.
         <input type="submit" action="submit">
    </form>
    <c:url var="id" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="USER_ID" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <c:url var="name" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="USER_NAME" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <c:url var="firstName" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="USER_FIRST_NAME" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <c:url var="lastName" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="USER_LAST_NAME" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <c:url var="email" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="USER_EMAIL_ADDRESS" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <c:url var="organization" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="USER_ORGANIZATION_NAME" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <c:url var="status" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="USER_STATUS_NAME" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <c:url var="role" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="0" />
         <c:param name="order" value="ROLE_NAME" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
    </c:url>
    <table>
         <tr>
              <td><a href="<c:out value="${id}" />">Id</a></td>
              <td><a href="<c:out value="${name}" />">User Name</a></td>
              <td><a href="<c:out value="${firstName}" />">First Name</a></td>
              <td><a href="<c:out value="${lastName}" />">Last Name</a></td>
              <td><a href="<c:out value="${email}" />">E-Mail</a></td>
              <td><a href="<c:out value="${organization}" />">Organization</a></td>
              <td><a href="<c:out value="${status}" />">Status</a></td>
              <td><a href="<c:out value="${role}" />">User Type</a></td>
         </tr>
    <c:forEach items="${browserBean.beans}" var="bean">
         <tr>
              <c:url var="manage" value="manageUsers.do">
                   <c:param name="action" value="modify" />
                   <c:param name="beanId" value="${bean.userId}" />
              </c:url>
              <td><a href="<c:out value="${manage}" />"><c:out value="${bean.userId}" /></a></td>
              <td><c:out value="${bean.userName}" /></td>
              <td><c:out value="${bean.firstName}" /></td>
              <td><c:out value="${bean.firstName}" /></td>
              <td><c:out value="${bean.email}" /></td>
              <td><c:out value="${bean.organizationName}" /></td>
              <td><c:out value="${bean.statusName}" /></td>
              <td><c:out value="${bean.roleName}" /></td>
         </tr>
    </c:forEach>
    <!-------------------------->
    <!-- End Time Logged Here -->
    <!-------------------------->
    </table>
    <c:url var="next" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="${browserBean.nextPageStart}" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
         <c:param name="order" value="${browserBean.order}" />
    </c:url>
    <c:url var="previous" value="manageUsers.do">
         <c:param name="action" value="browse" />
         <c:param name="start" value="${browserBean.previousPageStart}" />
         <c:param name="limit" value="${browserBean.dummyLimit}" />
         <c:param name="order" value="${browserBean.order}" />
    </c:url>
    <c:if test="${browserBean.previousPageStart>-1}">
         <a href="<c:out value="${previous}" escapeXml="false" />">previous</a>
    </c:if>
    <c:if test="${browserBean.nextPageStart>-1}">
         <a href="<c:out value="${next}" escapeXml="false" />">next</a>
    </c:if>
    <br>
    <br>
    Quick Jump To Page:
    <c:forEach varStatus="loopTag" items="${browserBean.pageStartValues}" var="current">
    <c:choose>
         <c:when test="${loopTag.index+1==browserBean.currentPageNumber}">
              <c:out value="${loopTag.index+1}" />
         </c:when>
         <c:otherwise>
         <c:url var="thisPage" value="manageUsers.do">
              <c:param name="action" value="browse" />
              <c:param name="start" value="${current}" />
              <c:param name="limit" value="${browserBean.dummyLimit}" />
              <c:param name="order" value="${browserBean.order}" />
         </c:url>
         <a href="<c:out value="${thisPage}" />"><c:out value="${loopTag.index+1}" /></a>
         </c:otherwise>
    </c:choose>
    </c:forEach>
    <br>
    <br>
    Max Possible Pages: <c:out value="${browserBean.maxNumberOfPages}" />
    <br>
    Current Page: <c:out value="${browserBean.currentPageNumber}" />
    </body>
    </html>I've added comments where I timed my code from (by writing new Date().getTime() to the console). It usually takes between 1 and 2 seconds for that block of JSP to execute. I wrote a test class that should be very similar to the process (iterating over the forEach loop mainly) and it usually executed in 10ms to 20ms.
    I had a look at the servlets that were generated by Tomcat and I noticed that for each <c:url> I used there's about 300 lines of code (with several syncronized() methods). Could this have anything to do with it? If so, what could I do to improve the performance?
    Worth mentioning... The machine I am using is an AMD Athlon 1GHZ with 768MB RAM, 7200 RPM UDMA100 IDE HDD.
    I'm also using Tomcat integrated with a development environment (IntelliJ IDEA).
    Any help that anyone could offer is much appreciated.
    Thanks,
    Ryan

    Can you get acceptable performance if you hack out everything except the browserBean forEach loop? Maybe you are trying to do too much runtime EL evaluation on the page.
    If performance improves, you may want to push the URL construction and startValue computations to a Struts Action and put a bunch of objects on the requestScope (like "id_url", "name_url", "pageStartValue").
    Putting these computations in the Action would avoid having JSTL parse each of the ${} arguments, evaluating the expressions, and using costly reflection to turn ${browserBean.order} into browserBean.getOrder().

  • How to improve ojspc jsp compile performance?

    Does anyone have any advice on how to improve the performance of the JSP pre-compilation utility (ojspc)?
    We are using Oracle 10g OC4J containers.
    Our situation is that we're attempting to add support for Oracle AS (we're currently on Weblogic), so I'm just getting started learning about it. In our development process we aim for sub-5 minutes clean builds, including recompilation of JSP files. Currently our 838 JSP pages take about 27 minutes to translate and compile using ojspc and jikes, but only a few minutes with Weblogic 8.1's jsp compiler.
    Here are my initial experiences with ojspc:
    * ojspc by default always translates JSPs, regardless of whether they've changed (that is, regardless of whether the .java and .class are up-to-date)? Is this really true? Is there an option to ensure it performs up-to-date checks?
    * Also, it only supports batch compilation when your JSPs are packaged in a WAR? And even when doing this it extracts the entire WAR (which is 20Mb in our case) before starting. I couldn't find an option to make it recursively descend a JSP directory hierarchy and compile each JSP. In development we don't package as a WAR.
    Here is what we've done to begin to speed things up:
    * We wrote a wrapper to descend our exploded JSP tree to decide which JSPs need recompiled based on timestamp of generated .java and .class files, then invoke the ojspc compiler with the names of all those JSPs.
    * We use ojspc with -noCompile to translate to .java only
    * We then use Jikes to compile all the .java files
    But at this point, its still a 27 minute process for 838 JPs. Previous experiences with other JSP compilers (HP Bluestone, previous-generation Weblogic) is that they are often slow because they re-parse each TLD file for every defined taglib in every JSP page. Does anyone know if this is true of ojspc?
    Unfortunately we use a technique whereby every taglib is defined in every JSP page by a static include page to ensure consistency of prefix. So there are over a dozen taglib directives in each page, possibly resulting in over 1000 TLD parses.
    Has anyone shared this experience or have any advice on speeding things up?
    Thanks in advance,
    Tim

    Hi,
    We need more details. If you'll reply with the create table command and the query, we can give a better answer.
    I would look for the following:
    - Make sure you're doing a full scan of the table.
    - Consider running the query in parallel (/*+ full (tab) parallel (tab 8) */) using a hint.
    Since you are grouping the results, consider sorting in memory:
    alter session set sort_area_size=XXX. Value depends on the table size and your hardware.
    Let us know how it goes, and additional hardware details.
    Idan.

  • SunOne Web Server 6.1 and JSP response content-length

    Hi,
    I am looking for help for a problem in my previous post
    http://swforum.sun.com/jive/thread.jspa?threadID=58612.
    It seems to me the only significant difference of the response to the same jsp file from 6.0 and 6.1 server is the content-length header.
    6.0 response has the content-length header;
    6.1 response does not have the content-length header.
    HttpUrlConnection::getContentLength() returns the actual content length of the 6.0 response;
    HttpUrlConnection::getContentLength() returns -1 for the 6.1 response.
    Here is the dump,
    SunOne WebServer 6.0
    allowUserInteraction? false
    content? sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@1eed786
    contentEncoding? null
    contentLength? 999
    contentType? application/x-java-jnlp-file
    Date? 1131378080000
    DefaultAllowUserInteraction? false
    DefaultUseCaches? true
    DoInput? true
    DoOutput? false
    Expiration? Wed Dec 31 19:00:00 EST 1969
    FileNameMap? java.net.URLConnection$1@1a1c887
    lastModified? Wed Dec 31 19:00:00 EST 1969
    requestMethod? GET
    responseCode? 200
    responseMessage? OK
    HEADER::Set-cookie=[JSESSIONID=pkand013-1%253A436f75a0%253A5b909ee2e5bbe3bc;path=/]
    HEADER::Date=[Mon, 07 Nov 2005 15:41:20 GMT]
    HEADER::Server=[Netscape-Enterprise/6.0]
    HEADER::null=[HTTP/1.1 200 OK]
    HEADER::Content-length=[999]
    HEADER::Content-type=[application/x-java-jnlp-file]
    SunOne WebServer 6.1
    allowUserInteraction? false
    content? sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@1fee6fc
    contentEncoding? null
    contentLength? -1
    contentType? application/x-java-jnlp-file
    Date? Mon Nov 07 10:49:07 EST 2005
    DefaultAllowUserInteraction? false
    DefaultUseCaches? true
    DoInput? true
    DoOutput? false
    Expiration? Wed Dec 31 14:00:00 EST 1969
    FileNameMap? java.net.URLConnection$1@1503a3
    lastModified? Wed Dec 31 19:00:00 EST 1969
    requestMethod? GET
    responseCode? 200
    responseMessage? OK
    HEADER::null=[HTTP/1.1 200 OK]
    HEADER::Expires=[Wed, 31 Dec 1969 19:00:00 EST]
    HEADER::Set-cookie=[JSESSIONID=44A318F4BC0802A4C70C27FD4AB1C115;Path=/]
    HEADER::Transfer-encoding=[chunked]
    HEADER::Date=[Mon, 07 Nov 2005 15:49:07 GMT]
    HEADER::Pragma=[No-cache]
    HEADER::Server=[Sun-ONE-Web-Server/6.1]
    HEADER::Content-type=[application/x-java-jnlp-file]
    HEADER::Cache-control=[no-cache]
    In my test env, 6.0 and 6.1 are installed on the same machine (Win2K), using the same directory as web root, same http port. Browser runs on a different machine.
    Thanks
    Harry

    Hi, elving
    This is good information. Thanks very much.
    Actually, I am not using SSL, just plain http connection with basic auth. It might be the cache-control header that causes the head ache. 6.0 response does not have the cache-control header, but 6.1 has.
    The interesting thing is that adding a servlet mapping on 6.1 solves the problem.
    I will take a further look tomorrow.
    Cheers,
    Harry
    I doubt the problem has to do with the Content-Length
    header.
    I'd guess that you're using SSL. Are you? If so,
    you're almost certainly bumping into a known bug (or,
    as Microsoft describes it, a "feature") in Internet
    Explorer. Microsoft article KB316431 at
    http://support.microsoft.com/default.aspx?scid=316431h
    as some information on the problem. As the article
    points out, the problem occurs when Internet Explorer
    needs to invoke an external application to handle a
    file that was served over SSL with Cache-Control:
    no-cache and/or Pragma: no-cache headers.
    A work around would be force Web Server to send
    Cache-Control and Pragma headers that don't include
    the no-cache directive. For example, the following
    lines could be added to the obj.conf configuration
    file:<Object ppath="*.jnlp">
    Output fn="set-variable" set-srvhdrs="Cache-Control:
    private"
    Output fn="set-variable" set-srvhdrs="Pragma:
    private"
    </Object>Fortunately, it sounds like you've already
    found another viable work around.

  • Migrating PCR frontend-JSP forms to Adobe interactive forms-WD Abap Comp

    Hi All,
    We are currently on Netweaver 7.0 & ECC 6.0 and ESS - MSS Business Package 50.4. We are using JSP Forms on portal front for Personnel Change Requests (PCR's ) where in all the scenarios in the backend are heavily customized with good amount of usage of Javascripts. For certain scenarios, where in a huge amount of information is fetched from ECC 6.0 backend system, JSP are performing really bad and the total time taken to display the form is actually causing a lot of irritation to the end user.
    We are planning to propose an upgrade to SAP adobe interactive forms. The prerequisite is that the business wants to reuse all the customized scenarios without any changes and just want to move towards better front end forms.
    My questions are:
    1. Please list benefits of SAP Adobe interactive forms - ABAP component over JSP forms (performance wise)
    2. Issues with SAP Adobe Interactive forms?
    3. Since Javascripts do not work in Webdynpro ABAP. How can we implement those front end checks and validations.
    3. Any other options available for UI that can be suggested?
    All suggestions are welcome. Quick response is appreciated.
    Thanks a lot for your time and help.
    Best Regards,
    Anupama

    Is your performance issue with the Javascript with JSP pages?  or the Java script you are using within the Adobe form in your WDJ custom application using Adobe form? I have worked on PCR's using ISR framework old school it used to call as PCR and now HCM Processes and form, Developed PCR's using WDJ also integrated workflow with the WDJ PCR for approval(we never had any performance issue) infact ISR frame work was kind of slow compare to custom WDJ solution and less flexible for a developer to develop.
    I have also worked created WDA custom application for PCR's , WDA is definitely better when you compare it with WDJ but I have not seen much performance issue with WDJ atleast on custom PCR solutions.
    I don't have any case study to share with you, can you please tell what kind of PCR's your client is using and what kind of performance issue you are experiencing and where and why you guys are using Javascript.

  • JSP XML output to file system

    I hava a JSP application that uses the XDK to query the database and display XML rowset data to a JSP. This rowset data can be a few hundred rows or up to 50,000 rows,
    as we publish technical manuals, parts manuals and wiring manuals for aircraft.
    Getting the data to display within the JSP is not a problem. The problem is
    that the XML rowset data shares two purposes:
    1. Query by Example, returning
    XML formatted data for display within a browser.
    2. Use of the XML formatted
    data as an external entity file for our SGML authoring software to print the
    paper publication.
    The JSP I developed (I'm not sure I should take credit for it) uses the XMLData bean and it will open the browser File/SaveAs dialog in both Netscape (Unix) and IE5.5 (Windows). HOWEVER, when I create a second JSP to perform the same task on a different table the JSP errorpage shows with no error and no errors within the JDeveloper console. This has been kicking my butt for some time, and would very much appreciate a workable solution. I will share whatever I can share with the provider. Here is the JSP code.
    =============================================
    <?xml version="1.0"?>
    <%@ page language = "java" errorPage="errorpage.jsp" import = "java.io.*, java.util.*, oracle.jbo.*, javax.naming.*, oracle.jdeveloper.html.*, oracle.jbo.html.databeans.*" contentType="text/html;charset=ISO-8859-1" %>
    <jsp:useBean class="oracle.jbo.html.databeans.XmlData" id="h25EqXml" scope="request" >
    <%
    h25EqXml.setResultElement("equiptbl");
    h25EqXml.setReleaseApplicationResources(true);
    h25EqXml.setDisplayAttributes("Ein,Pnr,Nomen,Cage,Diagnbr,Sht,Effect");
    h25EqXml.initialize(pageContext,"h25Wires_JspApp_h25Wires_be_H25Wires_beModule.HU25A_Equipment");
    response.setContentType("text/sgml");
    response.setHeader("Content-location","attachment;filename="+"equiptbl.sgm");
    ServletOutputStream sos = response.getOutputStream();
    BufferedInputStream bis = new BufferedInputStream (new FileInputStream("equiptbl.sgm"));
    int data;
    while((data = bis.read()) != -1)
    sos.write(data);
    bis.close();
    sos.flush();
    sos.close();
    %>
    <jsp:forward page= "HU5A_Equipment_Browse.jsp" />
    </jsp:useBean>
    ============================================
    The code for the other pages is the same with the exception of the filename xxx.sgm and the bean id.
    I very much appreciate your help. Thanks!
    null

    Hello Paulo,
    thank you for your answer, but i'm using type 04 XML for SEPA.
    when i select Type XML, the fields "output to file system" and "filename" are hidden.
    i dont understand why ...

  • Server Push redirecting to a pre-existing JSP

    Question:
    Has anyone tried to create a Server Push servlet that can be used to serve up pre-existing JSPs?
    Is it even possible for a servlet to serve a pre-existing JSP or does the web page code have to be embedded within the servlet?

    Hi, do you mean you want to redirect to another JSP?
    you could use the "sendRedirect" method in the HttpServletResponse object.
    for example:
    public MyServlet perform(...HttpServletRequest request, HttpServletResponse response)
         throws IOException, ServletException {
      String redirectTo = "http://www.companyname.com/index.jsp";
      response.sendRedirect(redirectTo);
    }something like that....

  • Xquery in JSP

    Hello Everyone
    I am part of this project in which we are using eclipse,websphere and db2 . I am using jsp for this project and want to retrieve xml data from db2 using xquery in jsp, but have no idea of how can i ,as normal <sql:query> tag are not working.
    So please help me out

    It is not JSPs' responsibility to perform this kind of data retrieval: JSPs should focus on presentation only. This should be done in a controller which, in your case, can be a simple servlet.

Maybe you are looking for