servlet
に提供するいくつかのパラメータに基づいてApache Solr
からデータを呼び出して取得するservlet
を作成するときに私が目にした奇妙な動作です。サーブレットが応答を予期せずBase64形式で返す
servlet
Solr
を照会し、データをjson形式で返信します。次に、System.out.println(response)
を入力して確認します。それはjson形式でしかありませんでした。
私の問題は、このサービスを利用していたクライアントに対して同じ応答を受け取った場合、データがBase64
形式で返されることです。私のコードでは、応答をBase64
に変換する行は1行も書いていませんでした。回答を送る前に書いた唯一の行はresp.setContentType("application/json")
でした。
回答を送信する前にresp.setCharacterEncoding("UTF-8");
をservlet
に設定して後で解決しましたが、クライアント側で質問するたびにの応答のみを受信したか、またはREST client
で回答しました。でも、なぜそれが起きたのだろうと、なぜJSON
としてservlet
から返された応答がBase64
に変換されるのだろうと思いますか?
誰もこれまでにこのような経験がありますか?
私はサーバーとしてApache Tomcatを使用しています。
私のサーブレットで、Solrから受け取った応答を印刷すると、すべてJSONのみになります。 Solrの全インデックスは英語のみで構成されているので、TomcatがBase64で送信された応答に相当すると解釈しようとしていますか?ここで注目すべき点の1つは、私のサーブレット内でSolrにHTTP POST要求を出す間に、私はすでにエンコーディングをUTF-8として設定していたことです。だから私はまだUTF-8として文字エンコーディングを強制する応答を設定する必要がありますか?また、Google App Engine内で実行される同じサーブレットではこのような問題は発生せず、レスポンスはJSON形式でのみ受信されます。 –
あなたはあなた自身の質問に答えています。どのような違いがエンコーディングを引き起こしますか? Tomcatのように聞こえるので、それに焦点を当てます。 –
うーん...それをします。しかし、この問題は文字エンコーディングを設定することで解決されているので、後で考えてみることができます。この種の動作については、Tomcatのドキュメントで具体的な記述は見つかりませんでした。アプリケーションサーバーはその考慮に基づいて変更できますか? –