2013-10-17 18 views
5

Tôi có hai cuộc chiến tranh tĩnh chứa đầy các tệp trợ giúp được phục vụ bởi một máy chủ Jetty và một cuộc chiến tranh ngữ cảnh gốc.Ứng dụng web chuyển tiếp tới một ứng dụng web khác như thế nào?

  • help.war - giúp English file
  • help_CS.war - giúp đỡ Séc file
  • ROOT.war

    Dựa trên những miền địa phương được yêu cầu, tôi muốn để chuyển hướng người dùng sang ngôn ngữ có liên quan đến họ. tức là yêu cầu của người dùng /help/index.htm và như họ đang yêu cầu từ một ngôn ngữ Séc, họ nhận được /help_CS/index.htm. Ý tưởng là các gói ngôn ngữ có thể được thêm vào theo yêu cầu mà không quá nhiều phiền toái.

    I tried thêm một tùy chỉnh RewriteHandler, được nêu trong Jetty.xml mà grabs miền địa phương từ Request và một trong hai tiền đạo hoặc chuyển hướng trên xử lý(). Cả hai đều phàn nàn vì mã phản hồi đã được gửi vào thời điểm này ... bằng cách nào đó ?!

    Tôi đã thử một tuỳ chỉnh Filter trong tệp web.xml của ROOT.war mà tôi không thể kết hợp */help/** bất kể biến thể của mẫu số url tôi đã thử là gì.

    sau đó tôi đã thêm một tham chiếu đến cùng Filter là nỗ lực cuối cùng vào WEB-INF/web.xml để help.war tôi mà sẽ phù hợp và URL có thể được tạo ra nhưng tôi không thể viết lại URL ở đây vì nó luôn được thêm vào trước bởi /help/ để URL được trợ giúp được thay thế bằng help_CS kết thúc là tên miền/trợ giúp/help_CS/index.htm.

    Vì vậy, câu hỏi của tôi. Làm thế nào nên/điều này có thể được thực hiện?

+2

Sử dụng javascript cho nó. if (isCS) {window.location.href = tên máy chủ/help_CS}, trong đó biến boolean isCS. –

+0

Kế hoạch tốt nhưng tôi không thể. Các tệp trợ giúp được tạo động bởi một số phần mềm của bên thứ ba cho phép tùy chỉnh rất ít. Điều đó có nghĩa là nếu một ngày nào đó chúng ta có năm mươi ngôn ngữ thì JavaScript sẽ cần phải được nhập tay cho 50 * n (n là số lượng ngôn ngữ) mỗi lần trợ giúp được tạo ra. –

+1

Bạn nói đúng.Lưu trữ các tệp trợ giúp của bạn trong các thư mục con trong ứng dụng web chính. Tôi nghĩ đó là cách cứng nhắc. –

Trả lời

1

Vì vậy! Sau một vài ngày rối tung xung quanh với điều này tôi đã tìm thấy something mà cảm thấy một chút hacky nhưng nó hoạt động.

tôi sử dụng tùy chỉnh của tôi Filter sau đó đặt nó trong WEB_INF/web.xml cho mỗi help_XX.war với một cá nhân servlet-mapping (nhưng mặt khác giống hệt nhau) cho mỗi tập tin chiến tranh như vậy

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/help_CS</url-pattern> 
</servlet-mapping> 

Sau đó bên trong Filter tôi nhận được ServletContext của cuộc chiến tranh yêu cầu và chuyển tiếp sử dụng đó, bằng tay loại bỏ /help từ địa chỉ yêu cầu như vậy

@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
           throws IOException, ServletException 
    { 
    HttpServletRequest request = (HttpServletRequest) req; 
    String requestAddress = request.getRequestURI(); 
    String country_code = req.getLocale().getCountry(); 

    if (requestAddress.contains("/help/")) 
    { 
     ServletContext forwardContext = config.getServletContext().getContext("/help_" + country_code); 

     forwardContext.getRequestDispatcher(requestAddress.replace("/help", "")).forward(req, res); 
    } 
    else 
    { 
     chain.doFilter(req, res); 
    } 
    } 
Các vấn đề liên quan