2009-10-27 33 views
28

Tôi muốn lấy url gốc của ứng dụng web của tôi từ một trong các servlet.Gốc URl của servlet

Nếu tôi triển khai ứng dụng của mình trong "www.mydomain.com", tôi muốn nhận url gốc như "http://www.mydomain.com".

Cùng một điều nếu tôi triển khai nó trong máy chủ tomcat địa phương với cổng 8080 nó sẽ cho http://localhost:8080/myapp

bất cứ ai có thể cho tôi biết làm thế nào để có được URL gốc của ứng dụng web của tôi từ servlet?

public class MyServlet extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String rootURL=""; 
     //Code to get the URL where this servlet is deployed 

    } 
} 
+0

Chuỗi rootUrl = request.getRequestURL() toString() thay thế (request.getRequestURI(), "");.. – Sllouyssgort

+0

@Sllouyssgort không hoạt động vì 'getRequestURI()' bao gồm 'myapp' – Black

Trả lời

36

Bạn nhận ra rằng máy khách URL thấy (và/hoặc nhập vào trình duyệt của mình) và URL được cung cấp bởi vùng chứa servlet của bạn được triển khai có thể rất khác nhau?

Để có được sau này, tuy nhiên, bạn có một vài phương pháp có sẵn trên HttpServletRequest:

  • Bạn có thể gọi getScheme(), getServerName(), getServerPort()getContextPath() và kết hợp chúng sử dụng dải phân cách thích hợp
  • HOẶC bạn có thể gọi getRequestURL() và xóa getServletPath()getPathInfo() khỏi nó.
+0

Tôi tin rằng' myapp' là một tên/đường dẫn servlet, trong ví dụ của OP. Điều gì nói bạn? –

+0

"myapp" là một đường dẫn ngữ cảnh – ChssPly76

2
  1. Viết tập lệnh trong tệp chào mừng để nắm bắt đường dẫn gốc. Tôi cho rằng index.jsp là tệp mặc định. Vì vậy, đặt đoạn mã sau ở chỗ

    <% RootContextUtil rootCtx = RootContextUtil.getInstance(); if(rootCtx.getRootURL()==null){ String url = request.getRequestURL().toString(); String uri = request.getRequestURI(); String root = url.substring(0, url.indexOf(uri)); rootCtx.setRootURL(root); } %>

  2. Sử dụng biến này bất cứ nơi nào cần thiết bên trong ứng dụng trực tiếp bằng cách gọi giá trị như

String rootUrl = RootContextUtil.getInstance().getRootURL();

LƯU Ý: Không cần phải lo lắng về giao thức/cổng/v.v. Hy vọng điều này sẽ giúp mọi người

11

Chức năng này giúp bạn để có được URL cơ sở của bạn từ một HttpServletRequest:

public static String getBaseUrl(HttpServletRequest request) { 
    String scheme = request.getScheme() + "://"; 
    String serverName = request.getServerName(); 
    String serverPort = (request.getServerPort() == 80) ? "" : ":" + request.getServerPort(); 
    String contextPath = request.getContextPath(); 
    return scheme + serverName + serverPort + contextPath; 
    } 
Các vấn đề liên quan