2009-10-27 14 views
28

Desidero ottenere l'URL radice della mia applicazione Web da uno dei servlet.Root URl del servlet

Se distribuisco la mia applicazione in "www.miodominio.com", desidero ottenere l'url di root come "http://www.mydomain.com".

Stessa cosa se schiero nel server Tomcat locale con 8080 porta dovrebbe dare http://localhost:8080/myapp

Qualcuno può dirmi come ottenere l'URL radice della mia applicazione web da 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

String = RootURL request.getRequestURL() toString() sostituire (request.getRequestURI(), "");.. – Sllouyssgort

+0

@Sllouyssgort non funziona perché 'getRequestURI()' include 'myapp' – Black

risposta

36

Ti rendi conto che il cliente vede URL (e/o tipi nella sua browser) e l'URL servito dal contenitore il vostro servlet viene distribuito in può essere molto diverso?

Al fine di ottenere questi ultimi, però, avete un paio di metodi disponibili su HttpServletRequest:

  • È possibile chiamare getScheme(), getServerName(), getServerPort() e getContextPath() e di combinarle con separatori appropriate
  • oppure si possibile chiamare getRequestURL() e rimuovere getServletPath() e getPathInfo() da esso.
+0

Credo che' myapp' sia un nome/percorso servlet, nell'esempio di OP. Che cosa dici? –

+0

"myapp" è un percorso di contesto – ChssPly76

2
  1. Scrivere uno scriptlet nel file di benvenuto per acquisire il percorso radice. Presumo index.jsp è il file predefinito. Quindi inserire il seguente codice in quel

    <% 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. Usare questa variabile ovunque necessaria all'interno dell'applicazione direttamente chiamando il valore come

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

NOTA: Non c'è bisogno di preoccuparsi su protocolli/porte/ecc. Spero che questo aiuti tutti

11

Questa funzione aiuta ad ottenere il vostro URL di base da un 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; 
    } 
Problemi correlati