Dans la section précédente, nous avons terminé le fonctionnement de base du panier d'achat, mais il y a un problème: lorsque l'utilisateur clique pour régler, nous devons porter un jugement de connexion pour déterminer si l'utilisateur est connecté. S'il n'est pas connecté, il doit d'abord laisser l'utilisateur se connecter. Cela utilise la technologie des filtres. Le filtre intercepte spécifiquement les demandes de page. Il est similaire au principe d'un intercepteur. L'intercepteur intercepte spécifiquement les demandes d'action, donc chacun a ses propres utilisations. S'il s'agit d'une page, sautez directement sans passer par une action, nous avons juste besoin d'écrire un intercepteur. Si nous devons passer à une action pour le traitement, nous devons écrire un intercepteur.
1. Le principe du saut de connexion <BR /> Permettez-moi d'abord de parler du principe d'implémentation: écrivez un filtre et configurez l'URL qui doit être interceptée dans web.xml. De cette façon, lorsque l'URL de demande de l'utilisateur répond à la configuration, le filtre que nous avons écrit sera exécuté. Dans le filtre, nous vérifions d'abord s'il y a un utilisateur connecté à la session. S'il n'y a aucune indication qu'il n'y a pas de connexion, alors obtenez l'URL et les paramètres de la page auxquels l'utilisateur souhaite accéder, recouvrez-le dans l'URL et mettez-le dans la session, puis redirigez vers la page de connexion, connectez-vous et sautez vers le traitement de l'action, et après le traitement, sautez à l'URL enregistrée dans la session, c'est-à-dire où l'utilisateur a voulu aller. Cela complète le saut de connexion.
2. Implémentation de saut de connexion
Lorsque la vraie page de panier est utilisée, nous cliquons sur la caisse, et elle passera automatiquement à la page de confirmation de commande, comme suit:
Cependant, si l'utilisateur n'est pas connecté pour le moment, nous ne passerons certainement pas directement à la page de confirmation de commande, nous devons donc utiliser un filtre pour le bloquer et porter un jugement. Écrivons le filtre ci-dessous:
2.1 Implémentation de filtres
L'implémentation du filtre doit implémenter l'interface de filtre et écraser trois méthodes. En fait, nous avons principalement besoin de remplacer l'un d'eux. comme suit:
classe publique UserFilter implémente Filter {@Override public void destrement () {// TODO Méthode générée automatiquement Stub} @Override public void Dofilter (ServletRequest Request, ServletRespenser Response, FilterChain Chain) lance ioException, ServletException {httSservletRetest req = (httServletReter) requête; HttpServletResponse Res = (httpServletResponse) Réponse; // Déterminez si la session actuelle a des informations d'utilisateur if (req.getSession (). GetAtTribute ("utilisateur") == null) {// Enregistrez l'adresse URL que le client actuel souhaite aller à String gourl = req.getServletPath (); // Obtenez l'adresse que l'utilisateur veut aller à String Param = req.getqueRySString (); // Obtenez les paramètres transportés dans l'adresse if (param! = Null) {gourl = gourl + "?" + param; // recouvre l'adresse de demande + paramètres} // Enregistrez l'adresse à laquelle le client actuel souhaite accéder dans la session req.getSession (). SetAttribute ("gourl", gourl); // demande illégale, passez à la page de connexion req.getSession (). SetAttribute ("erreur", "demande illégale, veuillez vous connecter!"); res.sendRedirect (req.getContextPath () + "/ulogin.jsp"); } else {// S'il y a le filtre suivant, saut, sinon, allez directement sur la page cible chaîne.dofilter (demande, réponse); }} @Override public void init (FilterConfig config) lève ServletException {// TODO Méthode générée automatiquement Stub}} À en juger par le code d'implémentation, la méthode Dofilter est principalement la diarrhée. Dans la méthode, déterminez d'abord s'il existe des informations utilisateur dans la session en cours. Sinon, cela signifie qu'il n'y a pas de connexion. Ensuite, vous devez d'abord enregistrer l'adresse et les paramètres de l'URL dans l'adresse à laquelle l'utilisateur veut aller, l'épeler dans une nouvelle URL et l'enregistrer dans la session, puis la rediriger vers la page de connexion pour permettre à l'utilisateur de se connecter. S'il y a des informations de l'utilisateur dans la session, cela signifie que vous vous êtes connecté et que vous les publiez directement sur la page que l'utilisateur souhaite aller.
Après avoir écrit Filtre, n'oubliez pas de configurer l'URL pour filtrer dans web.xml, comme suit:
Ainsi, les $ ci-dessus {shop} /user/confirm.jsp seront filtrés. Ensuite, jetons un coup d'œil à la page de connexion. Il a en fait deux boîtes, nom d'utilisateur et mot de passe, qui dépend principalement de l'action à laquelle il saute:
Nous voyons qu'il passe à la méthode de connexion dans UserAction pour exécuter la logique. Ici, nous implémentons l'utilisateur:
2.2 Implémentation d'action
Dans UserAction, nous faisons d'abord un jugement de connexion, c'est-à-dire recherché les utilisateurs avec le nom d'utilisateur et le mot de passe dans la base de données. S'il réussit, enregistrez l'utilisateur dans la session, puis renvoyez un résultat et remettez-le à Struts2 pour le traitement. Le code est le suivant:
@Controller ("userAction") @Scope ("Prototype") public class userAction étend BaseAction <User> {public String Login () {// Jugement de Login Model = userService.login (modèle); if (modèle == null) {session.put ("Error", "Login a échoué"); return "connexion"; } else {// Connexion avec succès, stockez d'abord l'utilisateur dans Session Session.put ("utilisateur", modèle); // défend le saut de la page en fonction de la question de savoir si le gourl dans la session a une valeur if (session.get ("gourl") == null) {return "index"; // Passez à la page d'accueil} else {return "gourl"; }}}}Jetons un coup d'œil à la configuration dans strut.xml:
Parce que nous avons la session Gourl en session, mais dans strut.xml, nous ne pouvons pas obtenir la session puis les paramètres dans Java Code, mais nous pouvons le retirer de la pile de valeur. Ce qui précède est la méthode d'obtention des données de la pile de valeur.
2.3 Jugement de connexion de la couche de service
La couche de service est principalement la méthode de connexion utilisée dans l'action ci-dessus, et l'implémentation est relativement simple, comme suit:
// Interface utilisateur Interface publique UserService étend BaseService <Serser> {// l'utilisateur se connecte et renvoie la connexion de l'utilisateur public utilisateur (utilisateur utilisateur); } // userServiceIMP implémentations @Service ("userService") classe publique UserServiceImpl étend BaseServiceImpl <User> implémente userService {@Override public User Login (utilisateur utilisateur) {String hql = "de l'utilisateur u où u.login =: connexion et u.pass =: pass"; return (user) getSession (). CreateQuery (hQL) // .SetString ("Login", user.getLogin ()) // .SetString ("pass", user.getPass ()) // .UniqueResult (); }}OK, nous utilisons donc des filtres pour réaliser le jugement et sauter de la connexion de l'utilisateur. Après vous être connecté, nous pouvons passer à la page de confirmation de commande. L'effet est le suivant:
L'ensemble du test de processus est terminé et la fonction est normale. En fait, nous pouvons l'améliorer un peu plus. Nous devons en fait porter un jugement de connexion avant de l'ajouter au panier. C'est-à-dire que la page du panier est déjà dans l'état de connexion, et voici la page de confirmation de commande pour déterminer la connexion. Cependant, si nous faisons des jugements avant la page du panier, il nous sera difficile d'utiliser le filtre. Nous devons utiliser l'intercepteur, car la demande d'action n'est pas une page ordinaire lors du saut sur la page du panier. Lors de la demande d'action, nous devons utiliser l'intercepteur pour l'intercepter. Amélilons cela plus tard. Maintenant, nous allons essentiellement implémenter les fonctions ici. D'accord, le jugement de connexion et le saut sont terminés.
Adresse originale: http://blog.csdn.net/eson_15/article/details/51425010
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.