2016-04-27 15 views
2

このコードスニペットはCustomerControllerサーブレットのものです。RequestDispatcherは、JSPにリダイレクトするのではなく、servetのURLに出力を出力します

@WebServlet("/CustomerController") 
/* 
. 
. 
. 
*/ 

if(request.getParameter("operation").equalsIgnoreCase("search-customer")) { 

      CustomerDAO customerDAO = new CustomerDAO(); 
      Customer customer = customerDAO.searchCustomer(Integer.parseInt(request.getParameter("customer_id"))); 
      request.setAttribute("Customer-Result", customer); 
      RequestDispatcher requestDispatcher; 
      requestDispatcher = request.getRequestDispatcher("/search-results.jsp"); 
      requestDispatcher.forward(request, response); 
} 


代わりに、検索結果を印刷するようにsearch-results.jspにリダイレクトする、結果はサーブレットの(CustomerController)URL自体に印刷されています。

画像を参照してください。


search-results.jsp

<%@page import="com.servlet.Customer"%> 
<!DOCTYPE html> 
<html> 

    <body> 


    Customer Found : 

    <% 

    Customer customer = (Customer) request.getAttribute("Customer-Result"); 
    out.println(customer.getCustomer_name()); 

    %> 


    </body> 


</html> 

何が問題になっていCustomerController

+0

あなたはout.println(customer.getCustomer_name())を持っています。これは印刷されています – SpringLearner

+1

クライアント側のリダイレクトで 'sendRedirect'を使用する場合、これは' requestDispatcher.forward'の意図した動作です。 – awd

+0

@awadheshv - 結果をURL「search-results.jsp」に表示するにはどうすればよいですか? –

答えて

0

@Maven Maverickこれがあなたを助けることを願っています。

あなたのURLでご検索results.jspをしたい場合は、あなたのWEB-INFフォルダからそのファイルを削除し、のWebContentフォルダ(IDE:Eclipseの)下に展開。 WEB-INFは保護されたフォルダなので、ユーザーの呼び出しやURLによって直接アクセスされることはありません。そのためには、Webspentフォルダの下のjspファイルをRequestDispatcherの代わりに移動する必要があります。response.sendRedirect("//test.jsp");return;

コメント

希望の作品:

+1

うーん、それは動作しますが、あなたはそれを警告せずに悪い習慣を使用するようにOPに助言しています。 –

+1

私の提案には2つの部分がありました.1つは回答を投稿を編集することでした。答えは、「コメントしないのは残念です...」と言う必要はありません。私のコメントは建設的だった - それをフラグする必要はない。 – Mogsdad

0

あなたはそれを望んでいません!

ブラウザに表示されるURLは、ブラウザから送信された最後のクエリのURLです。あなたのケースでは、あなたは/CustomerControllerとサーバー側にクエリを送信し、サーブレットは結果を表示するJSPに要求を転送しました。その転送はWebアプリケーションの内部の詳細なので、クライアントにその理由を示す必要はありません。

さらに、にする必要があります。一般的な使い方は、クライアントからの直接のクエリを避けるために、サーブレットによって内部的に使用されるJSPを(包含または転送を介して)WEB-INFフォルダの下に置くことです。クエリーできないURLをブラウザに表示するように頼む感覚は何でしょうか?ここで興味深いのは、後でJSPから速度のようなテンプレートエンジンに変更するとという部分がクライアントから隠されているため、と表示されているインターフェイスでは何も変わりません。

これが期待されているかどうかわかりませんなぜあなたは本当にクライアントのブラウザに内部URLを表示したいのだろうかと疑問に思います。 JSPを保護されたWEB-INFフォルダの外に置く必要があるので、間違いなく悪い習慣です。

関連する問題