我有一个网络应用程序。无论何时部署,都会启动servlet。一旦servlet启动,它必须将自己注册为外部服务的回调URL以获取一些通知。注册回调可能只是对请求体中具有回调URL的外部服务的简单POST请求。
我搜索了很多但是找不到任何关于如何在servlet中构造回调url的方法。
例如
如果应用程序部署为 protocol:// ABCD:XXXX 且servlet路径为 / myservlet ,则回调URL将变为 protocol:// ABCD:XXXX / myservlet < / strong>
我不确定如何在servlet代码中获取 IPaddress (A.B.C.D)和端口号(XXXX)。有人可以帮忙吗?
请注意,它应该在servlet启动后立即完成,可能在init()中,因此我没有HTTPServletRequest对象来获取此信息。
答案 0 :(得分:1)
除非正在进行请求,否则无法通过Servlet API获取您要查找的信息。单个容器可能具有容器特定的API,使您可以执行此操作,但您生产的内容将无法移植。
答案 1 :(得分:-1)
要获取服务器IP,您可以使用:
public String getServerIpAdd()
{
String ipAddr = "";
try
{
InetAddress inetAddr = InetAddress.getLocalHost();
byte[] addr = inetAddr.getAddress();
// Convert to dot representation
for (int i = 0; i < addr.length; i++) {
if (i > 0) {
ipAddr += ".";
}
ipAddr += addr[i] & 0xFF;
}
} catch (UnknownHostException e) {
System.out.println("Host not found: " + e.getMessage());
}
return ipAddr;
}
要获取servlet名称,可以在servlet上使用getServletName()
。
基于this主题,您可以执行此操作以获取服务器端口:
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host Name = " + request.getServerName());
System.out.println("Port Number = " + request.getServerPort());
}
答案 2 :(得分:-1)
我相信servlet url映射始终是固定的!因为你已经在web.xml中发布了
如果它没有修复,你可以从类路径中读取web.xml并获取它。
[这里是如何阅读XML]在java
中然后您可以使用@ ColdHack的答案来获取服务器IP。
现在您拥有IP和servlet名称,您可以构造URL并将其POST到外部服务。
你可以在上下文监听器中完成所有这些操作,每次启动时都会这样做,它会自行注册。