まず、アクセス権、アプレットの署名、マルタキーなどを使いこなしたい場合を除き、ポート番号を含むアプレットがダウンロードされたサーバーからのみ通信できることを確認する必要があります。これはアプレットの制限ではなく、FlashやJavaScriptにも当てはまります(ただし、JavaScriptの場合は回避するためのトリックがあります)。
アプレットで「getCodeBase()」メソッドまたは「getDocumentBase()」メソッドを使用すると、サーブレットを呼び出せるようにする新しいURLを構築するために必要なコンポーネントパーツを取得できるURLが取得されます。
したがって、サーブレットがホストされているのと同じサーバーからアプレットを提供している必要があります。
あなたのアプレットは、以下のページにある場合:
http://www.example.com/myapplet.html
...それはあなたが比較的容易に...
http://www.example.com/
で始まる任意のURLへの呼び出しを行うことができることを意味します。
次は粗末な例です。サーブレットの呼び出し方法を示しています。これは、このコードスニペットがアプレットのインスタンス内から呼び出されていることを前提としています。
public void doPost(HttpServletRequest req, HttpServletResponse res) {
BufferedReader reader = req.getReader();
String line = reader.readLine();
System.out.println("servlet received text: " + line);
}
:次に、あなたのサーブレットで、テキストは、doPostメソッドを()をオーバーライドし、要求(例外処理が示されていないとだけ入力の最初の行を読み込み)からの入力ストリームを読み取ることによって、送信されますすることができます
URL codeBase = getCodeBase();
URL servletURL = new URL(codeBase.getProtocol(), codeBase.getHost(), codeBase.getPort(), "/myServlet");
// assumes protocol is http, could be https
HttpURLConnection conn = (HttpURLConnection)servletURL.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
PrintWriter out = new PrintWriter(conn.openOutputStream());
out.println("hello world");
out.close();
System.out.println(conn.getResponseCode());
もちろん、これは1つのアプローチです。また、あなたの入力を取り、このようなクエリ文字列を構築する(URLエンコードが示されていない)でした。
String queryString = "inputa=" + view.getInputA() + "&inputb=" + view.getInputB();
をし、あなたのURLにそれを追加します。ただし
URL servletURL = new URL(codeBase.getProtocol(), codeBase.getHost(), codeBase.getPort(), "/myServlet?" + queryString);
、それが構築することはかなり一般的なようですこれらの日の代わりに何らかの文字列とサーブレットにストリームします。
推奨フォーマットは、半構造化されているのでJSONですが、読みやすく、アプレットとサーブレットで動作するはずのシリアライザがたくさんあります。つまり、アプレットとサーブレットの間で共有できるデータ用の素敵なオブジェクトモデルを持つことができます。複雑な入力のクエリ文字列を構築することは、マインドベンダーになる可能性があります。
同様に、Java直列化とストリームバイナリをサーブレットに実際に使用すると、Java直列化を使用して適切なJavaオブジェクトを作成できます。しかし、JSONのようなものに固執すれば、サーブレットはJavaシリアル化が決してJavaの外部で実装されていないので、再利用できるようになります。
特定のポート(通常はMySQLの場合はポート3306)の外部からデータベースにアクセスできるという条件でのみ可能です。ほとんどのWebサイトのホストはこのポートを閉じています。私はGET/POSTをサーブレットを表すURLにしようとします:http://stackoverflow.com/questions/2484119/applet-communication-using-post-method –