Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Keksien käyttö

ezku [31.03.2008 23:27:36]

#

Tarvitsisin hiukan apua keksien käytöstä. Olen tässä vasta aloitellut java koodausta ja en oikein ole vielä sisäistänyt keksien käyttöä. Olen luonut oman toiminteet luokan ja tarkoitus on luoda kyseisessä luokassa uusi cookie. Jostain syystä joku vaihe menee pieleen. Käsittääkseni uuden cookien luonti ei onnistu tai sitten en vaan osaa sitä lukea? Jokatapauksessa Toiminteet luokassa mulla on sekä

setcookie metodi:

public void setCookie(String Nimi, String Arvo1)
	{
		Cookie keksi = new Cookie(Nimi , Arvo1);
		keksi.setDomain("www.asiakas.fi");
		keksi.setMaxAge(60);
		keksi.setValue(Arvo1);
		response.addCookie(keksi);
	}

ja
getcookie metodi:

public String getCookie(String Nimi) throws Exception {
try {
Cookie[] keksit = request.getCookies();
	Cookie keksi;
		if (keksit.length == 0) {
			System.out.println("ei löydy keksejä");
		return null;
	} else {
	for (int i=0; i<keksit.length; i++) {
	 keksi = keksit[i];
		System.err.println(
	          "Cookie: " + keksi.getName() +
	          ", Value: " + keksi.getValue() +
	          ", Comment: " + keksi.getComment());
	 if (keksi.getValue().equals(Nimi) && (keksit.length>0)) {
		saadutKeksit = "Keksin nimi:" + keksi.getName() + " Keksin arvo:" + keksi.getValue();

	 }else{
		return null;
	}}}}
	 catch(Exception e) {
		System.out.println(e);
}

	return saadutKeksit;
	}

Tarkoitus on kutsua näitä metodeja servletissä
Servletti näyttää keksien osalta tältä:

Toiminteet oToiminteet = new Toiminteet(request,response);
if (request.getParameter("sivu").equals("keksinimi")) {
	String keksinArvo = request.getParameter("arvo1");

	oToiminteet.setCookie("firstCookie", keksinArvo);
try {


				String testi="";
				testi = oToiminteet.getCookie("firsCookie");
				request.setAttribute("joo", testi);
				System.out.println(testi);
				} catch(Exception err){
				    err.printStackTrace();
				}

En tiedä saako kukaan selvää tästä, mutta jos joku osaa auttaa niin kiitollinen olen.

Mod. lisäsi kooditagit

Hycke [01.04.2008 08:37:01]

#

Yksi kirjoitusvirhe pisti heti silmään. En tiedä auttaako itse ongelmaan:

 testi = oToiminteet.getCookie("firsCookie");

Tuo pitäisi kaiketi olla:

 testi = oToiminteet.getCookie("firstCookie");

ezku [01.04.2008 13:17:24]

#

Juu kiitos huomioista. Tuo ei vielä kyllä tuonut ratkaisua ongelmaan. Luulen että joku logiikkavirhe tuossa mahdollisesti on?

hunajavohveli [02.04.2008 09:25:02]

#

Koodi ainakin on varsin sekavasti sisennetty. Ongelma voi olla jo sen takia vaikea havaita. Sisennystyyleistä tietysti voi kiistellä, mutta ainakin hyvä tapa on sisentää johdonmukaisesti. Yleisesti käytetty periaate on myös, että sisennys kasvaa yhdelä pykälällä lohkon kasvaessa ja vastaavasti vähenee lohkon päättyessä. Tähän tapaan:

public String getCookie(String Nimi) throws Exception
{
	try {
		Cookie[] keksit = request.getCookies();
		Cookie keksi;
		if (keksit.length == 0) {
			System.out.println("ei löydy keksejä");
			return null;
		} else {
			for (int i=0; i<keksit.length; i++) {
				keksi = keksit[i];
				System.err.println(
						"Cookie: " + keksi.getName() +
						", Value: " + keksi.getValue() +
						", Comment: " + keksi.getComment());
				if (keksi.getValue().equals(Nimi) && (keksit.length>0)) {
					saadutKeksit = "Keksin nimi:" +
							keksi.getName() +
							" Keksin arvo:" +
							keksi.getValue();
				} else {
					return null;
				}
			}
		}
	} catch(Exception e) {
		System.out.println(e);
	}

	return saadutKeksit;
}

Nyt tuosta huomaa jo muitakin omituisuuksia. Ei välttämättä aiheuta ongelmaa, mutta miksi esimerkiksi keksit-taulukon pituus tarkistetaan for-silmukan sisällä? Sehän ei kai voi muuttua? Täytyy tästä lähteä, mutta katson myöhemmin tarkemmin, jos ongelma ei siihen mennessä ole ratkennut.

ezku [02.04.2008 15:02:50]

#

Joo kiitos vaan avusta. Sain homman toimiin. Toi cookiesin setdomain asetus ei toiminut kun se oli määritelty localhostiksi. Poistin sen niin keksien luonti onnistui hienosti.
Niin ja toi for luuppi on sen vuoksi että ymmärsin että getcookies hakee kaikki keksit tauluun ja yritän tuossa sitten for luupin avulla hakea oikean keksin. En tiedä sitten onko ajattelutavasssani jotain hämärää? Hyvinkin mahollista, koska kokemusta ei vielä javasta juuri ole.

hunajavohveli [02.04.2008 18:26:46]

#

ezku kirjoitti:

Niin ja toi for luuppi on sen vuoksi että ymmärsin että getcookies hakee kaikki keksit tauluun ja yritän tuossa sitten for luupin avulla hakea oikean keksin. En tiedä sitten onko ajattelutavasssani jotain hämärää? Hyvinkin mahollista, koska kokemusta ei vielä javasta juuri ole.

Ajattelutapasi on aivan oikea, ainakin sikäli kuin itse ymmärsin koodin tarkoituksen. Viittasin tähän riviin

if (keksi.getValue().equals(Nimi) && (keksit.length>0)) {

ja tarkemmin sanoen lauseen toiseen ehtoon "keksit.length>0". Taulukon pituuden tarkistus on nähdäkseni turha, koska tällainen tarkistus tehdään jo aiemmin, nimittäin for-silmukan suoritusehdosssa. Jos pituus on nolla, silmukkaa ei suoriteta kertaakaan, joten ehto tarkistetaan vain silloin, kun se on tosi.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta