Na het bestuderen van dit hoofdstuk wordt van je verwacht dat je weet:
Maak dezelfde pagina als in opdracht 12, maar maak nu gebruik van een klasse die de berekeningen uitvoert in plaats van dat de berekeningen in JSP worden uitgevoerd. Maak naast JSP gebruik van HTML en CSS bij het uitvoeren van deze opdracht.
In Eclipse maak je in je projectstructuur een java klasse. Klassen bevinden zich in zogenaamde "packages" in de map "src" (source).
We maken een java klasse met een constructor en twee methoden om van Celsius naar Fahrenheit en vice versa te rekenen. We geven aan de methoden een String mee als parameter. Deze String moet naar een int worden geconverteerd met de methode Integer.parseInt(). Zoals we hebben gezien werpt deze methode een NumberFormatException op als de conversie niet lukt. Door achter de methode "throws NumberFormatException" te zetten geven we aan dat deze exception moet worden opgegooid als de methodes worden aangeroepen met een onjuiste parameter(geen int). Later in de jsp gebruiken we deze exception om een foutmelding te maken.
package graden; public class Graden { private int uitkomst; public Graden() { } //Exception opwerpen voor foute invoer public int naarCels(String sFahr) throws NumberFormatException { int fahr = Integer.parseInt(sFahr); uitkomst = Math.round((fahr -32)/1.8f); return uitkomst; } public int naarFahr(String sCels) throws NumberFormatException { int cels = Integer.parseInt(sCels); uitkomst = Math.round(cels * 1.8f + 32); return uitkomst; } }
In de JSP pagina willen we de klasse die we net hebben gemaakt gebruiken om de berekening uit te voeren. Hiertoe moeten we de klasse importeren.
<%@page import="graden.Graden" %>
Nu kunnen we een instantie van Graden aanmaken en daarop de twee methoden aanroepen. Als parameters geven we de String mee die de methode request.getParameter(String s) teruggeeft.
<% Graden g = new Graden(); String celsValue = ""; String fahrValue = ""; String warning = ""; //check of er op knop is geklikt if (request.getParameter("knop") != null) { try { //er mag maar één input veld zijn ingevuld if (!request.getParameter("cels").equals("") && !request.getParameter("fahr").equals("")) { warning = "Voer slechts één waarde in!"; } //gebruiker heeft Celsius ingevoerd else if (!request.getParameter("cels").equals("")) { int fahr = g.naarFahr(request.getParameter("cels")); fahrValue += fahr; } //gebruiker heeft Fahrenheit ingevoerd else if (!request.getParameter("fahr").equals("")) { int cels = g.naarCels(request.getParameter("fahr")); celsValue += cels; } } //foute of geen invoer werpt Exception op catch(NumberFormatException e) { warning = "Voer een geheel getal in"; } } %> <h1>Fahrenheit en Celsius omrekenen</h1> <form action="index.jsp" method="get"> <table id="graden"> <tr> <th>Celsius</th> <th>Fahrenheit</th> </tr> <tr> <td><input type="text" name="cels" value="<%=celsValue%>"></td> <td><input type="text" name="fahr" value="<%=fahrValue%>"></td> <td><input type="submit" name="knop" value="Omrekenen"></td> </tr> <% if (request.getParameter("knop") != null) { %> <tr> <td colspan="2" class="fout"><%= warning %></td> </tr> <% } %> </table> </form>
Maak dezelfde pagina met de rekenmachine als in opdracht 13, maar maak nu gebruik van een klasse die de berekeningen uitvoert in plaats van dat de berekeningen in JSP worden uitgevoerd. Maak naast JSP gebruik van HTML en CSS bij het uitvoeren van deze opdracht.
Rekenmachine
Eerste getal
Tweede getal
In onderstaande code zijn iets andere keuzes gemaakt dan in de vorige opgave. Zoek de verschillen!
package rekenmachine; /** *Geeft double als uitkomst terug voor rekenmachine *@author AO ROC Flevoland pdv * */ public class Rekenmachine { double uitkomst = 0; /** *Geeft uitkomst berekening afhankelijk van functie *@param double arg0 *@param double arg1 *@param String functie bepaalt type berekening *@return double uitkomst berekening */ public double bereken(double arg0, double arg1, String functie) { switch (functie) { case "+": uitkomst = arg0 + arg1; break; case "-": uitkomst = arg0 - arg1; break; case "x": uitkomst = arg0 * arg1; break; case "/": uitkomst = arg0 / arg1; break; } return uitkomst; } }
<% Rekenmachine rm = new Rekenmachine(); String uitkomst = ""; String foutboodschap = ""; if (request.getParameter("functie") != null) { if (request.getParameter("arg1").equals("") || request.getParameter("arg2").equals("")) { foutboodschap = "Voer <em>twee</em> getallen in"; } else { try { double getal1 = Double.parseDouble(request.getParameter("arg1")); double getal2 = Double.parseDouble(request.getParameter("arg2")); String functie = request.getParameter("functie"); uitkomst += rm.bereken(getal1, getal2, functie); } catch(NumberFormatException e) { foutboodschap = "Je mag alleen (decimale) getallen invoeren"; } } } %> <form action="index.jsp" method="get"> <table id="rekenmachine"> <thead> <tr id="kop"> <th colspan="4">Rekenmachine</th> </tr> </thead> <tbody> <tr> <td class="getallabels" colspan="2">Eerste getal</td> <td class="getallabels" colspan="2">Tweede getal</td> </tr> <tr id="invoer"> <td colspan="2"> <input type="text" name="arg1" value="<%= uitkomst %>" </td> <td colspan="2"> <input type="text" name="arg2" value=""> </td> </tr> <tr id="knoppen" > <td> <div class="knopcontainer"> <input type="submit" name="functie" value="+"> </div> </td> <td> <div class="knopcontainer"> <input type="submit" name="functie" value="-"> </div> </td> <td> <div class="knopcontainer"> <input type="submit" name="functie" value="x"> </div> </td> <td> <div class="knopcontainer"> <input type="submit" name="functie" value="/"> </div> </td> </tr> <tr> <td colspan="4" class="fout"><%= foutboodschap %></td> </tr> </table> </form> </body> </html>
Merk op dat er bij het programmeren vaak meerdere oplossingen mogelijk zijn. Iedere programmeur ontwikkelt in zekere zin zijn eigen stijl. Let er wel op dat je probeert zo "zuinig" mogelijk te programmeren en je code overzichtelijk te houden. Sommige bedrijven hanteren strenge stijlregels om hun code uniform te houden.
Maak een webpagina volgens onderstaand voorbeeld waarin auto's of andere produkten worden vertoond en waarbij de gebruiker kan selecteren op merk of minimum- en/of maximumprijs.
Ford Fiesta
€ 23.999,--
Ford Focus
€ 18.995,--
Opel Astra
€ 14.895,--
Opel Insignia
€ 65.450,--
Subaru Forester
€ 34.750,--
Subaru Impreza
€ 28.345,--
Mercedes E 63
€ 110.995,--
Mercedes CLA 45
€ 190.780,--
Mercedes E 230
€ 1.000,--
Mercedes C 250
€ 599,--
Ferrari 612 GTO
€ 350.500,--
Ferrari California
€ 210.780,--
Ferrari 458
€ 280.775,--
Lotus Elise CR
€ 48.591,--
Lotus Elise S CR
€ 60.079,--
Citroen 2CV
€ 459,--
Volvo V40
€ 1.250,--
Mini Cooper
€ 34.495,--
Om je op weg te helpen kun je gebruik maken van de twee onderstaande Java klassen.
package jspcursus;
import java.text.DecimalFormat;
public class Auto {
private final String merk;
private final String type;
private final int prijs;
private final String fotourl;
public Auto(String merk, String type, int prijs, String fotourl) {
this.merk = merk;
this.type = type;
this.prijs = prijs;
this.fotourl = fotourl;
}
public String getMerk() {
return merk;
}
public String getType() {
return type;
}
public int getPrijs() {
return prijs;
}
public String getFoto() {
return fotourl;
}
/**
*
* @return geeft prijs als geformatteerde String
*/
public String getPrijsFormat() {
DecimalFormat df = new DecimalFormat("#,##0.--");
double prijs = (double) this.getPrijs();
String sPrijs = df.format(prijs);
return sPrijs;
}
package jspcursus; import java.util.ArrayList; /** * Klasse met een lijst van auto's * @author piet */ public class AutoLijst { private ArrayList<Auto> autolijst; /** * Constructor die de lijst aanmaakt en auto's toevoegt */ public AutoLijst() { autolijst = new ArrayList<Auto>(); Auto ford1 = new Auto("Ford", "Fiesta", 23999, "images/autos/fordfiesta.jpg"); autolijst.add(ford1); Auto ford2 = new Auto("Ford", "Focus", 18995, "images/autos/fordfocus.jpg"); autolijst.add(ford2); Auto opel1 = new Auto("Opel", "Astra", 14895, "images/autos/opelastra.jpg"); autolijst.add(opel1); Auto opel2 = new Auto("Opel", "Insignia", 65450, "images/autos/opelinsignia.jpg"); autolijst.add(opel2); Auto subaru1 = new Auto("Subaru", "Forester", 34750, "images/autos/subaruforester.jpg"); autolijst.add(subaru1); Auto subaru2 = new Auto("Subaru", "Impreza", 28345, "images/autos/subaruimpreza.jpg"); autolijst.add(subaru2); Auto mercedes1 = new Auto("Mercedes", "E 63", 110995, "images/autos/mercedede63.png"); autolijst.add(mercedes1); Auto mercedes2 = new Auto("Mercedes", "CLA 45", 190780, "images/autos/mercedescla45.jpg"); autolijst.add(mercedes2); Auto ferrari1 = new Auto("Ferrari", "612 GTO", 350500, "images/autos/ferrari612.jpg"); autolijst.add(ferrari1); Auto citroen1 = new Auto("Citroen", "2CV", 459, "images/autos/citroen2cv.jpg"); autolijst.add(citroen1); Auto mini1 = new Auto("Mini", "Cooper", 34495, "images/autos/minicooper.jpg"); autolijst.add(mini1); } /** * * @return geeft de lijst met auto's */ public ArrayList<Auto> getLijst() { return autolijst; } /** * Ten behoeve van het select merk input veld * @return een lijst met alle unieke merken */ public ArrayList<String> getMerken() { ArrayList<String> merken = new ArrayList<String>(); for (Auto auto: autolijst) { String merk = auto.getMerk(); if (!merken.contains(merk)) { merken.add(merk); } } return merken; } }
De definitieve criteria zijn nog onderwerp van gesprek, er kunnen derhalve geen rechten aan deze pagina worden ontleend
Je kunt je portfolio hier publiceren.