首先我要说的是我对Java网络应用程序全新,所以如果这是一个非常基本的问题,我很抱歉。
我正在编写一个能够让用户登录帐户的应用。每个页面的顶部都包含一个信息栏(有点像GMail中的顶栏),类似于:
Logged in as <userid> | Settings | Help
由于该部分将出现在每个页面上,因此将该功能拆分出来是合理的,因此我不会复制我的代码。
我做了一些搜索,发现我可以使用它:
<jsp:include page="userInfoBar.jsp" flush="true" />
在另一个JSP的中间。我的userSettings.jsp页面遇到了问题,这也从数据库中获取了一些User详细信息。我不仅在两个JSP之间复制了一些代码,而且我感觉我在网页渲染过程中做了两倍的工作。
例如(伪代码):
userInfoBar.jsp:
user = getCurrentUser
if ( user ) {
print Logged in as user.userid | Settings | Help
}
userSettings.jsp:
<jsp:include page="userInfoBar.jsp" flush="true" />
user = getCurrentUser
Change settings for user.userid
所以在这个小例子中,getCurrentUser会被调用两次(我想,除非Java以某种方式对其进行优化)。
如何避免这种重复工作,但仍然将userInfoBar与每个JSP分开?
提前致谢!
布赖恩
答案 0 :(得分:3)
问题是你的JSP中有java代码。当你这样做时,大多数邪恶的事情发生。你应该在谷歌上查找MVC模式。
无论如何,执行此操作的好方法是使用MVC模式,并在控制器中完成繁重的工作,完成繁重的工作后,您可以传递字符串/列表以显示视图,从而显示它们并没有更多。
另外,如果你开始使用带有JSTL的MVC,那么会有更多的人能够帮助你,因为每个人都知道如何做这些事情,并且希望没有多少人仍然在他们的JSP中使用内联java
答案 1 :(得分:2)
尝试使用JSF。这样可以轻松实现MVC。
您可以将两个前端指向同一个会话范围的bean以获取用户信息。
答案 2 :(得分:2)
您还可以使用jspf(JSP片段文件)来存储JSP的块。
jsp:include是包含JSP的一种方式。
另一种方法是使用来自JSTL库的c:include。
这里涉及的区别如下: * http://sharat.wordpress.com/2006/09/08/40-what-is-the-difference-between-jspinclude-and-cimport/
希望有所帮助。我确信有特定于框架的方法,但这些是我所知道的两种JSP方法。
答案 3 :(得分:0)
嗯,对于一个有几页的小项目,我认为做普通的jsp是可以的,并且抓住它并不是一个坏主意。
我可以向你保证,任何框架都会添加更多“不必要的”代码,这些代码会一遍又一遍地调用,但你不会注意到它隐藏在抽象背后。
(我不能真正推荐一个适合java的html框架,但也许GWT是最有希望的,或者至少是最不痛苦的。至少我可以在一个体面的编辑器中编写真正的可调试代码......)< / p>