前提・実現したいこと
3つのサーバA(クライアント),B(APサーバ),C(対向システム)があり、A⇒CへのHTTP通信を実現したい。
・A⇒B,B⇒Cへの通信はできるがA⇒Cへの直接の通信はできない。
・クライアント側からはA⇒Cへ通信したように見せたい。
解決方針:Bにプロキシとしての役割を持つServletを用意し、中継させる。
そのServlet内で、request.getURL()を用いて取得したURLを生成しHTTP通信を行う。
発生している問題・エラーメッセージ
http://(host):(port)/[ディレクトリ名]/context/path
上記の/[ディレクトリ名]を、BとCで同じにしないと通信ができない。
Bの[ディレクトリ名]とCの[ディレクトリ名]を別にしてプロキシ通信する方法を知りたい。(可不可含め)
例えば、BのServletをAP.warにデプロイしつつ、Cにはhttp://hostNameC:8090/Test/testのURLでアクセスするなど。
該当のソースコード
A:Client(URL設定箇所のみ抜粋)
URL url = new URL("http://hostNameC:8090/Test/test");
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("hostNameB", 8080));
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
B:Servlet(port番号8080)
service(HttpServletRequest req,HttpServletResponse res){
(URL設定箇所抜粋)
URL url = new URL(req.getURL().toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
(以下略)
}
Cが受けるURL
http://hostNameC:8090/Test/test
試したこと
A(クライアント側),B(サーブレット側)それぞれの受けるディレクトリ名を変えて実験。
⇒404エラーが発生
補足情報(FW/ツールのバージョンなど)
Java8を使ってます。
当方Servletには詳しくなく、理解不十分で質問することご理解ください。
あなたの回答
tips
プレビュー