Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制器方法中的视图名称与Spring MVC中的@RequestMapping(值=“/…”)之间的关系_Spring_Spring Mvc - Fatal编程技术网

控制器方法中的视图名称与Spring MVC中的@RequestMapping(值=“/…”)之间的关系

控制器方法中的视图名称与Spring MVC中的@RequestMapping(值=“/…”)之间的关系,spring,spring-mvc,Spring,Spring Mvc,我是新来的春季MVC&穿越克雷格墙 以片段为例 @RequestMapping(value = "/spittles", method = RequestMethod.GET) public String spittles(Model model, @RequestParam("max") long max, @RequestParam("count") int count) { model.addAttribute

我是新来的春季MVC&穿越克雷格墙

以片段为例

@RequestMapping(value = "/spittles", method = RequestMethod.GET)
    public String spittles(Model model, @RequestParam("max") long max,
                           @RequestParam("count") int count) {

        model.addAttribute("spittleList",spittleRepository.findSpittles(max, count));

        return "spittles";                 // <-- return view name
}
1)为什么我需要在控制器方法中返回字符串“spittles”

2)doit(返回字符串)与

@RequestMapping(value=“/spittles”,method=RequestMethod.GET)

值(/Spitles)是否与控制器方法中返回的字符串相同

3)当我输入URL时,为什么不看到一个.jsp扩展名

o/p解析为:

关于您的问题:

  • 字符串“Spitles”将被传递给视图解析器,它将查找视图
    /WEB-INF/views/splittles.jsp
    。如果返回“hello\u world”,则需要一个视图
    /WEB-INF/views/hello\u world.jsp
  • 否-这是控制器URL。如果愿意,您可以定义一个完全不同的控制器URL,例如
    /my/super/vality/URL
    ——这正是您接受(GET)请求的路径
  • 请参阅1.)和2.)的答案,尽管它的良好实践保持了Spring控制器URL和JSP视图名称的相似性,但开发人员显然知道这里发生了什么
  • 例如,您可能必须控制同一路径的方法,一个响应GET,另一个响应POST请求,这两种方法都会导致不同的视图:

    @RequestMapping(value = "/spittles", method = RequestMethod.GET)
    public String spittles(Model model, @RequestParam("max") long max,
                           @RequestParam("count") int count) {
      // ...
      return "splittles_get";
    }
    
    @RequestMapping(value = "/spittles", method = RequestMethod.POST)
    public String spittles(Model model, @RequestParam("max") long max,
                           @RequestParam("count") int count) {
      // ...
      return "splittles_post";
    }
    

    您甚至可以返回一个相对路径,如
    splittles/jspName
    ,这意味着您可以将jsp组织在文件夹中-这里是
    /WEB-INF/views/splittles/something.jsp

    ,这一切都与MVC中视图解析器的工作方式有关。ad 1)它是应该显示给用户的视图(jsp页面)的名称。ad 2)否。URL映射与视图解析没有直接关系。AD3)在MVC中,您只能看到视图的名称(JSP是唯一的表示层,您可以使用Thymeleaf而不是JSP,它将以非常类似的方式工作)@R4J:但是如果我只是从controller方法返回null,它也可以工作。是的,即使您返回null,它也可以工作,因为视图解析器InternalResourceViewResolver通过为jsp添加前缀/后缀来解析呈现@controller的视图。如果该JSP存在,那么它将呈现else,并显示“未找到JSP”错误。
    @RequestMapping(value = "/spittles", method = RequestMethod.GET)
    public String spittles(Model model, @RequestParam("max") long max,
                           @RequestParam("count") int count) {
      // ...
      return "splittles_get";
    }
    
    @RequestMapping(value = "/spittles", method = RequestMethod.POST)
    public String spittles(Model model, @RequestParam("max") long max,
                           @RequestParam("count") int count) {
      // ...
      return "splittles_post";
    }