【问题标题】:What is the difference between @Controller and @RequestMapping in Spring MVC?Spring MVC 中的@Controller 和@RequestMapping 有什么区别?
【发布时间】:2018-04-28 09:23:28
【问题描述】:

我的 MVC 中有以下代码;

...
...
@Controller
public class HelloController{

@RequestMapping("/hello")
public ModelAndView sayHelloMethod(){
.....

我点击了 URI localhostXXXXX\root\hello.htm 和 DispatcherServlet 搜索并映射到这个处理程序,即 @Controller 类并调用“/hello”映射方法。我无法理解 DispatcherServlet 是如何映射到 sayHelloWorldMethod 的?

我尝试同时更改类名和 @RequestMapping 字符串名称,并且只有当它们都包含“hello”字符串时,此示例才有效。

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    @Controller 将使被注解的类充当控制器,简单来说,dispatcher servlet 将在启动时初始化的所有 bean 类中查找您指定的路径。

    @Requestmapping 将使请求映射到指定的方法。假设,如果我的 URI 是这样的http://localhost:8080/Home/Hello

    我在控制器中的代码是:

    @controller
    class Hello extends .... {
    
       @RequestMapping("Home/Hello")
       public .... sayHello() {
          /* your code here
          */
       }
    }
    

    这里的 Home/Hello 是 @RequestMapping 注解提到的。因此 Dispatcher 将搜索您的请求并将其映射到控制器中的 sayHello 方法。

    【讨论】:

    • 什么时候BeanNameUrlHandlerMapping出现在图片中?
    • 在做Uri Request时,RequestHandler会得到它的工作。
    • DispatcherServlet 将初始化项目中的所有 bean 类。因此,当您在客户端(例如浏览器)中点击任何请求时,调度程序 servlet 将使用映射到请求的 URI 检查 bean。找到路径后,DispatcherServlet 将调用 Requesthandler 来完成这项工作,即请求 uri 并获得响应。如果响应没有错误,将识别应显示响应的视图并将数据传递给查看 HTML 页面。流程就是这样运作的。
    • “用映射到请求的 URI 检查 bean”,你能解释一下吗?你的意思是 DispatchercServlet 检查包含带有 URI 模式的 @RequestMappings 的控制器?
    • 它会扫描所有控制器并找到指定的 URI,然后按照上面提到的那样进行工作。
    【解决方案2】:

    首先,控制器本身的名称并不重要。 @Controller 注解用于将此组件标记为控制器,以便稍后在映射 api 调用时使用。

    虽然@RequestMapping 用于设置注解方法的端点url,这意味着您可以根据需要更改方法的名称(sayHelloMethod)。所以设置@RequestMapping(value = "/hello", method = RequestMethod.GET) 会将带有GET请求的"/hello" url映射到这个方法。

    所以这里唯一重要的是@RequestMapping url的名称

    【讨论】:

    • 什么时候BeanNameUrlHandlerMapping出现在图片中?
    • @Goutham.T.J 你能帮我理解从 URL 进入浏览器到 sayHello 方法调用的流程吗?
    • @Goutham.T.J 其实我想问怎么做
    • 在应用程序开始的时候所有的bean必须已经被初始化,所以如果你不将Bean“HelloController”注解为控制器,那么它就永远不会被应用程序加载。 UrlMapping 会将请求映射到@RequestMapping 中的url
    • 它将在任何带注释的“控制器”中搜索“RequestMapping”。您可以为此控制器指定一个 url springframework.guru/spring-requestmapping-annotation
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2010-12-25
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多