2010-04-07 9 views
37

Pensavo che ServletContext potesse fornire un metodo. Il metodo getAttribute() di ServletContext fornisce qualsiasi aiuto, ad esempio, esiste un nome di attributo (forse "host", "porta") che sarà di aiuto.Come posso ottenere un nome host (con porta) che sia un servlet a

La ragione di ciò è che voglio che la mia applicazione venga eseguita ovunque sia distribuita e, a un certo punto, devo consentire a un utente di fare clic su un collegamento che punta a una posizione sul file server. Quindi ho bisogno di fare riferimento per l'host e la porta e non posso usare un riferimento interno.

risposta

51
ServletRequest.getServerName(...) 
ServletRequest.getServerPort(...) 
+0

Questo non funziona più. Sto ancora scoprendo come farlo ora. –

14

L'oggetto ServletRequest che è stata passata al vostro doGet, o il metodo doPost ha getServerName e getServerPort metodi che forniscono queste informazioni.

esempio

public void doGet(ServletRequest request, ServletResponse response) { 
    System.out.println("Host = " + request.getServerName()); 
    System.out.println("Port = " + request.getServerPort()); 
} 
+1

Per ottenere un url: 'request.getServerName() +": "+ request.getServerPort();' –

3

ho trovato nel mio vecchio progetto della stringa:

request.getHeader("host").contains("xxx")

forse è la soluzione?

2

Come già menzionato in precedenza, l'host e la porta possono essere richiamati tramite richiesta. D'altra parte, è impossibile per ServletContext fornire le informazioni poiché le applicazioni java non sono a conoscenza del proprio ambiente host. Ad esempio, un'applicazione con percorso di contesto "foo" (che potrebbe essere recuperata da ServletContext # getContextPath()) potrebbe ricevere richieste sia da una porta HTTP 8080 sia da una porta https 8043. Riferimento: https://web.archive.org/web/20120401225136/http://www.java.net:80/node/701934

+0

FYI, il link non funziona più – Stormcloud

2

@Everyone ha una buona risposta . Ma prendendo lo schema, il nome del server e la porta, quindi unendoli. C'è un modo più semplice:

È possibile utilizzare HttpServletRequest.getRequestURL e HttpServletRequest.getRequestURI.

StringBuffer url = request.getRequestURL(); 
String uri = request.getRequestURI(); 
String host = url.substring(0, url.indexOf(uri)); //result 
Problemi correlati