Vaadinowe ciasteczka

Vaadin jest to generalnie narzędzie, które służy do pisania aplikacji, a nie aplikacji webowych. Na czym polega różnica? Powiem w Szczecinie już w sobotę na konferencji java4people. Jedną z cech jest brak czegoś takiego jak ciasteczkaW w aplikacji okienkowej. Po prostu nie ma. Oczywiście w zamian dostajemy dostęp do plików i możliwość składowania informacji w katalogu domowym użyszkodnika względnie można sobie zrobić kuku grzebiąc w rejestrze, ale to już nie to samo.
Niestety Vaadin choć zbliża się do aplikacji okienkowej od strony kodu to nadal jest uwiązane do pewnych webowych rozwiązań jak np. wspomniane ciasteczka. Szerzej formując problem chcemy dostać się z poziomu aplikacji do obiektów HttpRequest i HttpResponse.

Po pobieżnym przejrzeniu API znajdziemy interfejs HttpServletRequestListener, który zapewnia odpowiednią funkcjonalność. Dalsza implementacja jest już prosta:

Listing 1. przykładowa implementacja HttpServletRequestListener

public class MyVaadinApplication extends Application implements
		HttpServletRequestListener {
// ...

	public void onRequestStart(HttpServletRequest request,
			HttpServletResponse response) {
		if (!isRunning()) {
			Cookie[] cookies = request.getCookies();
			for (int i = 0; i < cookies.length; i++) {
				if ("username".equals(cookies[i].getName()))
					setUser(new User(cookies[i].getValue()));
			}
		} else {
			if (getUser() != null) {
				Cookie cookie = new Cookie("username",
						((User) getUser()).getLogin());
				cookie.setPath(getURL().getPath());
				cookie.setMaxAge(365 * 24 * 3600); 
				response.addCookie(cookie);
			}
		}

	}

	public void onRequestEnd(HttpServletRequest request,
			HttpServletResponse response) {
		if (getUser() == null) {
			Cookie cookie = new Cookie("username", "");
			cookie.setPath(getURL().getPath());
			cookie.setMaxAge(0); // Delete
			response.addCookie(cookie);
		}
	}
}

I to tyle.

ps. do Szczecina szykuję małą niespodziankę...

Napisz odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax