@Override
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        if (kirjaudutaankoUlos(request)) {
            kirjauduUlos(request, response);
        } else if (onkoKirjautunut(request, response)) {
            try {
                asetaAjanvarauksenTiedot(request, response);
            } catch (Exception e) {
                naytaVirheSivu("Ajanvarauksen tietojen näyttäminen epäonnistui.", request, response);
            }
            if (napinPainallus("varaaAika", request)) {
                try {
                    Varaus v = luoVaraus(request, response);
                    Oirekuvaus k = luoOirekuvaus(request);
                    if (k.onkoKelvollinen()) {
                        v.luoVaraus();
                        k.setVarausId(v.getId());
                        k.lisaaKuvausKantaan();
                        lahetaVaraustietoOmatVarauksetServletille(request);
                        response.sendRedirect("omatvaraukset");
                    } else {
                        Collection<String> virheet = k.getVirheet();
                        request.setAttribute("syotettyTeksti", k);
                        request.setAttribute("virheViesti", virheet.toArray()[0]);
                        naytaSivu(request, response, "web/oirekuvaus.jsp");
                    }
                } catch (Exception e) {
                    naytaVirheSivu("Varauksen ja oirekuvauksen luominen epäonnistui.", request, response);
                }
            } else if (napinPainallus("palaaAjanvaraukseen", request)) {
                response.sendRedirect("viikkoaikataulu");
            } else {
                naytaSivu(request, response, "web/oirekuvaus.jsp");
            }
        }
    }