JSPを使用してURLからパラメーターを取得する方法


192

JSPでは、URLからパラメーターを取得するにはどうすればよいですか?

たとえばwww.somesite.com/Transaction_List.jsp?accountID=5
、5を取得したいURLがあります。

セッションまたは同様の何かのようにrequest.getAttribute( "accountID")はありますか?

回答:


178

GETリクエストでは、リクエストパラメータはクエリ文字列(URLの疑問符に続くデータ)から取得されます。たとえば、http://hostname.com?p1 = v1&p2 = v2 というURLには、p1とp2という2つのリクエストパラメータが含まれています。POSTリクエストでは、リクエストパラメータは、クエリ文字列と、リクエストの本文にエンコードされているポストされたデータの両方から取得されます。

この例は、生成された出力にリクエストパラメータの値を含める方法を示しています。

Hello <b><%= request.getParameter("name") %></b>!

URLを使用してページにアクセスした場合:

http://hostname.com/mywebapp/mypage.jsp?name=John+Smith

結果の出力は次のようになります。

Hello <b>John Smith</b>!

クエリ文字列で名前が指定されていない場合、出力は次のようになります。

Hello <b>null</b>!

この例では、スクリプトレットでクエリパラメータの値を使用しています。

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>

96
スクリプトレットは悪い習慣と見なされます。
BalusC 2009

13
xmlEncodeを忘れないでください。これは現在、反映された
xss

4
XSS脆弱性の場合は-1。ELを使用してジョブを実行できる場合にスクリプトレットを使用すると、投票が2回できた場合も-1になります。真剣に、これを行わないでください
ジュール

より良いソリューションが存在する場合にスクリプトレットの使用を提案することは、コード品質に有害です。
Suketu Bhuta

2
「スクリプトレットは悪い習慣と見なされています。」については、別の質問この回答を参照してください。
Pixelstix 2018

242

暗黙オブジェクト統一表現言語Java EEの5チュートリアルを書いています:

暗黙的なオブジェクト

JSP式言語は、暗黙のオブジェクトのセットを定義します。

  • pageContext:JSPページのコンテキスト。以下を含むさまざまなオブジェクトへのアクセスを提供します。
    • servletContext:同じアプリケーションに含まれるJSPページのサーブレットおよびWebコンポーネントのコンテキスト。Webコンテキストへのアクセスを参照してください。
    • session:クライアントのセッションオブジェクト。クライアント状態の維持を参照してください。
    • request:JSPページの実行をトリガーする要求。リクエストからの情報の取得を参照してください。
    • response:JSPページによって返される応答。応答の作成を参照してください。
  • さらに、次のオブジェクトに簡単にアクセスできるいくつかの暗黙的なオブジェクトを使用できます。
    • param:要求パラメーター名を単一の値にマップします
    • paramValues:要求パラメーター名を値の配列にマップします
    • header:要求ヘッダー名を単一の値にマップします
    • headerValues:要求ヘッダー名を値の配列にマップします
    • cookie:Cookie名を単一のCookieにマップします
    • initParam:コンテキスト初期化パラメーター名を単一の値にマップします
  • 最後に、スコープオブジェクトの使用で説明されているさまざまなスコープ変数へのアクセスを許可するオブジェクトがあります。
    • pageScope:ページスコープの変数名をその値にマップします
    • requestScope:リクエストスコープの変数名をその値にマッピングします
    • sessionScope:セッションスコープの変数名をその値にマップします
    • applicationScope:アプリケーションスコープの変数名をその値にマップします

興味深い部分は太字です:)

したがって、あなたの質問に答えるには、次のように(ELを使用して)アクセスできる必要があります。

${param.accountID}

または、JSPスクリプトレットを使用します(非推奨)。

<%
    String accountId = request.getParameter("accountID");
%>

ELを有効にするために必要なことはありますか?私はjboss6を使用していますが、$ {param.accountID}を使用すると、ブラウザーからの通常のテキストとして扱われます。
simgineer

@simgineerまず、ファイルは単なるHTMLではなく、JSPでなければなりません。次のトピックを読む:式言語、変数の値を表示しないEL式はJBoss ASで4.2.2で評価されていないJSPでの式言語は働いていません
informatik01

81

EL(JSP式言語)を使用します。

${param.accountID}


1
これはURLデコードを処理しますか?
vikingsteve 2013年

@vikingsteveはい、そうです
Neil McGuigan

2
ただし、XSS防止に必要なHTML / XMLエンティティとしての再エンコードは処理しません。<c:out value="${param.accountID}" />それを行うにはJSTL を使用します。
ジュール

21

ここにコメントを追加する場合...

<c:out value="${param.accountID}"></c:out>

私には機能しません(0が出力されます)。

代わりに、これは機能します:

<c:out value="${param['accountID']}"></c:out>


注目に値する:paramには、URLクエリ引数よりも多くの値が含まれます(例:モデルマップの値)。値がURLクエリ引数にあるかどうかを具体的に確認する必要がある場合(たとえば、フォーム送信の一部として送信される場合)、$ {pageContext.request.queryString}を確認できますが、これはparamsのような素敵なマップです。
ポール、



0

subject_idを持つ件名レコードを削除する例

@RequestMapping(value="subject_setup/delete/{subjectid}",method = RequestMethod.GET)
public ModelAndView delete(@PathVariable int subjectid) {
    subjectsDao.delete(subjectid);
    return new ModelAndView("redirect:/subject_setup");
}

パラメータはクエリの入力に使用されます

public int delete(int subjectid) {
    String sql = "update tbl_subject set isdeleted= '1' where id = "+subjectid+"";
    return template.update(sql);
}

0

www.somesite.com/Transaction_List.jsp?accountID=5

このため、JavaにURLメソッド呼び出しがありrequest.getParameterます。ここに数値をキャストしたい場合はint、文字列値をキャストしstringた場合と同様です。だからあなたの要件のために、ページの下の行の下を単にコピーしてください、

int  accountId =(int)request.getParameter("accountID");

この値を使用して呼び出すことができます accountIdで、ページ全体でしてます。

これaccountIdはパラメータの名前です。これを使用して複数のパラメータを取得することもできますが、これは機能しません。GETヒットした場合にのみメソッドで動作しますPOSTリクエスト、エラーになります。

これがお役に立てば幸いです。


0

ページ1:詳細ページ2:<%String id = request.getParameter( "userid");%> // hsql詳細製品のSQLクエリにidを使用できるようになりました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.