PDA

View Full Version : [Java] Problema settaggio cookie con Servlet


UnknownSoldier
08-12-2008, 16:52
Rieccomi per un nuovo problema ;)
Allora, durante l'elaborazione di una JSP, mi collego ad un Servlet e gli passo dei parametri che serviranno per specificare i dettagli dei cookie da aggiungere alla response:


<c:choose>
<c:when test = "${!empty param.remember}">
<c:import url = "/addCookie">
<c:param name = "userName" value = "${validUser.userName}"/>
<c:param name = "password" value = "${validUser.password}"/>
<c:param name = "age" value = "${60 * 60 * 24 * 30}"/>
</c:import>
</c:when>
<c:otherwise>
<c:import url = "/addCookie">
<c:param name = "userName" value = "${validUser.userName}"/>
<c:param name = "password" value = "${validUser.password}"/>
<c:param name = "age" value = "0"/>
</c:import>
</c:otherwise>
</c:choose>


Questo il servlet:

package servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class addCookie extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie userNameCookie = new Cookie ("userName", request.getParameter ("userName"));
Cookie passwordCookie = new Cookie ("password", request.getParameter ("password"));
userNameCookie.setMaxAge (Integer.parseInt (request.getParameter ("age")));
passwordCookie.setMaxAge (Integer.parseInt (request.getParameter ("age")));

response.addCookie(userNameCookie);
response.addCookie(passwordCookie);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}


Mi accorgo del non funzionamento poichè quando tento di richiamare tramite espressione EL i cookie (${cookie.userName.value}) il risultato è null.
Qualche idea? :(

UnknownSoldier
08-12-2008, 23:36
Dopo vari test ho potuto constatare che oltre al fatto che il link relativo al servlet è errato considerando la posizione della pagina che lo richiama, le operazioni che il servlet dovrebbe compiere non vengono eseguite nè con <c:import> nè con <jsp:include>. Se invece utilizzo un redirect o un forward il servlet viene eseguito correttamente. Ma siccome inserendo un redirect o un forward mi stravolgerebbe un pò il sistema dell'applicazione, mi chiedo se esiste qualcosa di simile, e mi chiedo soprattutto perchè c:import e jsp:include non eseguono il servlet... a cosa servono allora?

UnknownSoldier
09-12-2008, 16:15
Ho provato a creare i Cookie direttamente utilizzando la stessa JSP invece di invocare il servlet:


...
<%@ page import = "javax.servlet.http.Cookie" %>
<% Cookie userNameCookie, passwordCookie; %>
<c:choose>
<c:when test = "${!empty param.remember}">
<%
userNameCookie = new Cookie ("userName", request.getParameter ("userName"));
passwordCookie = new Cookie ("password", request.getParameter ("password"));
userNameCookie.setMaxAge (60 * 60 * 24 * 30);
passwordCookie.setMaxAge (60 * 60 * 24 * 30);

response.addCookie(userNameCookie);
response.addCookie(passwordCookie);
%>
</c:when>
<c:otherwise>
<%
userNameCookie = new Cookie ("userName", request.getParameter ("userName"));
passwordCookie = new Cookie ("password", request.getParameter ("password"));
userNameCookie.setMaxAge (0);
passwordCookie.setMaxAge (0);

response.addCookie(userNameCookie);
response.addCookie(passwordCookie);
%>
</c:otherwise>
</c:choose>
...

Ma non funziona! Insomma, cos'è che sbaglio? Prima non mi funzionano le action per includere il servlet esterno e ora non mi funziona questo frammento di codice... sto impazzendo .__.