我们正在尝试开发网络中可用设备的拓扑图。
我有系统的详细信息,例如 IP、设备名称。
我需要做的就是将它们填充到图表上并以图形方式显示它,问题是我们需要在 JSP 中完成它。
还有其他方法吗,比如使用 Flex 进行显示,我可以传递 IP/设备名称并创建环境。顺便说一句,它不固定在多少个系统上,所以它必须是动态的。
有人可以帮忙吗?
最佳答案
首先,这不一定是 JSP 问题。获取网络设备列表不是在 JSP 文件中完成,而是在真正的 Java 类中完成。 JSP只是一种 View 技术。
回到实际问题,开始可以使用java.net.NetworkInterface用于此目的的 API。
首先创建一个Servlet,它在doGet()
方法中获取NetworkInterface
的List
,将其放入请求范围并转发对 JSP 的请求。由于 NetworkInterface
类已经符合 Javabean 规范,并具有几个有用的 getter 方法,因此我们不需要将其包装在另一个 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
)上。该 servlet 可通过 http://example.com/context/networkinterfaces
访问。
现在创建一个 JSP 文件 networkinterfaces.jsp
并将其放置在 WEB-INF
中,以防止 http://example.com/context 直接访问/networkinterfaces.jsp
(以便用户被迫使用 servlet)。使用JSTL (如果尚未完成,只需将 JAR 放入 /WEB-INF/lib
中) c:forEach标记来迭代 List
并通过 EL 访问 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 中收集的信息定位元素。
关于java - 构建网络拓扑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867812/