我们正在尝试开发网络中可用设备的拓扑图。
我有系统的详细信息,例如IP,设备名称。
我需要做的就是在图表上填充它们并以图形方式显示它,问题是我们需要在JSP中完成它。
还有其他方法,比如使用Flex进行展示,我将传递IP /设备名称并创建环境。顺便说一句,它没有固定在多少系统上,所以它必须是动态的。
有人可以帮忙吗?
答案 0 :(得分:2)
首先,这不一定是JSP问题。获取网络设备列表不是在JSP文件中完成,而是在真正的Java类中完成。 JSP只是一种视图技术。
回到实际问题,首先,您可以使用java.net.NetworkInterface API。
首先创建一个Servlet,在List
方法中获取NetworkInterface
个doGet()
,将其放入请求范围并将请求转发给JSP。由于NetworkInterface
类已经使用几个有用的getter方法符合Javabean规范,因此我们不需要将它包装在另一个Javabean类中,只需重用它即可。
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
。可以通过http://example.com/context/networkinterfaces
访问此servlet。
现在创建一个JSP文件networkinterfaces.jsp
,放在WEB-INF
中以防止http://example.com/context/networkinterfaces.jsp
直接访问(以便用户被迫使用servlet)。使用JSTL(只需将JAR放入/WEB-INF/lib
(如果尚未完成)c:forEach标记来迭代List
并通过EL访问获取者。
<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中收集的信息定位元素。
答案 1 :(得分:0)
如果您想要一个合理的最新(尽管非常慢)选项,您可以启动一系列tracert实例,获取输出并解析IP跃点?然后,您可以使用结果来使用图形API链接/添加树结构中的节点。
然而,这将是一个耗时的过程。我确信这是一个更好的方法,但这可能让你想到选择。