对于我的大学项目,我必须构建一个自定义JSP / Servlet MVC应用程序,因此我不能使用Struts或Spring等框架。我已经有FrontController,Command,Service,DAO,Business层。
假设我想创建一个带侧边栏的网站,并在侧边栏中有以下小部件:Members
,Who's Online
,Recent Comments
。每个小部件都通过Command
- >访问数据库。 Service
- > Dao
。
我希望在整个应用程序中不断地在侧边栏中显示信息。问题是我不知道该怎么做。我知道如何通过处理GET / POST请求来显示信息,但是如果没有GET / POST请求我不知道如何显示信息(来自数据库)?
我试过的一些方法不起作用:
1)加载homepage
并从HomeCommand
调用ListUsers
次来电UserDao
,然后将其存储到会话中。 但如果用户从其他网址进入网站,则ListUsers将不会存储到会话中。
2)创建单独的Command
:MembersCommand
,WhosOnlineCommand
,RecentCommentsCommand
。然后使用JSTL
include
添加FrontController
并让其调用Command
。 但包括想要.jsp
<jsp:include page="FrontController/members" />
Fragment "FrontController/members" was not found at expected path /MyApplication/WebContent/WEB-INF/FrontController/memmbers
3)使用Java代码为每个小部件(.jsp's
,members.jsp
)创建单独的whosonline.jsp
以访问Dao
。然后使用JSTL include
。 但是我如何才能通过FrontController
并且jsp中的Java不是一个大禁忌?
4)使用<jsp:forward page="" />
,但这会给我一个空白页?
我没有想法?
答案 0 :(得分:0)
我不明白你想要说的所有内容,但也许servlet设计模式可以提供帮助。通常使用前端控制器,您可以访问持久存储,然后存储需要存储在“会话”或“请求”范围区域中的内容。但是,由于您谈到“其他网站”,我认为您可能需要将数据存储在“应用程序”类型区域中。如果您使用servlet作为前端控制器,则此区域由getServletContext()。setAttribute()访问,稍后您的JSP页面可以像访问会话范围的变量一样访问变量。我无法判断你的前端控制器是servlet还是JSP,但它并不重要,因为它们都能够存储应用程序范围的变量。
在实际的商业环境中,这还不够,因为servlet通常在多台机器之间共享,并且可以多次重新启动和停止;因此,必须直接从数据库中检索任何持久性信息。但是,对于项目,将数据存储在应用程序范围的变量中就足够了。
我知道我错过了你所解释的很多部分,但我的观点是前端控制器访问(几个)持久性存储,将返回的jsp页面所需的所有数据加载到会话或请求或应用程序变量中(在这种情况)并且可以编写jsp文件以利用存储在这些变量中的所有数据。
答案 1 :(得分:0)