2012-10-06 70 views
0

現在基於URL參數中的站點名稱,我們決定在Java(標準Jsp/Servlet Web應用程序)中採取的適當操作(方法調用等)。例如,該請求可能類似於www.oursite.com?site=Ohio 想知道如何做到這一點,而不必提供URL參數。用於決定調用哪種方法的URL參數的替代

回答

1

爲什麼不只是它的代碼插入到路徑?

www.oursite.com/Ohio

如果你只是使用直Servlet API的,你可以做這種性質的東西:

String path = request.getPathInfo(); 
String site = path.split("/")[0]; 

話雖這麼說,大多數web框架有一些支持這一點。 例如,Spring 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 
    } 
} 

我相信這是比一個更清潔查詢參數,儘管它仍然顯示在您的網址中。還有其他更復雜的方法,例如使用apache的反向代理和虛擬主機功能根據站點名稱進行切換。您可以在登錄時進行一些操作,並將該網站存儲在會話中。這完全取決於你的要求。

4

您可以使用POST而不是GET

GET將請求參數附加到URL的末尾。

POST使用表格發送編碼數據。

+1

好的答案,可怕的網站引用。 – EJP

+0

是的......幾乎添加了一個像這樣的評論:「這是一個可怕的糟糕鏈接。」至少它很簡單,重要。 – jahroy

+1

借用EJP的評論。根據我的經驗,RoseIndia答案通常寫得不好,技術上也不準確。這個沒什麼不同。 (非常適合複製粘貼的程序員,雖然...) –

1

您可以使用其他網址,例如ohio.oursite.com。這個過程可以通過讓你的服務器響應* .oursite.com來自動完成。我可能會設置一個過濾器來查看子域名是什麼,並將其與允許的站點的預定義列表進行比較。如果它不存在,您可以重定向到主(www)網站。如果是這樣,您可以設置一個請求屬性,您可以使用與您當前使用請求參數類似的方式。

相關問題