如何在Java web应用程序中包含jsp页面而不复制代码?
首先,我要说,我对Java web应用完全陌生,如果这是一个非常基本的问题,我很抱歉 我正在编写一个应用程序,可以让用户登录到一个帐户。每个页面的顶部都包含一个信息栏(有点像GMail中的顶部栏),内容如下:如何在Java web应用程序中包含jsp页面而不复制代码?,java,jsp,include,Java,Jsp,Include,首先,我要说,我对Java web应用完全陌生,如果这是一个非常基本的问题,我很抱歉 我正在编写一个应用程序,可以让用户登录到一个帐户。每个页面的顶部都包含一个信息栏(有点像GMail中的顶部栏),内容如下: Logged in as <userid> | Settings | Help 作为|设置|帮助登录 由于该部分将出现在每个页面上,所以我有理由将该功能拆分,这样我就不会重复代码 我做了一些搜索,发现我可以用这个: <jsp:include page="userInf
Logged in as <userid> | Settings | Help
作为|设置|帮助登录
由于该部分将出现在每个页面上,所以我有理由将该功能拆分,这样我就不会重复代码
我做了一些搜索,发现我可以用这个:
<jsp:include page="userInfoBar.jsp" flush="true" />
在另一个JSP的中间。但是,我的userSettings.jsp页面遇到了问题,该页面还从数据库获取了一些用户详细信息。我不仅在两个JSP之间复制了一些代码,而且我感觉在呈现web页面的过程中我做了双倍的工作
例如(伪代码):
userInfoBar.jsp:
user=getCurrentUser
如果(用户){
打印作为user.userid |设置|帮助登录
}
userSettings.jsp:
user=getCurrentUser
更改user.userid的设置
所以在这个小例子中,getCurrentUser会被调用两次(我想,除非Java以某种方式优化)
如何避免这种重复工作,但仍然保持userInfoBar与每个JSP之间的某种独立性
提前谢谢
Brian问题在于JSP中有java代码。大多数邪恶的事情都是在你这么做的时候发生的。您应该在google上查找MVC模式 无论如何,这样做的好方法是使用MVC模式,并在控制器中执行重载,在重载完成后,您可以传递字符串/列表以显示视图,而视图只显示它们 此外,如果您开始将MVC与JSTL结合使用,将有更多的人能够帮助您,因为每个人都知道如何做这件事,希望没有多少人仍然在JSP中使用内联java。这使得MVC易于实现 您可以将两个前端指向同一会话范围的bean以获取用户信息。您还可以使用jspf(JSP片段文件)来存储JSP的块 jsp:include是包含jsp的一种方式 另一种方法是使用JSTL库中的c:include 此处介绍了这些差异: *
希望有帮助。我确信有一些特定于框架的方法,但这是我所知道的两种JSP方法。好吧,对于一个只有几页的小项目,我认为使用简单的JSP是可以的,掌握它并不是一个坏主意 我可以向您保证,任何框架都会添加更多被反复调用的“不必要”代码,但您不会注意到,因为它隐藏在抽象背后
(我不能真正推荐一个适合java的html框架,但也许GWT是最有前途的,或者至少是最不痛苦的。至少我可以在一个合适的编辑器中编写真正的可调试代码…很酷-我很熟悉MVC,因为Ruby on Rails和Django-我不确定如何在java中实现这一点。我现在正在查找:)正在阅读JSTL-这看起来是一条路要走。看起来很不一样,所以我会研究一会儿。谢谢你的帮助!
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