[問題] 請問如何抓取Server host name

看板java作者 (東刀輪一流)時間13年前 (2012/07/25 18:12), 編輯推噓11(11019)
留言30則, 8人參與, 最新討論串1/3 (看更多)
各位前輩好 小弟架了一個網站:http://localhost:8080/ 我想要抓取host name,也就是 localhost 網路上找到的指令是 InetAddress.getLocalHost().getHostName(); 可是得到的是伺服器的名字,而不是我要的 localhost 目前我只知道可以從HttpServletRequest 中的 getLocalName() 來得到我想要的值 但是我想要在request 進來前,也就是 WebProject 啟動時便得到值 請問我還有什麼方法可以得到 localhost 這個值呢? 在此先感謝各位不吝指點 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.209.67

07/25 18:27, , 1F
可以使用listener or filter. ex:ServletContextListener
07/25 18:27, 1F

07/25 18:36, , 2F
通常我會直接寫在 config / web.xml 就算了 XD
07/25 18:36, 2F

07/25 19:04, , 3F
所以我只能在listener那邊取得了嗎?
07/25 19:04, 3F

07/25 19:06, , 4F
可以在一般的class抓到嗎?
07/25 19:06, 4F

07/25 19:11, , 5F
還有我只會從ServletContext抓到contextPath,怎抓host啊
07/25 19:11, 5F

07/25 19:13, , 6F
回二樓,因為我的網站會架在不同網域,所以不想寫死在code
07/25 19:13, 6F

07/25 21:25, , 7F
就只是改設定檔,不用重新 compile
07/25 21:25, 7F

07/26 10:40, , 8F
07/26 10:40, 8F

07/26 14:34, , 9F
感謝樓上,我抓到了想要的DNS name,沒想到要繞這麼大圈
07/26 14:34, 9F

07/26 14:38, , 10F
所以只能從網卡設定那邊抓取,不能從webProject那邊抓嗎?
07/26 14:38, 10F

07/26 16:02, , 11F
感覺用這招,你還是不能在同一台機器跑兩個相同 webapp
07/26 16:02, 11F

07/26 16:02, , 12F
純粹腦補,不確定對錯 Orz
07/26 16:02, 12F

07/26 16:09, , 13F
這很有問題吧...... web本身並不會知道到底誰「將會」連進
07/26 16:09, 13F

07/26 16:11, , 14F
來,所以只能從網卡那邊抓自己的對外ip,在反查網址。
07/26 16:11, 14F

07/26 17:14, , 15F
可是我這網站是架在哪個網域,跟誰會連進來應該沒關係啊
07/26 17:14, 15F

07/26 17:16, , 16F
所以我才想說能不能從servlet那邊抓到值
07/26 17:16, 16F

07/26 17:19, , 17F
畢竟用G大的方法,如果在本機端跑,抓到的不是localhost
07/26 17:19, 17F

07/26 17:23, , 18F
而是我網卡的DNS值,雖然遠端跑沒問題,但是我本機debug
07/26 17:23, 18F

07/26 17:25, , 19F
會很麻煩...
07/26 17:25, 19F

07/26 17:38, , 20F
要看你需要這個的目的是什麼來決定?畢竟 IP 才是真的
07/26 17:38, 20F

07/26 17:40, , 21F
Hostname 是容易惡搞的,不管是改本機 host 檔還是改 http
07/26 17:40, 21F

07/26 17:41, , 22F
header
07/26 17:41, 22F

07/26 18:53, , 23F
所以你是想抓哪一個host name...DNS下的host name還是http
07/26 18:53, 23F

07/26 18:55, , 24F
server服務的host name,前者上面有後者好歹也給軟體名稱吧
07/26 18:55, 24F

07/26 18:57, , 25F
我的意思是說..... WEB不知道使用者會用哪個網域連到妳的
07/26 18:57, 25F

07/26 18:59, , 26F
電腦,力如127.0.0.1 localhost XXX.com 156.66.44.7 等等
07/26 18:59, 26F
抱歉,我事情說得不夠清楚 我想要抓一個這 Web server 所在網域的資訊作辨認,才能知道我這網站是架在哪 因為我這網站之後會同時架在不同網域上 如 http://localhost/ 就抓localhost http://www.domain.com/ 就抓 www.domain.com 因為 ip 可能會因搬遷伺服器而不一樣,但是 DNS 不太會變(註冊完就放著) 所以我想以DNS值為主,應該是Chikei前輩說的server服務的host name 以GALINE前輩的方法在DNS的資訊寫在網卡內的機器是沒問題的 因為此時DNS下的host name就等於server服務的host name 雖然在本機跑時,他抓的不是localhost,debug程式時會有些麻煩就是了... 可是我之後架站的伺服器都是向外租的,他們都是虛擬伺服器,這招就沒用了 剛剛試了才發現不行 根據LaPass前輩所說,因為我的web project 和DNS是分開的,所以理論上來說project 本身是無法得知自己所在的網域,只能從request來得知他們是以哪個網域進來的 從而反推自身網域,因此我要嘛就是抓網卡的DNS(但虛擬機器的網卡沒資訊), 不然就是只能用HttpServletRequest 中的getServerName() 或是 getLocalName()了 不知我的理解是否有所錯誤?非常謝謝各位前輩的指點 ※ 編輯: powerup 來自: 220.128.209.67 (07/27 13:15)

07/27 13:37, , 27F
你舉的 還真的有那個網站 = =
07/27 13:37, 27F

07/27 13:38, , 28F
我只是亂說的.....
07/27 13:38, 28F

07/27 20:41, , 29F
還真的有這個網站XDDD
07/27 20:41, 29F

07/27 21:19, , 30F
18+的...這裡的都是成年人吧?
07/27 21:19, 30F
保險起見,還是改掉好了,抱歉修了一下LaPass前輩的推文 ※ 編輯: powerup 來自: 220.128.209.67 (07/28 13:53)
文章代碼(AID): #1G3yQcHp (java)
文章代碼(AID): #1G3yQcHp (java)