如何使用MVC模式设计web表单



我是Java中Restful web服务的新手,并试图通过使用MVC设计模式来发现它。

我有一个简单的HTML表单,有一个按钮和一个输入文本框。当用户在文本框中键入内容时,我希望将这些数据存储在DB中。

这是我HTML代码的一部分:

<input type="button" onclick="doneButton()" value="Done" />

当点击按钮时,我调用"doneButton()"函数作为

<script>
function doneButton() {
var param = document.getElementById("text").value;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById("text").innerHTML = xhttp.responseText;
}
};
xhttp.open("GET","MYURL"+param);
xhttp.send();
}
</script>

我可以通过上面的AJAX代码调用我的RestFul web服务。

在我的web服务中,我调用我的模型类并在那里建立DB连接。之后,我从模型类中调用我的DAO类,并将所需的数据存储在DB表中。

据我所知MVC设计模式:

我不应该直接从视图调用web服务。我应该先打电话给

  • 视图中的控制器
  • 此控制器应调用Restful web服务
  • web服务应该调用模型类
  • 模型类应该对DAO和DB操作进行分类

这在MVC设计模式方面是正确的吗?

在MVC设计模式中,我可以直接从视图调用Restful Web服务吗?

我在web.xml中使用球衣:

RESTful服务com.sun.jses.spi.container.servlet.ServletContainer1.RESTful服务/Web服务/*

你能帮助我理解我应该如何使用MVC设计模式构建我的应用程序吗?

谢谢你的帮助。

致以最诚挚的问候

让我为您澄清一下:

  • View控制器进行RESTful调用。换句话说,您的控制器是RESTful web服务中的一个API
  • 控制器调用DAO层,后者反过来从底层数据库返回数据
  • 控制器使用返回的数据(也称为模型)返回对视图的响应

这只是一个例子,希望这能帮助

$(document).ready(function() {
$('#response_button').on('click', function() {
//              console.log($('#request_textarea').val()); //get your values you need to send to the controller
$.ajax({
type : "GET",
url : "url", //call to your controller here.
data : "xmlRequest=" + $('#request_textarea').val() + "&functionType=submit_request",    //append your data here 
success : function(msg) {
$("#response_textarea").text(msg); //response from the controller will be processed here.
}
});
});
});

通过服务层调用DAO层,并将数据返回到UI。要回答其中一个问题,您可以从视图中调用控制器。

谢谢你的提问。

首先,我想告诉你,你的基本想法是正确的。

您不应该直接从视图调用web服务。

同样正确的是,控制器是显示应用程序视图的入口点。

但我认为人们对"观点"一词有点误解。

对于大多数MVC框架来说,视图是由HTML和数据的几个占位符组成的某种模板。

控制器可能会调用REST服务。它也可以通过直接查询数据库来获取它的数据。如何检索数据在很大程度上取决于控制器的实际实现。

然而,像Angular.js这样的客户端MVC框架通常是为使用REST服务而设计的。

因此,如果您想使用Javascript MVC框架,那么使用REST服务进行数据操作是一个好主意。

现在控制器做什么?

控制器侦听特定资源(URL)并对其作出响应。它通过将(视图)模型绑定到请求的视图(通常是HTML模板)来实现这一点。

它基本上将视图定义中的占位符替换为实际数据,并将完成的HTML显示给客户端。

如果表单数据被发布到控制器,它会解析数据并相应地更新视图模型。

那么,什么是(视图)模型,它是如何用数据填充的呢?

(视图)模型就是MVC中的M。绑定到视图的是实际模型。在某些情况下,视图模型可能与域模型重合。当您使用基于javascript的MVC框架时,通常会出现这种情况。因此,视图模型不仅仅是一个简单的数据模型,它包含绑定到特定视图模板占位符的数据。就js MVC框架而言,它可能还包含控制器调用的业务逻辑。。。在javascript中。。。在客户端上。->这是不利的一面。

在您的案例中,所有DB操作都由REST服务处理。因此,您有一个服务器端组件,它有自己的数据模型,独立于MVC结构化表示层。因此REST服务不是MVC方法的一部分!因此,如果你愿意,你仍然可以在REST服务操作中实现服务器端验证。但请记住,你的客户端控制器必须在客户端(视图和域模型)和服务器端(域和/或持久性模型²)之间转换。

²是贫血域模型的好词。

路线图:

  1. 找到问题的答案:我是建立自己的MVC框架(提示:坏主意!)还是使用现有的MVC框架来利用MVC方法?

  2. 选择一个符合您需求的MVC框架并下载。

  3. 创建模型、视图和控制器。

但在您真正考虑构建MVC结构化表示层之前,您可能需要了解什么是REST服务,以及它是如何构建和创建的。

我希望这能有所帮助。

编码快乐!

最新更新