2015-01-09 120 views
0

随着所有教程的出现,我设法让控制器显示视图。但是,我不明白我如何让用户通过MVC浏览网站。每个对服务器的请求都必须通过控制器?如果每个请求都必须通过控制器,我该如何让控制器定义它应该将请求转发到的响应类型。MVC体系结构了解

编辑:我正在做一个学校项目,需要我将我目前不可重用的代码转换为MVC模式,但我不理解不同视图的导航部分。如何从一种观点转向另一种观点。例如,navbar元素应该指向控制器还是视图?

+0

你是什么意思的“定义响应类型”? –

+0

嗨@Ophitect您可能想看看[**为什么我应该使用MVC模式?**](http://programmers.stackexchange.com/questions/105352/why-should-i-use-an-mvc-模式); –

+0

比方说,我定义了我的登录控制器,登录控制器处理登录表单并将用户重定向到视图,无论是成功还是错误。 查看1 is success.jsp 查看2是product.jsp 我现在在查看1。我该如何导航查看2? – Ophitect

回答

0

控制器来了,它与模型交流,并发送给你想要的视图。

所以,你需要什么,在视图中,只是把在你想要的控制器映射的URL链接一些...

0

简短的回答是,所有行动“点”到控制器用参数告诉它动作应该是什么,以及任何其他必要的参数。

假设您有一个简单的注册表单。您可能有以下两种操作:showRegistration和Register。 MVC不是特定于网络的,但我将在该上下文中提供示例(根据您的意见)。这两个操作将指向您的控制器(比如index.jsp),其URL为如下所示:/index.jsp?act=showRegistration和/index.jsp?act=Register。你的控制器对不同的动作会有不同的逻辑(你可以自己做很多种方法,或者使用一些为你开关逻辑的框架)。在一天结束的时候在控制器逻辑将归结为这样的事:

if showRegistration: 
    model.getCountries //to populate a dropdown maybe 
    view.showRegistrationForm 
if Register: 
    model.validateRegistrationForm 
    if not valid 
     view.showRegistrationNotValid 
    else 
     model.createUser 
     if userCreated 
      view.showSuccess 
     else 
      view.showCouldNotCreate 

的想法是,该控制器可重复使用的使用模型和视图组件contructs完整动作。您可以在许多不同的地方使用相同的model.getCountries,从而重新使用检索国家/地区列表的逻辑。

实际上,它需要不费吹灰之力来推广模型和查看动作。我已经看到很多项目体面地陷入了为单一目的而创建的数百个组件的混乱中,并且只使用了一次,而许多组件基本上是重复的,因为开发人员不知道类似的组件已经存在,或者需要稍微不同的逻辑,不想打扰修改旧的代码。