2011-07-20 4 views
2

私は、ユーザとウェブページが可能であると言っていたとしても、アプレットがデータベースと直接通信するように、私の以前の挑戦を断念しました。私は、アプレットがテキストフィールドに入力された情報やチェックボックスで示された情報(文字列とブール形式)を渡すようにしようとしており、これをサーブレットに渡し、サーブレットはそれを適切にデータベースに格納します。私はアプレットのフロントエンドを持っています - GUIで構築されたサーブレットとデータベース接続も構築されています。唯一の問題は、2つのアプレットとサーブレットの間のリンクです。 Stringデータをアプレットからサーブレットにどのように渡すのですか?アプレット - サーブレットコミュニケーション

おかげで、 ジョセフG.

+0

特定のポート(通常はMySQLの場合はポート3306)の外部からデータベースにアクセスできるという条件でのみ可能です。ほとんどのWebサイトのホストはこのポートを閉じています。私はGET/POSTをサーブレットを表すURLにしようとします:http://stackoverflow.com/questions/2484119/applet-communication-using-post-method –

答えて

2

まず、アクセス権、アプレットの署名、マルタキーなどを使いこなしたい場合を除き、ポート番号を含むアプレットがダウンロードされたサーバーからのみ通信できることを確認する必要があります。これはアプレットの制限ではなく、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の外部で実装されていないので、再利用できるようになります。

+0

これはサーブレットにデータを送信する問題を解決します。サーブレットからアプレットにデータを送信する方法はありますか? – joseph

+0

'connection.getInputStream()を使用しています。 – Bozho

+0

@brindyあなたの答えは金です​​! – mkro

1

フム、私は2つの別々のJavaプロセスでアプレットおよびサーブレットの実行を推測します。その場合、いくつかのリモーティング技術を使用する必要があります。 localhostへのhttp呼び出し。実際、サーブレットは主に以下の目的で使用され、実装されています。http要求を受け入れて処理する。