构建网络拓扑

时间:2009-12-08 15:46:57

标签: java jsp servlets networking topology

我们正在尝试开发网络中可用设备的拓扑图。

我有系统的详细信息,例如IP,设备名称。

我需要做的就是在图表上填充它们并以图形方式显示它,问题是我们需要在JSP中完成它。

还有其他方法,比如使用Flex进行展示,我将传递IP /设备名称并创建环境。顺便说一句,它没有固定在多少系统上,所以它必须是动态的。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

首先,这不一定是JSP问题。获取网络设备列表不是在JSP文件中完成,而是在真正的Java类中完成。 JSP只是一种视图技术。

回到实际问题,首先,您可以使用java.net.NetworkInterface API。

首先创建一个Servlet,在List方法中获取NetworkInterfacedoGet(),将其放入请求范围并将请求转发给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链接/添加树结构中的节点。

然而,这将是一个耗时的过程。我确信这是一个更好的方法,但这可能让你想到选择。