4

私の質問は、ゲートキーパー サーブレットを使用してページを他のサーブレットに転送している場合、2 番目のサーブレットにパラメーターを参照させるか、パラメーターが参照するための属性を作成させる方がよいでしょうか?

次の形式があるとします。

<form action=www.ermehgerdpuppies.com/Gatekeeper id = puppyForm> 
    <select name=puppyList>
    <option value=cutePuppyServlet_12>CutePuppy
    <option value=uglyPuppyServlet_14>UglyPuppy
</select></form>

Gatekeeper サーブレットに到達するこのフォームを送信します。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   if (request.getParameterMap().containsKey("puppyList"))
   {
        String qString = request.getParameter("puppyList");
        String[] qsArray = qString.split("_");
        request.setAttribute("merPuppy", qsArray[1]);
        RequestDispatcher rd = getServletContext().getRequestDispatcher(qsArray[0]);
        rd.forward(request, response);  
    }
}

次に、cutePuppyServlet に移動します (この例では、cutePuppy に移動します)。

これで、私の cutePuppyServlet.java で、次の方法でデータを参照できます。

request.getParameter("puppyList");

また

request.getAttribute("merPuppy");

パラメータを使用すると、すべてが爆破されるのを防ぐために存在するかどうかを確認できます。私の質問は、保守性に優れているのはどれですか? パラメータの転送に固執する必要がありますか、それとも属性を作成する必要がありますか?

4

3 に答える 3

7

内部サーブレットにパラメーターを使用する利点:

  • ネストされたサーブレットは、必要に応じて、親サーブレットなしで自立できます。
  • 開発者はパラメーターをより意識しています (理由はわかりませんが、リクエスト属性が使用されていることはほとんどありません)。
  • コンテナーがクライアントからそれらを暗黙的に渡すため、コードが少なくなります。

リクエスト属性を使用する利点:

  • URL は変更される可能性がありますが、リクエストは変更されないため、includes、forwards などはそれらを含めます。
  • これは、属性が実際に意味するものであり、コンポーネント間でやり取りされるメッセージです。したがって、サーブレットの設計に準拠しています。

結局のところ、それは大した問題ではありません。私が属性を選択するのは、迅速に行うことよりも標準的な方法で物事を行うことに関心があるためです (たとえそれが誰も気にかけたり従ったりしない標準であっても)。

于 2013-04-23T18:01:52.127 に答える
1

データがパラメーターとして既に使用可能で、設計で常にアクセス可能 (つまり、要求サイクル全体が要求パラメーターにアクセスできる) で、それを属性として設定しても設計上の利点が見られない場合は、パラメーターとしてアクセスします。属性として設定することを忘れてください。

「Less is more」、それが私が伝えようとしているポイントだと思います。

于 2013-04-23T17:52:17.200 に答える