我必须为一个web应用程序(基于java、tomcat、jsp、oracledb)制作导航菜单,一旦用户登录,它就会出现在所有内容中。关键是,几乎每个连接的人都有不同的权限,所以每个人都会看到不同的导航菜单。这是我第一次开发web,所以我不太了解如何从客户端到服务器进行通信,反之亦然,因此也不太了解最好做什么,但我的一些考虑因素有其优缺点。
- 制作一个过滤器来加载每个请求中的菜单。这会查询数据库,这对它来说很痛苦,因为在少数情况下,情况会发生变化(或者至少不会经常发生变化);但是,当发生更改时,它会立即加载
- 制作一个iframe来加载一次菜单,并从这个菜单中控制第二个ifame(我认为这是最不鼓励的,但仍然是一个选项,它的优点是每次单击某个东西时不会向服务器发出相同的请求)。当发生更改时,重新加载将加载新数据
- 使菜单在会话中保持为对象。这将在用户登录后查询数据库。更改将在每个连接中加载(或通过单击按钮重新加载)。但这种方法会把东西放在服务器内存中,我认为这是一个更糟糕的想法。(不确定我在这里说什么,我错了吗?)
正如我所说,我对此太陌生了,所以我不知道我能做什么。据我所知,我不能向客户端写一个文件(例如xml),所以它是菜单的数据源,并每天删除它。我可以在服务器中写一个包含数据的文件,这样我就不需要从数据库中查询(但这仍然是对服务器的请求),但这会带来其他问题,数据的更改不会被刷新(当然,除非我对它做了一些需要更多时间和更多东西来维护的事情),我不知道这是否会比访问数据库更快。
这些东西是如何最好地实现的?考虑一下开发成本、维护成本、性能(每次点击都会减少对相同信息的请求)、用户感知滞后以及我在这方面的成熟度还没有看到的其他方面。关于网页设计的书有什么建议吗?
编辑:我计划使用jsTree进行可视化,并制作菜单子级别以加载ajax请求。
我会忘记第二个选项,而选择最简单的无状态选项:第一个。数据库很快!
如果这似乎花费了太多时间或给数据库带来了太多负载(但我对此表示怀疑:加载用户的provisiones应该非常快),您可以选择第三种选项。当然,它会在会话中存储菜单(或仅存储特权),但如果需要,会话也可以写入磁盘或数据库。
不要预先优化。