2012-04-25 7 views
0

いくつかの情報をパラメータとして別のページにリダイレクトするハイパーリンクが含まれているWebアプリケーションがあります。具体的には、私のハイパーリンクにはSQLクエリがパラメータとして含まれています。ハイパーリンクを介したパラメータの受け渡し

私はそうのように、この操作を行います。

<a href="somepage.jsp?query=<%=stringSQLQuery%>"></a> 

しかし、いつでも私のSQLクエリは、検索語としてワイルドカードを含め、%のように、私は私のログファイルに次のエラーメッセージが表示されます:

Character decoding failed. Parameter [string] with value ... 

だから、私はハイパーリンクを使ってSQLクエリを渡すことはできないと思う。この問題を解決するために私は何ができますか?

<a onclick='window.href.location = encodeURI("somepage.jsp?query=<%=stringSQLQuery%>");'>Click me</a> 

this jsfiddle

を参照してください。また、通じているようにSQLのを渡すと悪い悪い悪い考えです:あなたは私はこれが何をしたいと思いuri encode your parameters.

に必要

+0

なぜ完全なSQLクエリをパラメータとして渡す必要がありますか?ユーザーがクエリのパラメータのみを提供するはずですか?あなたのアプリのために十分安全ですか? – jambriz

答えて

1

URLは許可された文字で制限されています。 %は、URLエンコードされた文字の開始を示す予約文字です。

リクエストパラメータはURL-encodedである必要があります。 JSTL<c:url><c:param>は、この仕事のために設計されています。みんなで述べたように

<c:url var="somepage" value="somepage.jsp"> 
    <c:param name="query" value="${stringSQLQuery}" /> 
</c:url> 
<a href="${somepage}">link</a> 

は、あなたはしかし、リクエストパラメータとして周りのSQL文字列を渡すとここに巨大な設計ミスを作っています。むしろ、一部の Mapに格納されている、またはおそらくRESTfulなURLに格納されている固定コマンドで作業します。

1

。誰でもあなたのDBにアクセスできます。

+0

OPはJavaScriptを使用せずJSPを使用しています。 – BalusC

+0

JSPページの大きな特徴は、JavaScriptを使うこともできます:P – stevebot

+0

私はそれがひどいひどい考えですが、これは私の教授が望んでいることです。 :/ – Waffles

0

は、例として、ハイパーリンク

を使用してpamametersまたは値を渡すことができます。 私は1つのページdisplay.htmlを持っており、パラメータa、bを渡し、それぞれ10と20が値。アンカータグでは、以下のようにhrefします。

     href="xyz.html?a=10&b=20" 
関連する問題