1

jsp次のURLを使用して2つのパラメーターを送信するファイルがあります。

var url = 'abc_user_history.jsp?where='+where+'&stock_number=' + StockNumber;
window.open(url, 'Special_Value_History','toolbar=no,location=no,directories=no,status=no, menubar=no,scrollbars=yes,resizable=yes,width=1500,height=900');

ここでは、SQLクエリがある場所stock_numberで常にnull...を取得しています。例:

where=where stock_id like '4575%' and stock_name like 'abc%'

私はabc_user_history.jspいつもどこにいるのかnull。しかし、私はstock_number価値を得ることができます。それをどこに渡すかを提案してください...

4

2 に答える 2

1

get paramsでクエリを渡すことは非常に危険です。Javaでパラメータ化されたクエリを検索すると、多くのドキュメントが含まれます。javascriptからjspページを呼び出していますか?文字列の引用符に注意してください。

于 2012-10-18T15:23:55.063 に答える
1

ここにはあまりにも多くのアンチパターンがあり、どこから始めればよいかわかりません :|

where パラメーターを 1 つの動的パラメーターにする必要がある場合は、field=value のすべてのペアをカスタム セパレーターで区切って文字列を渡し、Java で (StringTokenizer を使用して) 解析し、Where にマウントすることができます。アクションの状態。

where 変数の例:

where="stock_id:::'4575%';;;stock_name:::'abc%';;;" (::: は、フィールド名が終了し、値が始まることを意味します。;;; は、そのペアが終了し、最終的に新しいペアの読み取りを開始することを意味します)。

もちろん、値の一部に「;;;」が含まれていると、これは壊れます または ":::" (最初に JavaScript でサニタイズする必要があります)。

ちなみに、Java マウント文字列をクエリ文字列に連結するのではなく、PreparedStatement にトークン化された値を挿入する必要があるため、これは良くありません (PreparedStatement がそれらをチェックしてサニタイズします)。

ただし、すべてのパラメーターを単一のパラメーターとして渡すことをお勧めします (URL では ?where= ではなく ?stock_id=xxx&stock_name=yyy&... です)。

また、フォームの投稿には POST を使用する必要があります。GET ではなく、ページの読み取りのみに使用し、投稿には使用しないでください (window.open() を使用することはできませんが、target="_blank" を使用してアンカーからフォームを投稿できます)。および onclick="javascript:document.getElementById['myForm'].submit();")

それが役立つことを願っています...

于 2012-10-18T15:20:32.397 に答える