servlets

servlets deel 4

1. examen/schoolexamen

Het schoolexamen is te vinden met deze link. Log in met de rode google-knop en daarna je edictum account. Je mag ingelogd zijn op je eigen account en je mag zelfs al een project klaar zetten. Het wachtwoord voor het examen krijg je zodra iedereen startklaar is.

2. oefenexamen

Je gaat een applicatie maken wat twee getallen kan optellen. Begin met het aanmaken van een Maven Web Application en noem dit oefenexamen.

De index.html verwijder je. Maak hierna in de root een index.jsp aan. Dit staat uitgelegd in deel 1. Binnen deze jsp maak je het volgende formulier aan:

<form action="calculator">
    <input type="text" name="number1" />
    <input type="text" name="number2" />
    <input type="submit" name="count" value="count" />
</form>

Maak nu een package examen aan en maak daarbinnen een klasse Calculator met twee variabelen. Maak gebruik van handige opties binnen Netbeans door met de rechtermuisknop te kiezen voor Insert Code!

//maak deze package of folder eerst aan
package èxamen;

public class Calculator {

    private int number1;
    private int number2;

    public Calculator(int number1, int number2) {
        this.number1 = number1;
        this.number2 = number2;
    }

    public int getNumber1() {
        return number1;
    }

    public void setNumber1(int number1) {
        this.number1 = number1;
    }

    public int getNumber2() {
        return number2;
    }

    public void setNumber2(int number2) {
        this.number2 = number2;
    }
}

Maak nu in de klasse Calculator een extra methode die je countNumbers noemt.

public int countNumbers() {
    return this.number1 + this.number2;
}

Maak nu de servlet genaamd CalculatorServlet in dezelfde package. In de servlet worden de twee nummers van het formulier op de juiste wijze opgevangen en in twee variabelen (number 1 en number 2) gezet. Het urlpattern (zie bovenaan de servlet) waar de action naar verwijst laat je verwijzen naar "calculator" dus:

@WebServlet(name = "CalculatorServlet", urlPatterns = {"/calculator"})

In de lessen staat alle code die je nodig hebt. Het opvangen van waardes van een formulier doe je met de code:

String n1 =  request.getParameter("number1");

Je hebt ook code nodig om een String te converteren naar een int. Dit gaat zo:

//convert String to int
int number1 = Integer.parseInt(n1);
int number2 = Integer.parseInt(n2);

 De hele servlet ziet er nu zo uit (deze niet kopieren maar zelf maken).

package examen;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "CalculatorServlet", urlPatterns = {"/calculator"})
public class CalculatorServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String number1 = request.getParameter("number1");
        String number2 = request.getParameter("number2");

        //convert String to int
        int number1Int = Integer.parseInt(number1);
        int number2Int = Integer.parseInt(number2);

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

Breid de servlet dusdanig uit dat de opgevangen nummers in een calculator object worden gezet. Hierbij maak je gebruik van de constructor van de Calculator class.

Calculator calculator = new Calculator(number1Int, number2Int);

Maak de servlet af door een session Atrtribute van het object calculator te maken en de servlet te forwarden naar de index.jsp. Hieronder opnieuw de hele servlet waarbij het commentaar is verwijderd.

package business;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "CalculatorServlet", urlPatterns = {"/calculator"})
public class CalculatorServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String number1 = request.getParameter("number1");
        String number2 = request.getParameter("number2");

        //convert String to int
        int number1Int = Integer.parseInt(number1);
        int number2Int = Integer.parseInt(number2);

        Calculator calculator = new Calculator(number1Int, number2Int);
        request.setAttribute("calculator", calculator);

        String url = "index.jsp";
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
        dispatcher.forward(request, response);
        dispatcher.forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

De laatste stap is de applicatie  werkend te maken. In de index lees je het attribuut calculator weer uit. Dit is eigenlijk het object calculator wat je hebt aangemaakt in de servlet. Hiermee kun je bij de methoden en variabelen.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="calculator">
            <input type="text" name="number1" value="${calculator.getNumber1()}" placeholder="geef getal 1"/>
            <input type="text" name="number2" value="${calculator.getNumber2()}" placeholder="geef getal 2" />
            <input type="submit" name="count" value="count" />
            
            <p>Het resultaat van de optelling is: ${calculator.countNumbers()}</p>
        </form>
    </body>
</html>