2012-12-30 55 views
0

我需要以下服務器端重定向或在Tomcat服務器上轉發:url http://portal.customer_name需要重命名/重定向到http://portal.customer_name/customer_name。簡而言之,沒有上下文路徑的url將被重定向到具有上下文路徑的相同url。 我設法用過濾器做到這一點,使用request.getRequestDispatcher()。forward(request,response);但同樣的東西似乎並不適用於閥門。tomcat正向閥

我走到這一步,下面:

public void invoke(Request request, Response response) throws IOException, ServletException { 
    String context = getForwardpath(request); 
    request.getRequestDispatcher(context).forward(request, response); 
    this.getNext().invoke(request, response); 
} 

private String getForwardpath(Request rq){ 
    String context = rq.getServletContext().getContextPath(); 
    /.../ 
    return context; 
} 

我部署了一些小服務程序,這似乎收到原始地址而不是重定向。有沒有可能像這樣做一個服務器端重定向。請注意,我需要一個閥門,而不是過濾器。

回答

0

在發佈之前,您是否發生過search for this?谷歌提出了一個blog post,討論這個話題與Tomcat,幷包括一個這樣的閥門的實施,以及一個JBoss implementation。所以我會說,「是的,這絕對有可能。」如果其中一個不適合您的需求,您當然可以至少使用他們的源代碼來引導您朝着正確的方向發展,如果遇到麻煩,則可以回到更具體的問題。

更新:在使用該術語時,沒有像「服務器端重定向」那樣的東西。重定向意味着將3xx系列響應代碼發送回用戶代理,告訴它關於它請求的資源的一些信息。話雖如此,我自己也沒有做過任何Valve開發,但從description of Valve.invoke(),我猜如果你只是把Valve的高度放在Tomcat配置中,那麼你可以修改請求URI的方式,讓它被正常處理。

+0

我發現博客帖子,而是因爲它創造了客戶方的重定向和我需要服務器端重定向無法使用的代碼。我沒有意識到我可以檢查出jBoss的實現,謝謝。 – Berend

+0

更新了我的答案。 –

+0

我意識到'正確'的短語應該是'轉發'的請求,我不得不使用getrequestDispatcher.forward()爲我的閥門以我想要的方式工作,更新我的問題。 – Berend