0

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

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

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

有没有另一种方式,比如使用 Flex 显示,我会传递 IP/设备名称并创建环境。顺便说一句,它没有固定多少系统,所以它必须是动态的。

有人可以帮忙吗?

4

2 回答 2

2

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

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

首先创建一个Servlet,在方法中获取一个Listof ,放到请求范围内,将请求转发给一个JSP。由于类已经通过几个有用的 getter 方法符合 Javabean 规范,我们不需要将它包装在另一个 Javabean 类中,只需重用它即可。NetworkInterfacedoGet()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.xmlurl-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 中收集的信息定位元素。

于 2009-12-08T17:08:54.840 回答
0

如果您想要一个合理的最新(尽管速度非常慢)选项,您可以启动一系列 tracert 实例,获取输出并解析 IP 跃点?然后,您可以使用图形 API 使用结果链接/添加树结构中的节点。

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

于 2009-12-08T15:58:36.080 回答