努力了解Spring MVC模型和特定的控制器方法

时间:2016-02-18 08:59:52

标签: java spring spring-mvc

我在基于Spring的Java应用程序中遇到过以下代码。

这是控制器:

@RequestMapping(value="/plants/form")
public String form(Model model){
    model.addAttribute("plant", new Plant());
    return "plants/create";
}

关于此代码段,我有几个问题。

  1. 我知道对form的请求调用/plants/form方法, 但我想知道哪个方法调用form并将参数传递给它?
  2. 对我来说,似乎模型就像一个数据库。所以,它看起来像 model.addAttribute("plant", new Plant());创建Plant 实例,并使其在名为 plant 的模型中可访问。 因此,模型的属性似乎是 像DB中的field之类的东西。 的确切含义是什么? 模型的属性?
  3. value@RequestMapping(value="/plants/form")的内容是什么? 是上述符号与之间的区别 @RequestMapping("/plants/form")
  4. 考虑这个不完整的HTML代码段:

    <form class="form-horizontal" role="form" th:object="${plant}" th:method="post" th:action="@{/plants}">
        <div class="form-group">
            <label for="name" class="col-sm-2 control-label">Name</label>
            <input type="text" th:field="*{name}"></input>
        </div>
    </form>
    

    $, *, @"${plant}""*{name}""@{/plants}"的含义是什么? public class DataContext : DbContext {...} 。我不清楚。

1 个答案:

答案 0 :(得分:2)

1)如果我正确理解了你的问题,那么Spring MVC DispatcherServlet负责根据配置的HandlerMapping / HandlerAdapter将请求路由到你的处理程序方法。

2)模型在MVC中是M,它与关系数据库没有任何共同之处。而是将其视为Map String Objectvalue个值。 Spring MVC模型属性存储在请求范围下。

3)没有区别,@RequestMappingvalue注释的属性。如果要传递单个value参数而不传递其他参数,则可以按惯例省略$path = ""; if ($_SERVER['HTTP_HOST'] == "localhost") { $path = $_SERVER['DOCUMENT_ROOT']."/mysite"; } else { $path = $_SERVER['DOCUMENT_ROOT']; } include_once($path.'/include/config.php');

4)这些是Thymeleaf Standard SpringStandard 方言的标签和属性。更多信息here