作者powerup (东刀轮一流)
看板java
标题[问题] 请问如何抓取Server host name
时间Wed Jul 25 18:12:52 2012
各位前辈好
小弟架了一个网站:
http://localhost:8080/
我想要抓取host name,也就是 localhost
网路上找到的指令是 InetAddress.getLocalHost().getHostName();
可是得到的是伺服器的名字,而不是我要的 localhost
目前我只知道可以从HttpServletRequest 中的 getLocalName() 来得到我想要的值
但是我想要在request 进来前,也就是 WebProject 启动时便得到值
请问我还有什麽方法可以得到 localhost 这个值呢?
在此先感谢各位不吝指点
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.128.209.67
1F:→ stukk:可以使用listener or filter. ex:ServletContextListener 07/25 18:27
2F:推 PsMonkey:通常我会直接写在 config / web.xml 就算了 XD 07/25 18:36
3F:→ powerup:所以我只能在listener那边取得了吗? 07/25 19:04
4F:→ powerup:可以在一般的class抓到吗? 07/25 19:06
5F:→ powerup:还有我只会从ServletContext抓到contextPath,怎抓host啊 07/25 19:11
6F:→ powerup:回二楼,因为我的网站会架在不同网域,所以不想写死在code 07/25 19:13
7F:推 PsMonkey:就只是改设定档,不用重新 compile 07/25 21:25
9F:→ powerup:感谢楼上,我抓到了想要的DNS name,没想到要绕这麽大圈 07/26 14:34
10F:→ powerup:所以只能从网卡设定那边抓取,不能从webProject那边抓吗? 07/26 14:38
11F:推 PsMonkey:感觉用这招,你还是不能在同一台机器跑两个相同 webapp 07/26 16:02
12F:→ PsMonkey:纯粹脑补,不确定对错 Orz 07/26 16:02
13F:推 LaPass:这很有问题吧...... web本身并不会知道到底谁「将会」连进 07/26 16:09
14F:→ LaPass:来,所以只能从网卡那边抓自己的对外ip,在反查网址。 07/26 16:11
15F:→ powerup:可是我这网站是架在哪个网域,跟谁会连进来应该没关系啊 07/26 17:14
16F:→ powerup:所以我才想说能不能从servlet那边抓到值 07/26 17:16
17F:→ powerup:毕竟用G大的方法,如果在本机端跑,抓到的不是localhost 07/26 17:19
18F:→ powerup:而是我网卡的DNS值,虽然远端跑没问题,但是我本机debug 07/26 17:23
19F:→ powerup:会很麻烦... 07/26 17:25
20F:推 GALINE:要看你需要这个的目的是什麽来决定?毕竟 IP 才是真的 07/26 17:38
21F:→ GALINE:Hostname 是容易恶搞的,不管是改本机 host 档还是改 http 07/26 17:40
22F:→ GALINE:header 07/26 17:41
23F:推 Chikei:所以你是想抓哪一个host name...DNS下的host name还是http 07/26 18:53
24F:→ Chikei:server服务的host name,前者上面有後者好歹也给软体名称吧 07/26 18:55
25F:推 LaPass:我的意思是说..... WEB不知道使用者会用哪个网域连到你的 07/26 18:57
26F:→ LaPass:电脑,力如127.0.0.1 localhost XXX.com 156.66.44.7 等等 07/26 18:59
抱歉,我事情说得不够清楚
我想要抓一个这 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)
27F:推 LaPass:你举的 还真的有那个网站 = = 07/27 13:37
28F:→ powerup:我只是乱说的..... 07/27 13:38
29F:推 givemepass:还真的有这个网站XDDD 07/27 20:41
30F:推 if4:18+的...这里的都是成年人吧? 07/27 21:19
保险起见,还是改掉好了,抱歉修了一下LaPass前辈的推文
※ 编辑: powerup 来自: 220.128.209.67 (07/28 13:53)