Recevoir des Cookies de ServletRequest
Je suis en utilisant ServletRequestListener
attacher à de nouvelles demandes, obtenir un ServletRequest
objet et d'en extraire des cookies.
J'ai remarqué que seulement HTTPServletRequest
a des cookies mais je n'ai pas trouvé un lien entre ces deux objets.
Est-il acceptable d'utiliser
HttpServletRequest request = ((HttpServletRequest) FacesContext.getCurrentInstance()
.getExternalContext().getRequest());
pour récupérer la demande, alors que dans un RequestInitialized
méthode? (Je ne veux exécuter à chaque requête)
FYI - tout Cela est fait dans un JSF 1.2 Application
OriginalL'auteur Ben | 2011-03-24
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas correct. Le
FacesContext
n'est pas disponible dans unServletRequestListener
en soi. LegetCurrentInstance()
pourrait revenirnull
, conduisant à des NPE.Si vous êtes en cours d'exécution de la webapp sur un serveur HTTP (et donc pas une Portlet serveur web par exemple), vous pouvez juste lancer la
ServletRequest
àHttpServletRequest
.Noter qu'une pratique plus courante est d'utiliser un
Filtre
pour cela, car vous pouvez mapper ce sur un modèle d'URL comme*.jsf
ou même sur des servlets de sorte qu'il s'exécute uniquement lorsque leFacesServlet
s'exécute. Vous pourriez par exemple vouloir sauter cookie contrôles sur les ressources statiques comme CSS/JS/images.Lorsque vous arrive d'être déjà à l'intérieur de la JSF contexte (dans un managed bean, phaselistener ou quoi que ce soit), vous pouvez simplement utiliser
ExternalContext#getRequestCookieMap()
pour obtenir les cookies.Lors de l'exécution de l'ACI sur le dessus de la Servlet API, la valeur de la carte est de type
javax.servlet.http.Cookie
.OriginalL'auteur BalusC
Oui, vous pouvez le faire. Dans les scénarios de Web, ce sera toujours ok. Si vous voulez être sûr, vous pourriez faire un chèque pour le premier type. (Bonnes pratiques de toute façon):
Par la route: Pourquoi devez-vous utiliser
FacesContext
? D'où êtes-vous en faveur de ce code?Désolé, je pense, j'ai oublié cette partie. Voulez-vous dire de l'Application comme dans
javax.faces.application.Application
? Dans ce cas, vous n'avez pas de choix.OriginalL'auteur nfechner