前のセクションでは、ショッピングカートの基本的な操作を完了しましたが、問題があります。ユーザーがクリックして解決すると、ユーザーがログインしているかどうかを判断するためにログイン判断を下す必要があります。ログインしていない場合は、最初にユーザーをログインする必要があります。フィルターは、特にページリクエストをインターセプトします。インターセプターの原理に似ています。インターセプターは、アクションリクエストを特別にインターセプトするため、それぞれに独自の用途があります。アクションを実行せずにページジャンプの場合は、インターセプターを作成するだけです。処理のためにアクションにジャンプする必要がある場合は、インターセプターを作成する必要があります。
1.ログインジャンプの原則<BR />実装原則について最初に話しかけましょう。フィルターを書き、web.xmlでインターセプトする必要があるURLを構成します。このようにして、ユーザーの要求URLが構成を満たしている場合、作成したフィルターが実行されます。フィルターでは、最初にセッションにログインしているユーザーがいるかどうかを確認します。ログインがないという兆候がない場合は、ユーザーがアクセスしたいページURLとパラメーターを取得し、URLに再スチッチしてセッションに入れてから、ログインページにリダイレクトし、ログインしてアクション処理にジャンプし、処理後、セッションで保存されたURLにジャンプします。これにより、ログインジャンプが完了します。
2。ログインジャンプの実装
実際のショッピングカートページを使用すると、チェックアウトをクリックすると、次のように注文確認ページに自動的にジャンプします。
ただし、この時点でユーザーがログインしていない場合は、注文確認ページに直接ジャンプしないようにするため、フィルターを使用してブロックして判断を下す必要があります。以下にフィルターを書きましょう。
2.1フィルターの実装
フィルターの実装では、フィルターインターフェイスを実装し、3つの方法を上書きする必要があります。実際、私たちは主にそれらの1つを上書きする必要があります。次のように:
Public Class userFilterはfilter {@override public void Destroy(){// todo auto-enerated method stub} @override public void dofilter(servletrequest request、servletResponse Response、filterchainチェーン)をスローします。 httpservletResponse res =(httpservletResponse)応答; //現在のセッションがユーザー情報を持っているかどうかを判断します。 //アドレスでパラメーターを取得しますif(param!= null){gourl = gourl + "?" + param; //リクエストアドレス +パラメーターを再スティッチする} //現在の顧客がセッションreq.getSession()。setattribute( "gourl"、gourl)にアクセスしたいアドレスを保存します。 //違法リクエスト、ログインページにジャンプしてくださいReq.getSession()。setAttribute( "error"、 "違法リクエスト、ログインしてください!"); res.sendredirect(req.getContextPath() + "/ulogin.jsp"); } else {//次のフィルターがある場合、ジャンプし、それ以外の場合はターゲットページChain.dofilter(request、response)に直接移動します。 }} @Override public void init(filterconfig config)servletexception {// dodo auto-enerated method stub}}}実装コードから判断すると、DoFilterメソッドは主に下痢です。この方法では、最初に現在のセッションにユーザー情報があるかどうかを決定します。そうでない場合、ログインがないことを意味します。次に、最初にユーザーが移動したいアドレスにURLアドレスとパラメーターを保存し、それを新しいURLに綴り、セッションに保存し、ログインページにリダイレクトしてユーザーのログインを許可する必要があります。
フィルターを作成した後、次のように、Web.xmlでフィルタリングするURLを構成することを忘れないでください。
したがって、上記の$ {shop} /user/confirm.jspがフィルタリングされます。次に、ログインページを見てみましょう。実際には、ユーザー名とパスワードの2つのボックスがあります。これは、主にジャンプするアクションに依存します。
ロジックを実行するために、ユーザーアクションのログインメソッドにジャンプすることがわかります。ここでユーザーアクセスを実装します。
2.2アクション実装
ユーザーアクセスでは、最初にログイン判断を下します。つまり、データベースにユーザー名とパスワードを持つユーザーを探します。成功した場合は、セッションでユーザーを保存してから、結果を返して、処理のためにStruts2に引き渡します。コードは次のとおりです。
@controller( "useraction")@scope( "prototype")public class useraction extends BaseAction <user> {public string login(){// Judgect of Login Model = userservice.login(model); if(model == null){session.put( "error"、 "login failed"); 「ログイン」を返します。 } else {//正常にログインするには、最初にsessions.put( "user"、model)にユーザーを保存します。 //セッションのGourlに値があるかどうかに基づいてページのジャンプを守るif(session.get( "gourl")== null){return "index"; //ホームページにスキップ} else {return "gourl"; }}}}struts.xmlの構成を見てみましょう。
セッションにはGourlがありますが、struts.xmlでは、セッションを取得できず、Javaコードでパラメーターを取得できませんが、値スタックから取得できます。上記は、値スタックからデータを取得する方法です。
2.3サービスレイヤーのログイン判断
サービスレイヤーは、主に上記のアクションで使用されるログイン方法であり、実装は次のように比較的単純です。
// userservice interface public interface userserviceはbaseSeservice <user> {//ユーザーがログインしてユーザーパブリックユーザーログイン(ユーザーユーザー)を返します。 } // userserviceimpl実装@service( "userservice")public class userserviceimpl拡張baseserviceimpl <user> emplments userservice {@override public user login(user user){string hql = "from user u uslogin =:::login and u.pass =:pass"; return(user) }}わかりました。そのため、フィルターを使用して、ユーザーログインの判断とジャンプを実現します。ログインした後、注文確認ページにジャンプできます。効果は次のとおりです。
プロセステスト全体が完了し、関数が正常です。実際、もう少し改善できます。ショッピングカートに追加する前に、実際にログイン判断を下す必要があります。つまり、ショッピングカートのページはすでにログイン状態にあり、ログインを決定するための注文確認ページを次に示します。ただし、ショッピングカートのページの前に判断を下すと、フィルターを使用することは困難です。ショッピングカートのページにジャンプするときは、アクションのリクエストは通常のページではないため、インターセプターを使用する必要があります。アクションを要求するときは、インターセプターを使用してインターセプトする必要があります。後でこれを改善しましょう。ここで、基本的に関数を実装します。さて、ログイン判断とジャンプは完了します。
オリジナルアドレス:http://blog.csdn.net/eson_15/article/details/51425010
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。