2011-05-23 17 views
6

GWTのcom.google.gwt.http.client.URL.encode()メソッドを使用してクエリパラメータをエンコードしていますが、デコードするためにサーバーでURL.decode()を使用できないことがわかりました(私はそれがjavascriptクライアント側の実装を使用すると思われる)利用可能ではありません。私は...GWTでエンコードされたクエリパラメータをサーバーサイドでどのようにデコードする必要がありますか?

java.lang.UnsatisfiedLinkError:com.google.gwt.http.client.URL.decodeImpl(Ljava/lang/String;)Ljava/lang/String;

エンコードされた文字列をデコードするためにサーバーサイドを使用すると思われるものを誰かが提案できますか?

+0

私は同じ問題を抱えています。私が書いたクラスは、その機能の一部としてパラメータをデコードし、データベースにパラメータを格納しました。後で、サーバー側で、私はこれらのパラメータから抽出されたオブジェクトを作成しようとしています - 完全にクライアント側で動作します。私は既に完璧に動作しているクラスを書き直すことを避けることを好むでしょう...まだ答えを求めています。 – Kieveli

答えて

-1

gwt-rpcを使用したくない場合は、Base64でエンコード/デコードできます。 Base64エンコーダ/デコーダのgwt実装についてはthis linkをチェックしてください。それから、リクエストをサーバーに送信する前にBase64.encode(yourParameterValue)を実行し、リクエストを受信した直後にバックエンドのBase64.decode(request.getParameter(yourParameterName))を実行するだけです。

乾杯!

+0

こんにちは、私はgwt-rpcを使用するつもりはありません。もちろん、私はどこでもアプリで使っています。この場合、ユーザーが適切なMIMEタイプなどとして配信されるファイルをサーバーから要求できるようにするいくつかの機能を記述しました。要求内でクエリパラメータを渡す必要があります。 Base64エンコーダチップをありがとう! GWTのエンコードが正しく動作しないので(パーセント記号をエンコードしないので)、独自のエンコード/デコード機能を作成することになりました。これはJava URLDecodeと同等の動作を保証するものではありません。 !) –

+0

独自の[de]コーダーをBase64として開発することをお勧めしますか?それは多くのRFCと一致しています(実際はRFC 4648で定義されています - http://en.wikipedia.org/wiki/Base64# RFC4648)、残念ながらGWTでは実装されていません(2.0.3 AFAIKではありません)。私たちはgwt-rpcではないすべてのリクエストでBase64 [de]コーダーを使用してきましたが、これまでのところ完璧に動作しています。 –

+0

完全に異なる2つの実装とmix'n'matchしようとすると、あなた自身で作成する方が安全です! :) –

3

java.net.URLDecoderはAppEngineに実装され、com.google.gwt.http.client.URL.encode()で完全に動作します。

+1

com.google.gwt.http.client.URL.encode()が正しく動作しません。私はパーセント記号を符号化しないという事実を知っています。私は無関係のjava.net.URLDecoderと連携して動作するという信用を持っていないので、クライアントとサーバーの両方で利用可能ないくつかの家庭用のエンコード/デコード機能を使用しています。 –

+0

あなたはURL.encode()で何を使うことができるか尋ねましたが、その答えはURLDecoderです。あなたはこの答えを最も単純なものとして受け入れるべきだと思います。脇にURLとして。encode()は、ブラウザのencodeURIのjavascript実装で実装されています。少なくともChromeとFirefoxのテストでは、 '% '文字は'%25'にエンコードされています。 –

+0

申し訳ありません - あなたのソリューションは私のためには機能しませんでした。 2つの実装は私のテストでは互換性がありません。 –

7

私はこの方法で私の問題を解決します。クライアント側では、私はcom.google.gwt.http.client.URL.encodeQueryStringを(使用してパラメータをエンコードする)、のように:

サーバー側で
URL.encodeQueryString(param) 

意志仕事を

String myParam = req.getParameter("myparam"); 

PS私が最初に+1を付けましたライリーラークの答えが、その後、私はのServletRequestまかせ...あまりにもいくつかの文字でいくつかの問題を得た:、私のような、ServletRequestの方法を使用してパラメータを取得しますすべてのキャラクターのエンコーディングを処理します。 参照Decoding international chars in AppEngine

関連する問題