現在、URL パラメーターのサイト名に基づいて、Java (標準 Jsp/サーブレット Web アプリケーション) で実行する適切なアクション (メソッド呼び出しなど) を決定します。たとえば、リクエストは、www.oursite.com?site=Ohio
URL パラメーターを指定せずにこれを実行する代わりに何ができるか疑問に思うようなものになります。
3 に答える
GETの代わりにPOSTを使用できます。
GETは、リクエスト パラメータを URL の末尾に追加します。
POSTは、フォームを使用してエンコードされたデータを送信します。
パスにコード化しないのはなぜですか?
www.oursite.com/オハイオ
ストレート サーブレット API を使用しているだけの場合は、次の性質のことを実行できます。
String path = request.getPathInfo();
String site = path.split("/")[0];
そうは言っても、ほとんどの Web フレームワークには、これを支援するためのサポートがあります。たとえば、春の mvc では次のようになります。
@RequestMapping(value="/{site}/blah/blah", method=RequestMethod.GET)
public ModelAndView blahBlah(HttpServletRequest req,
HttpServletResponse resp,
@PathVariable("site") String site) {
// do stuff here
}
もちろん、すべてのメソッドでそのようなマッピングが必要な場合は、コントローラー レベルでもこれを行うことができます。
@Controller
@RequestMapping(value="/{site}")
public class MyController {
@RequestMapping(value="/blah/blah", method=RequestMethod.GET)
public ModelAndView blahBlah(HttpServletRequest req,
HttpServletResponse resp,
@PathVariable("site") String site) {
// do stuff here
}
}
URL にはまだ表示されますが、これはクエリ パラメータよりもクリーンだと思います。他にも、apache のリバース プロキシ機能や仮想ホスト機能を使用してサイト名に基づいて切り替えるなど、より複雑な方法があります。ログイン時に何かを行い、サイトをセッションに保存できます。それはすべてあなたの要件に依存します。
ohio.oursite.com などの代替 URL を使用できます。このプロセスは、サーバーを *.oursite.com に応答させることで自動化できます。おそらく、サブドメインが何であるかを調べ、それを許可されたサイトの事前定義されたリストと比較するフィルターを設定するでしょう. 存在しない場合は、メイン (www) サイトにリダイレクトできます。もしそうなら、現在リクエストパラメーターを使用しているのと同様の方法で使用できるリクエスト属性を設定できます。