HTML Forms and JSP

Retrieving HTML form parameters 

<FORM action = "url of the jsp" Method = "get" or "post" name = "formname">
               <%!
          String fixInput(String input)
          {
           String output = input.replaceAll("&", "&amp;"); // replace ampersands  (do this first)                      
           output = output.replaceAll(" ", "&nbsp;"); // replace space
           output = output.replaceAll("<", "&lt;"); // replace <
           output = output.replaceAll(">", "&gt;");  // replace >
           output = output.replaceAll("\r\n", "<br>"); // replace carriage return sequence, end of line sequence
           output = output.replaceAll("\n", "<br>"); // replace end of line
           output = output.replaceAll("'", "&apos;"); // replace single quote
           output = output.replaceAll("\"", "&quot;");  // replace double quote
           return output;                     
          }
       
        %>


Passing data through URLs

    <a href = "ProductList.jsp?name=jack hammer&price=104.99&sku=10000">add</a>


Mortgage.HTML

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
    <head>
        <title>Mortgage Calculator</title>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    </head>
    <body>
<H2> Enter parameters, then press submit </h2>
<form action = "basic2.jsp" method=post name = "inputform" target ="Solution">
<table>
<tr><td>Years for the loan : </td><td><input type=text name="years" value="30" size=3></td></tr>
<tr><td>First principle amount : </td><td>$<input type=text name="beginingprinciple" value="1000.00" size=12></td></tr>
<tr><td>Last principle amount : </td><td>$<input type=text name="endingprinciple" value="10000.00" size=12></td></tr>
<tr><td>Principle increment: </td><td>$<input type=text name="principleincrement" value="1000.00" size=12></td></tr>
<tr><td>First rate amount : </td><td><input type=text name="beginingrate" value="1.0" size=4>%</td></tr>
<tr><td>Last rate amount : </td><td><input type=text name="endingrate" value="10.0" size=4>%</td></tr>
<tr><td>Rate increment: </td><td><input type=text name="rateincrement" value="1.0" size=4>%</td></tr>
</table>
<input type = "Submit" name = "submitbutton" value = "submit">

<input type = "Reset" name = "resetbutton" value = "reset">

</form>
<p>
<iframe name="Solution" width="600" height="400"></IFRAME>
    </body>
</html>



basic2.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head><title>JSP Page</title></head>
<body>

<%-- <jsp:useBean id="beanInstanceName" scope="session" class="beanPackage.BeanClassName" /> --%>
<%-- <jsp:getProperty name="beanInstanceName"  property="propertyName" /> --%>
<%!
 
  java.text.DecimalFormat currency = new java.text.DecimalFormat("$#,###,###,##0.00");
  java.text.DecimalFormat interest = new java.text.DecimalFormat("0.0%");
 
  /*
   * Compute monthly payment given principle, yearly interest rate
   * and number of years for the loan
   */
  double computeMonthlyPayment(double principle, double rate, double years)
  {
   double monthlyRate = rate/12.0;
  
   double payment = principle * monthlyRate / (1 - 1 / Math.pow(1+monthlyRate,years * 12));
   return payment;
  }
%>


<h2>Monthly Payment Calculation Table </h2>
<table border = 1>

<%
  double beginingRate = .01;// first rate to use in the table
  double endingRate = .10; // last rate to use in the table
  double rateIncrement = .01; // amount to increment rate each time
  double beginingPrinciple = 100000.0; // first principle in table
  double endingPrinciple =   500000.0; // last principle in table
  double principleIncrement =100000.0; // amount to increment principle each time
  double years = 30;
   //
   // Retrieve parameters
   //
   String syears = request.getParameter("years"); // get the parameter
   if(syears != null) // if its null then don't parse, use default value
     years = Double.parseDouble(syears);

   String sbrate = request.getParameter("beginingrate");
   if(sbrate != null)
     beginingRate = Double.parseDouble(sbrate)/100;

   String serate = request.getParameter("endingrate");
   if(serate != null)
     endingRate = Double.parseDouble(serate)/100;
  
   String sratei = request.getParameter("rateincrement");
   if(sratei != null)
     rateIncrement = Double.parseDouble(sratei)/100;

   String sbprin = request.getParameter("beginingprinciple");
   if(sbprin != null)
     beginingPrinciple = Double.parseDouble(sbprin);

   String seprin = request.getParameter("endingprinciple");
   if(seprin != null)
     endingPrinciple = Double.parseDouble(seprin);
  
   String sprini = request.getParameter("principleincrement");
   if(sprini != null)
     principleIncrement = Double.parseDouble(sprini);


   //
   // output a row of column headers
   //
%>
 <tr><th><%= years+"" %> years</th>
 <%
   for(double principle = beginingPrinciple; principle <= endingPrinciple; principle += principleIncrement)
   {
%>
   <th><%= currency.format(principle) %> </th>
<%
    }
 %>
 </tr>
 <%
  for(double rate = beginingRate; rate <= endingRate; rate += rateIncrement)
  {
%>
 <tr>
 <th> <%= interest.format(rate) %> </th>
 <%
    for(double principle = beginingPrinciple; principle <= endingPrinciple; principle += principleIncrement)
    {
     double payment = computeMonthlyPayment(principle, rate, years);
    
 %>
 <td> <%= currency.format(payment) %> </td>
 <%
     }
 %>
 </tr>
 <%
    }
  %>
</table>
</body>
</html>



Adding JavaScript to verify the user input prior to submission


Mortgage2.html

!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
    <head>
        <title>Mortgage Calculator with Javascript</title>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
      <script type="text/javascript"
src="Mortgage2.js> </script>
       
    </head>

<body>
 <H2> Enter parameters, then press submit </h2>

<form action = "basic3.jsp" method=post name = "inputform" onSubmit ="return checkForm()" target="Solution">
<table>
<tr><td>Years for the loan : </td><td><input type=text name="years" value="30" size=3></td></tr>
<tr><td>First principle amount : </td><td>$<input type=text name="beginingprinciple" value="1000.00" size=12></td></tr>
<tr><td>Last principle amount : </td><td>$<input type=text name="endingprinciple" value="10000.00" size=12></td></tr>
<tr><td>Principle increment: </td><td>$<input type=text name="principleincrement" value="1000.00" size=12></td></tr>
<tr><td>First rate amount : </td><td><input type=text name="beginingrate" value="1.0" size=4>%</td></tr>
<tr><td>Last rate amount : </td><td><input type=text name="endingrate" value="10.0" size=4>%</td></tr>
<tr><td>Rate increment: </td><td><input type=text name="rateincrement" value="1.0" size=4>%</td></tr>
</table>
<input type = "Submit" name = "submitbutton" value = "submit">
<input type = "Reset" name = "resetbutton" value = "reset">

</form>
        <p>
<iframe name="Solution" width="600" height="400"></IFRAME>
    </body>
</html>



Mortgage2.js


 function checkForm()
 {
    var valid = true;
    var message = "Errors: \n";
    var bp=0, ep=0, pi=0, br=0, er=0, ri=0;

    with(document.inputform)
    {
     if(years.value == "" || isNaN(years.value))
     {
       valid = false;
       message = message + "years field is invalid\n";
     }
     else
     {
      var y = parseFloat(years.value);
      if(y <= 0)
       {
         valid = false;
         message = message + "years must be greater than 0\n";
       }
      }
     
     if(beginingprinciple.value == "" || isNaN(beginingprinciple.value))
     {
       valid = false;
       message = message + "first principle field is invalid\n";
     }
     else
     {
      bp = parseFloat(beginingprinciple.value);
      if(bp <= 0)
       {
         valid = false;
         message = message + "first principle must be greater than 0\n";
       }
      }
     
     
     if(endingprinciple.value == "" || isNaN(endingprinciple.value))
     {
       valid = false;
       message = message + "last principle field is invalid\n";
     }
     else
     {
      ep = parseFloat(endingprinciple.value);
      if(ep <= 0 || ep < bp)
       {
         valid = false;
         message = message + "last principle must be greater first principle\n";
       }
      }
     
     if(principleincrement.value == "" || isNaN(principleincrement.value))
     {
       valid = false;
       message = message + "principle increment field is invalid\n";
     }
     else
     {
      pi = parseFloat(principleincrement.value);
      if(pi <= 0)
       {
         valid = false;
         message = message + "principle increment must be greater than 0\n";
       }
      }
     
    if(beginingrate.value == "" || isNaN(beginingrate.value))
     {
       valid = false;
       message = message + "first rate field is invalid\n";
     }
     else
     {
      br = parseFloat(beginingrate.value);
      if(br <= 0)
       {
         valid = false;
         message = message + "first rate must be greater than 0\n";
       }
      }
    
     if(endingrate.value == "" || isNaN(endingrate.value))
     {
       valid = false;
       message = message + "last rate field is invalid\n";
     }
     else
     {
      er = parseFloat(endingrate.value);
      if(er <= 0 || er < br)
       {
         valid = false;
         message = message + "last rate must be greater first rate\n";
       }
      }
    
     if(rateincrement.value == "" || isNaN(rateincrement.value))
     {
       valid = false;
       message = message + "rate increment field is invalid\n";
     }
     else
     {
      ri = parseFloat(rateincrement.value);
      if(ri <= 0)
       {
         valid = false;
         message = message + "rate increment must be greater than 0\n";
       }
      }
    
    }
  if(!valid)
      alert(message);
  return valid;
 }



Basic3.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head><title>JSP Page</title></head>
<body>

<%-- <jsp:useBean id="beanInstanceName" scope="session" class="beanPackage.BeanClassName" /> --%>
<%-- <jsp:getProperty name="beanInstanceName"  property="propertyName" /> --%>
<%!
 
  java.text.DecimalFormat currency = new java.text.DecimalFormat("$#,###,###,##0.00");
  java.text.DecimalFormat interest = new java.text.DecimalFormat("0.0%");
 
  /*
   * Compute monthly payment given principle, yearly interest rate
   * and number of years for the loan
   */
  double computeMonthlyPayment(double principle, double rate, double years)
  {
   double monthlyRate = rate/12.0;
  
   double payment = principle * monthlyRate / (1 - 1 / Math.pow(1+monthlyRate,years * 12));
   return payment;
  }
%>
<h2>Monthly Payment Calculation Table </h2>
<table border = 1>

<%
  double beginingRate = .01;// first rate to use in the table
  double endingRate = .10; // last rate to use in the table
  double rateIncrement = .01; // amount to increment rate each time
  double beginingPrinciple = 100000.0; // first principle in table
  double endingPrinciple =   500000.0; // last principle in table
  double principleIncrement =100000.0; // amount to increment principle each time
  double years = 30;
   //
   // Retrieve parameters
   //
   String syears = request.getParameter("years"); // get the parameter
   if(syears != null) // if its null then don't parse, use default value
     years = Double.parseDouble(syears);

   String sbrate = request.getParameter("beginingrate");
   if(sbrate != null)
     beginingRate = Double.parseDouble(sbrate)/100;

   String serate = request.getParameter("endingrate");
   if(serate != null)
     endingRate = Double.parseDouble(serate)/100;
  
   String sratei = request.getParameter("rateincrement");
   if(sratei != null)
     rateIncrement = Double.parseDouble(sratei)/100;

   String sbprin = request.getParameter("beginingprinciple");
   if(sbprin != null)
     beginingPrinciple = Double.parseDouble(sbprin);

   String seprin = request.getParameter("endingprinciple");
   if(seprin != null)
     endingPrinciple = Double.parseDouble(seprin);
  
   String sprini = request.getParameter("principleincrement");
   if(sprini != null)
     principleIncrement = Double.parseDouble(sprini);


   //
   // output a row of column headers
   //
%>
 <tr><th><%= years+"" %> years</th>
 <%
   for(double principle = beginingPrinciple; principle <= endingPrinciple; principle += principleIncrement)
   {
%>
   <th><%= currency.format(principle) %> </th>
<%
    }
 %>
 </tr>
 <%
  for(double rate = beginingRate; rate <= endingRate; rate += rateIncrement)
  {
%>
 <tr>
 <th> <%= interest.format(rate) %> </th>
 <%
    for(double principle = beginingPrinciple; principle <= endingPrinciple; principle += principleIncrement)
    {
     double payment = computeMonthlyPayment(principle, rate, years);
    
 %>
 <td> <%= currency.format(payment) %> </td>
 <%
     }
 %>
 </tr>
 <%
    }
  %>
</table>
</body>
</html>