セッションを使用せずに JSP ページから別の JSP ページまたはサーブレットに 2 つ以上の値を送信するにはどうすればよいですか? 私はJSPを初めて使用するので、何か提案してください。
4 に答える
セッションを使用しない理由がわかりません。しかし、私が知っている別の方法が 4 つあります。
get Parameter を使用します。たとえば、2 番目の jsp ファイルへのリンクがあります。リンクの最後にパラメーターを追加します。このような:
mysite.com/second.jsp?param1=value1¶m2=value2
最初のjspページでフォームを使用し、この使用で非表示の入力:
<form action="second.jsp" method="post">
<input type="hidden" name="param1" value="value1" />
<input type="hidden" name="param2" value="value2" />
<input type="submit" name="next" value="Next Page" />
</form>アプリケーション変数を使用しますが、データがすべての一般的な場合、または値を保存するために特別なパラメーター名を使用します。たとえば、次を使用できます。
<% application.setAttribute("user1_param1","value1"); %>
コードで RequestDispatcher を使用します。セッションの代わりにリクエストオブジェクトにパラメータを設定します。
<%
request.setAttribute("param1","value1");
RequestDispatcher r=request.getRequestDispatcher("second.jsp");
r.forward(request, response);
%>
異なる状態で相互に使用できるようにサブティライズしてください。たとえば、ユーザーに結果を送信する前にリクエストを転送する場合は、RequestDispatcher を使用できます。他の方法では、次の使用リクエストの 2 ページ目で現在のデータを返すときに使用します。
複数のリクエスト間で通信する場合は、セッションが必要です。複数のリクエストのデータを保存し、それらが同じクライアントからのものであることを識別できます。
ある jsp から別の jsp に直接渡す場合は、セッションなどのメカニズムは必要ありません。シンプルなオブジェクトでそれを行うことができrequest
ますresponse
。たとえば、パラメータusername
とを含むフォームがある場合password
、次を使用してサーブレットでアクセスできます。
String username = request.getParameter("username");
オブジェクトはどこrequest
ですか。HttpServletRequest
パラメーターが含まれているページを別のページに転送する場合は、ディスパッチャーを使用できます
RequestDispatcher rd = request.getRequestDispatcher("someJSP.jsp");
rd.forward(request,response);
標準タグ ライブラリを使用して、必要なすべてのパラメータを 2 番目の jsp に追加できます。したがって、基本的にライブラリをインポートし、目的のリンクを含む変数を作成し、最後にユーザーがそれを実行できるようにする方法を作成します。それは次のようなものかもしれません:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<c:url value="anotherPage.jsp" var="url">
<c:param name="param1" value="${'parameter1'}"/>
<c:param name="param2" value="${'parameter2'}"/>
</c:url>
<a href=${url}>this is my link</a>
編集:あなたのコメントを読んだ後、私はあなたにこれを伝えることができました:
簡単な回答: すべての変更を追跡する必要がある場合は、1.jsp でデータベースからのデータをチェックする必要があります。そうでない場合、2.jsp はc:urlまたはその他のメカニズムを使用して 1.jsp にデータを送信できます。
長い答え: 2.jsp がデータをデータベースに直接格納する場合、これはその方法ではありません。代わりにサーブレットを使用できます。そして、これは基本的に、あなたがやろうとしている帽子の種類のOSページに依存します. 次の 2 つのケースが表示されます。
複数の行を表示するテーブルがあるページがあります
- サーブレット (db からデータを読み取る)
- showAllData.jsp (データを表示)
- サーブレット (ページにリダイレクト)
- insertOrUpdate.jsp
- サーブレット (データを格納)
- showAllData.jsp (データを表示)
ユーザーが 1 つのレコードのみを編集できるページがある
- update.jsp (データを表示しない)
- サーブレット (データベースにデータを永続化)
- update.jsp (更新されたデータを表示)
また、次のヒントも考慮してください。
サーブレットから JSP に移行する場合は、次のようにする必要があります。
RequestDispatcher rdispatcher = request.getRequestDispatcher("showAllData.jsp"); rdispatcher.forward(リクエスト、レスポンス);
サーブレットに送信するそれぞれに非表示の html フィールドを含めることができます。
operation
そのフィールド内には、実行したいものを特定するためのある種のキーがあります。<form action="MyServlet" method="GET">
<input type="hidden" name="operation" value="READ_ALL"/>
...
</フォーム>
と
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String operation = req.getParameter("operation");
if ("READ_ALL") {
readDataFromDb(req, res);
}
if ("INSERT_RECORD") {
insertRecordIntoDb(req, res);
}
}
それが役立つことを願っています