Cookies servletu chcą się zapisać na komputerze

0

Witam
Stworzyłem servlet ktory ma za zadanie zapisać jakies przykładowe ciasteczko. Kiedy wywołam metode:

response.addCookie(cookie);

powinno sie standardowo dodać ciastko.
Jednak działą to tak, ze:
1.Jesli uzyje metody doGet pojawia sie okno zapisu jakbym chciał to cookie zapisać jako plik na pulpicie np
i0e8.jpg
2.Jesli uzyje metody processRequest (wlasciwie czym one sie różnia nie jesem do konca pewien, ale wydaje mi sie ze to taka metoda ktora łączy doPost i doGet w jedno) najpierw pojawil sie blad 505 jesli dobrze pamietam, a teraz tak jak w wypadku wyzej chce sie zapisac na komputerze

Jak poprawnie zapisac cookie?:)

0

Spróbuj dodać do servleta:
response.setContentType("text/html");

0

Mam już to ustawione

package com.maciej.cookies;

public class CookieServlet extends HttpServlet
{
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		PrintWriter out = resp.getWriter();
		resp.setContentType("text/html; charset=UTF-8");
		try{
			Cookie lastVisit = null;
			for(Cookie c : req.getCookies())
				if(c.getName().equals("obecnosc"))
				{
					lastVisit=c;
					break;
				}
			
			if(lastVisit!=null)
				out.println("Twoja ostatnia wizyta na stronie miala miejsce: " + lastVisit.getValue());
			else if(lastVisit==null)
				out.println("Nie ładnie, nigdy nie odwiedziles tej strony!");
			
			lastVisit = new Cookie("obecnosc",new Date().toString());
			resp.addCookie(lastVisit);
		}finally{
			out.close();
		}
		
	}
	
}

Co mnie dziwi, że żaden napis nie jest wyswietlany na stronie. Odkryłem ze jak odpale eclipse i dam na klasie run on server Od razu i jest metoda processRequest to pokazuje blad 405:
a8as.jpg

Natomiast jak zmienie metode na doGet, raz odpale to pokazuje właśnie to z zapisem ciastka a potem juz moge zmienic na processRequest i działa tak jakby to byl doGet oO dzicz :D
(chociaz dalej nie tak jak powinno ;p)

A wgl jak sprawdzić czy ciastko sie dodało? tylko przez przegladarke czy eclipsem sie da?
Moze ktos wie jak te ciastka zapisac?

0

2.Jesli uzyje metody processRequest (wlasciwie czym one sie różnia nie
jesem do konca pewien, ale wydaje mi sie ze to taka metoda ktora łączy
doPost i doGet w jedno) najpierw pojawil sie blad 505 jesli dobrze
pamietam, a teraz tak jak w wypadku wyzej chce sie zapisac na komputerze

Jak to nie wiesz co robi metoda **processRequest ** ? Ja jej nie widzę w interfejsie HttpServlet aby ją przesłonić.
Wydaje mi się że nie do końca uważnie ktoś czyta książkę "Java EE 6 Programowanie aplikacji WWW".

Chciałbym też się dowiedzieć od kogoś jakim sposobem, za jakimkolwiek odświeżeniem po przeładowaniu aplikacji wywoływana jest metoda processRequest bez delegacji w doGet. Oczywiście nie biorę pod uwagę cachowania przez przeglądarkę www.

Podgląd ciasteczek = przeglądarka www, klient jako program java np klient HttpClient ApacheCommons jeżeli chcemy robić testy.

0

owszem czytam
czy nieuwaznie to nie wiem, po prostu nie do konca zrozumialem o co chodzi, korzystam z eclipse, natomiast w ksiazce mowa o netbeansie. juz zrozumialem blad z tym blede 405, trzeba bylo nadpisac doposta i dogeta i dopiero odniesc sie do processrequest(ktory defakto mozemy nazwac i piernik) i bledu nie ma. teraz o dziwo nie pokazuje sie nic do zapisu, chrome pokazuje ciastko ze niby istnieje, ale zaden napis na stronie sie nie pojawia
prosciej byloby ci napisac po prostu co powinienem zrobic

moze ktos jeszcze ma jakis pomysl co z tym ciastkiem :P?

0

i co z tym co mowi kolega wyzej, jak to sie dzialo ze samo processRequest nie dzialalo, a po uruchomieniu doGetem i zmianie znowu na processRequest dzialalo a nie pojawial sie blad? to jest jakos cachowane?

0

podbijam bo zalezy mi na odp :)

0

Pogmerałem w kodzie i działa

PrintWriter out = resp.getWriter();
		resp.setContentType("text/html; charset=UTF-8");
		out.println("<html><body>");
		
		
		Cookie lastVisit = null;
		Cookie[] cookiesTable = req.getCookies();
		
		if(cookiesTable!=null)
		{
			for(Cookie c : cookiesTable)
			if(c.getName().equals("obecnosc"))
			{
				lastVisit=c;
				break;
			}
		}
		if(lastVisit!=null)
			out.println("<p>Twoja ostatnia wizyta na stronie miala miejsce: " + lastVisit.getValue() + "</p>");
		else if(lastVisit==null)
			out.println("<p>Nie ładnie, nigdy nie odwiedziles tej strony!</p>");
		
		lastVisit = new Cookie("obecnosc",new Date().toString());
		resp.addCookie(lastVisit);
		out.close();
		out.println("</body></html>");
	}

Problemem było to, że jeśli nie bylo cookie do pobrania to wywalal NullPointerException. Zmieniłem tak jak wyżej - przed przeszukiwaniem sprawdza czy wgl cos w tej tablicy jest i działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1