java servlet 获取url_关于Java:在Servlet中获取当前应用程序URL

我有一个Web应用程序。 无论何时部署,都会启动一个servlet。 servlet一旦启动,就必须将其自身注册为外部服务的回调URL,以获取一些通知。 注册回调可能只是对外部服务的简单POST请求,请求正文中包含回调URL。

我进行了大量搜索,但找不到有关如何在servlet中构造回调URL的任何方法。

例如 如果将应用程序部署为protocol://A.B.C.D:XXXX,并且servlet路径为/ myservlet,则回调网址将变为protocol://A.B.C.D:XXXX / myservlet

我不确定如何在Servlet代码中获取IP地址(A.B.C.D)和端口号(XXXX)。 有人可以帮忙吗?

请注意,应该在servlet启动后尽快在init()中完成此操作,因此我没有HTTPServletRequest对象来获取此信息。

Servlet通常无法(而且可能不应该)知道其运行的主机。 IMO,您将需要一些外部配置。

没有请求,您如何获得该请求的URL? 正如Sotirios所说,没有办法。

注意,如果您希望在容器启动后立即运行代码,则应使用ServletContextListner,而不是Servlet的init方法。 仅当实例化servlet时才调用该init。 更多信息stackoverflow.com/questions/13819773/

即使这样,我如何获得部署应用程序的机器地址和端口?

除非正在处理请求,否则无法通过Servlet API获得所需的信息。各个容器可能具有特定于容器的API,使您能够执行此操作,但是您生产的任何产品都无法移植。

我相信servlet网址映射始终是固定的!因为您已经将其发布在web.xml中

如果它不是固定的,则可以从类路径中读取web.xml并获取它。

Java中的[这里是读取XML的方法]

之后,您可以使用@ColdHack的答案获取服务器IP。

现在您有了IP和servlet名称,您可以构造URL并将其发布到外部服务。

您可以在上下文侦听器中完成所有这些操作,这样每次启动时,它都会注册自己。

它更像是一种拙劣的方式,然后是一个直接的解决方案

要获取服务器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()。

基于此主题,您可以执行以下操作来获取服务器端口:

public void doGet(ServletRequest request, ServletResponse response) {

System.out.println("Host Name =" + request.getServerName());

System.out.println("Port Number =" + request.getServerPort());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的Date和SimpleDateFormat类来获取网络时间并在JSP网页显示。具体步骤如下: 1. 在Java使用URLConnection类打开一个连接到网络时间服务器,例如:time.windows.com。 2. 从URLConnection对象获取输入流并读取服务器返回的时间数据。 3. 使用Date类将时间数据转换为日期对象。 4. 使用SimpleDateFormat类将日期格式化为你所需的字符串格式。 5. 将格式化后的时间字符串传递给JSP页面,并在页面显示。 以下是示例代码: Java代码: ``` import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.text.SimpleDateFormat; import java.util.Date; public class NetworkTime { public static void main(String[] args) { try { // 打开网络连接 URL url = new URL("http://time.windows.com"); URLConnection conn = url.openConnection(); conn.connect(); // 读取服务器返回的时间数据 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String timeString = in.readLine(); in.close(); // 转换为日期对象 Date date = new Date(Long.parseLong(timeString) * 1000); // 格式化日期为字符串 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedTime = sdf.format(date); // 输出结果 System.out.println(formattedTime); } catch (Exception e) { e.printStackTrace(); } } } ``` 在JSP页面使用以下代码来显示网络时间: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Network Time</title> </head> <body> <h1>Network Time</h1> <p>The current network time is: <%= request.getAttribute("networkTime") %></p> </body> </html> ``` 在Servlet使用以下代码来将网络时间传递给JSP页面: ``` import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/NetworkTimeServlet") public class NetworkTimeServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { // 打开网络连接 URL url = new URL("http://time.windows.com"); URLConnection conn = url.openConnection(); conn.connect(); // 读取服务器返回的时间数据 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String timeString = in.readLine(); in.close(); // 转换为日期对象 Date date = new Date(Long.parseLong(timeString) * 1000); // 格式化日期为字符串 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedTime = sdf.format(date); // 将结果传递给JSP页面 request.setAttribute("networkTime", formattedTime); request.getRequestDispatcher("networkTime.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); } } } ``` 当你访问NetworkTimeServlet时,它将从网络时间服务器获取时间并将结果传递给networkTime.jsp页面进行显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值