我们正在尝试开发网络中可用设备的拓扑图。
我有系统的详细信息,例如 IP、设备名称。
我需要做的就是在图表上填充它们并以图形方式显示,问题是我们需要在 JSP 中完成。
有没有另一种方式,比如使用 Flex 显示,我会传递 IP/设备名称并创建环境。顺便说一句,它没有固定多少系统,所以它必须是动态的。
有人可以帮忙吗?
我们正在尝试开发网络中可用设备的拓扑图。
我有系统的详细信息,例如 IP、设备名称。
我需要做的就是在图表上填充它们并以图形方式显示,问题是我们需要在 JSP 中完成。
有没有另一种方式,比如使用 Flex 显示,我会传递 IP/设备名称并创建环境。顺便说一句,它没有固定多少系统,所以它必须是动态的。
有人可以帮忙吗?
首先,这不一定是 JSP 问题。获取网络设备列表不是在 JSP 文件中完成,而是在真正的 Java 类中完成。JSP 只是一种视图技术。
回到实际的问题,首先你可以使用java.net.NetworkInterface API。
首先创建一个Servlet,在方法中获取一个List
of ,放到请求范围内,将请求转发给一个JSP。由于类已经通过几个有用的 getter 方法符合 Javabean 规范,我们不需要将它包装在另一个 Javabean 类中,只需重用它即可。NetworkInterface
doGet()
NetworkInterface
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
List<NetworkInterface> networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
request.setAttribute("networkInterfaces", networkInterfaces);
} catch (SocketException e) {
throw new ServletException("Cannot obtain networkinterfaces.", e);
}
request.getRequestDispatcher("/WEB-INF/networkinterfaces.jsp").forward(request, response);
}
将此 servlet 映射web.xml
到url-pattern
例如/networkinterfaces
. 这个 servlet 可以通过http://example.com/context/networkinterfaces
.
现在创建一个networkinterfaces.jsp
您放置的 JSP 文件,WEB-INF
以防止被直接访问http://example.com/context/networkinterfaces.jsp
(这样用户被迫使用 servlet)。使用JSTL/WEB-INF/lib
(如果还没有完成,只需放入 JAR ) c:forEach标记迭代并通过ELList
访问 getter 。
<c:forEach items="${networkInterfaces}" var="networkInterface">
Name: ${networkInterface.name}<br>
Display name: ${networkInterface.displayName}<br>
MTU: ${networkInterface.MTU}<br>
<c:forEach items="${networkInterface.interfaceAddresses}" var="interfaceAddress" varStatus="loop">
IP address #${loop.index + 1}: ${interfaceAddress.address}<br>
</c:forEach>
<hr>
</c:forEach>
应该是这样的。
编辑使其“视觉呈现”,使用 Java 2D API 生成图像或使用 HTML/CSS 根据 servlet 中收集的信息定位元素。
如果您想要一个合理的最新(尽管速度非常慢)选项,您可以启动一系列 tracert 实例,获取输出并解析 IP 跃点?然后,您可以使用图形 API 使用结果链接/添加树结构中的节点。
然而,这将是一个耗时的过程。我相信有更好的方法,但这可能会让你想到选择。