2012-11-19 18 views
6

Tworzę aplikację do logowania w języku JAVA. Robię prezentację w JSP i całą logikę (łączność z bazą danych) w Servlet [nie jest to właściwe podejście, które znam]. Sprawdzam nazwę użytkownika Hasło w Servletie, a następnie tworzę zmienną sesji. i dodać sesję jak tenZachowywanie sesji w Javie przy użyciu sendredirect

sess.setAttribute("username",oName); 

Potem przekierować użytkownika do jego głównej powiedzieć student.jsp

response.sendRedirect("student.jsp"); 

Usuwa sesja variable.I potrzebny jest sposób, aby zachować zmiennej sesji i ruch to student.jsp. Próbowałem użyć forwadingu, ale to się nie udało.

RequestDispatcher dispatcher = 
       getServletContext() 
        .getRequestDispatcher("/student.jsp"); 

      if (dispatcher != null) { 
       dispatcher.forward(request, response); 
      } 

Żądanie przekazania dalej, ale adres strony nie zmienia się na student.jsp, co nie jest dobre. Każda pomoc w tym zakresie zostaną docenione Dziękuję

+1

Tak działa przekierowanie: zastępowanie zawartości przeglądarki, a nie adresu URL. Musisz użyć przekierowania, ale jakoś przeglądarka, w której przeprowadzasz testy, nie zezwala na pliki cookie. Włącz pliki cookie w przeglądarce i ponownie uruchom aplikację. –

+1

Oto dobry samouczek, który może pomóc w forwading.Its eqivalent of JSP forwading w Servlet http://www.javapractices.com/topic/TopicAction.do?Id=181 –

Odpowiedz

5

Dla przekierowany życzenie wrócić i dołączyć do tej samej sesji, potrzebuje identyfikator sesji, zwykle prowadzone w JSESSIONID (lub inna nazwa) ciasteczko lub w URL jako parametr.

Ten plik cookie lub parametr adresu URL powinien zostać dodany przez kontener serwletu i nie należy go dodawać samodzielnie.

Jeśli nie widzisz pliku cookie w przeglądarce i nie przypisujesz adresu JSESSIONID do adresu URL, tworzy on nową sesję z każdym żądaniem i nie dołącza do tej samej sesji.

-1

Użyj RequestDispatcher i ustaw zmienną nazwy użytkownika za pomocą request.setAttribute(). W takim przypadku dyspozytor nie utworzy nowego żądania, ale to samo żądanie zostanie przekazane przy użyciu metody forward().

+1

To nie rozwiąże konkretnego problemu OP na wszystko. W ten sposób użytkownik nie jest zalogowany w żadnym kolejnym żądaniu. – BalusC

0

Spróbuj edytować plik tomcat context.xml i zamienić tag <Context> na <Context useHttpOnly="false">, to pomogło mi.

Powiązane problemy