0
点赞
收藏
分享

微信扫一扫

vivo X Fold3全球首发瑞声科技Whisper扬声器和AeroEngine

朱小落 04-02 20:30 阅读 2
javamvc

1.springMVC工作流程(执行流程)

当用户在浏览器输入一个URL请求时,首先会被DispatcherServlet这个"总经理"接收。DispatcherServlet是Spring MVC的核心,它负责统一调度和处理所有的请求。

  1. 核心:DispatcherServlet充当着整个流程的控制中心,它接收到用户请求后会根据请求信息找到对应的处理器(Controller)。

  2. 处理器映射器(Handler Mapping):处理器映射器就像一个地图导航,它负责将请求映射到具体的处理器(Controller),确保每个请求都能找到对应的处理器。

  3. 处理器适配器(Handler Adapter):处理器适配器就像一个翻译官,负责将不同类型的处理器适配为统一的处理方式,确保处理器能够被正确执行。

  4. 视图解析器(View Resolver):视图解析器就像一个魔术师,负责根据处理器返回的数据模型和视图信息找到对应的视图进行渲染,最终呈现给用户。

  5. Handler(处理器):处理器就是具体的业务逻辑执行者,它接收用户请求,处理业务逻辑,并返回数据模型和视图信息。

  6. 响应:经过处理器处理后,最终会生成相应的数据模型和视图信息,并通过视图解析器找到对应的视图进行渲染,最终将渲染后的视图以HTML等形式返回给用户,用户就能在浏览器中看到相应的页面。

整个流程就像是一场精心策划的演出,DispatcherServlet作为总导演,处理器映射器和处理器适配器负责安排演员和剧本,视图解析器负责布景和道具准备,最终在观众面前上演一出精彩的表演。

2.怎么通过路径找到方法的呢?

在Spring MVC中,通过路径找到方法是由处理器映射器(Handler Mapping)来实现的。处理器映射器会根据请求的URL路径信息来确定应该由哪个Controller中的方法来处理。

举个例子:

@Controller
@RequestMapping("/user")
public class UserController {

    @GetMapping("/info")
    public String getUserInfo() {
        // 获取用户信息
        return "user_info";
    }

    @PostMapping("/update")
    public String updateUser() {
        // 更新用户信息
        return "update_success";
    }
}
/*在上面的示例中,UserController 类包含了两个方法,分别用于处理获取用户信息和更新用户信息的请求。其中,@RequestMapping 和 @GetMapping 等注解用于指定方法对应的请求路径。

当用户请求 /user/info 路径时,处理器映射器会根据路径信息 /user/info 找到匹配的Controller类 UserController,然后再根据请求的方法类型(GET、POST等)和路径(/info)找到对应的方法 getUserInfo() 来处理请求。

同样地,当用户请求 /user/update 路径时,处理器映射器会根据路径信息 /user/update 找到匹配的Controller类 UserController,再根据请求的方法类型(GET、POST等)和路径(/update)找到对应的方法 updateUser() 来处理请求。

因此,通过在Controller类中使用不同的注解和路径配置,结合处理器映射器的工作机制,Spring MVC能够很容易地通过路径找到对应的方法来处理用户请求。
*/

简单介绍一下@RequestMapping 注解 在这个流程做了什么

在Spring MVC中,使用 @RequestMapping 注解后,实际上会将 @RequestMapping 的值注册到一个地方,这个地方就是处理器映射器(Handler Mapping)。

处理器映射器的作用是将请求映射到对应的处理器方法,它会根据请求的URL路径和HTTP方法来确定应该调用哪个方法来处理请求。当一个Controller类或者处理器方法被标记有 @RequestMapping 注解时,处理器映射器会将这些路径信息注册到自己的映射表中。

当请求到达时,处理器映射器会遍历自己的映射表,尝试匹配请求的URL路径和HTTP方法,以找到最合适的处理器方法来处理请求。因此,可以说使用 @RequestMapping 注解相当于将路径信息注册到了处理器映射器中,这样处理器映射器在接收到请求时就能够根据注册的路径信息来进行匹配。

总的来说,@RequestMapping 注解的值会被注册到处理器映射器中,以便在请求到达时能够准确地找到对应的处理器方法来处理请求。这也是Spring MVC能够实现灵活的请求映射和处理逻辑的重要机制之一。

它的注册表相当于map吗

Spring MVC内部就是使用类似 Map 的数据结构来保存请求路径和对应处理器方法的映射关系。

当你在Controller类中使用 @RequestMapping 注解时,实际上就是在向这个“映射表”(可以理解为类似于 Map)中注册了一条映射记录,其中键是请求的URL路径,值是对应的处理器方法。

当请求到达时,处理器映射器会根据请求的URL路径在这个“映射表”中查找对应的处理器方法,找到后就会调用该方法来处理请求。

这种结构是同名方法报错的原因吗?

在处理器映射器的注册表中,每个请求路径应该只对应一个处理器方法,否则会造成冲突。当存在两个同名的方法(比如两个方法都使用了相同的 @RequestMapping 路径)时,处理器映射器无法区分这两个方法应该分别处理哪个请求路径,从而导致冲突和报错。

类比为 Map 的数据结构,就好比如果在一个 Map 中将同一个键映射到不同的值,那么在查找时就无法准确地确定应该返回哪个值,会导致逻辑上的混乱和错误。

因此,确保每个请求路径只对应一个处理器方法是非常重要的,这样处理器映射器才能准确地匹配请求并调用对应的处理器方法来处理请求,避免冲突和错误的发生。

3.MVC是什么

MVC(Model-View-Controller)是一种软件架构模式,用于组织和管理应用程序中的代码。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。这些部分各自负责不同的任务,以实现代码的分离和更好的组织。

下面是对 MVC 架构模式中每个部分的简要解释:

1. 模型(Model)

模型是应用程序的核心部分,用于表示应用程序的数据和业务逻辑。它负责处理数据的存储、检索、验证和操作等任务。模型通常是应用程序中与数据库或者其他数据源进行交互的部分。

2. 视图(View)

视图是用户界面的呈现部分,负责将模型中的数据以合适的方式呈现给用户。视图通常是用户可以看到和与之交互的界面,如网页、应用程序界面等。视图负责将数据呈现出来,并将用户的输入传递给控制器。

3. 控制器(Controller)

控制器是模型和视图之间的中间人,负责处理用户的输入和控制应用程序的流程。控制器接收用户的请求,调用适当的模型进行处理,并根据处理结果选择合适的视图进行展示。控制器负责协调模型和视图之间的交互,使得应用程序的逻辑更加清晰和易于维护。

MVC 架构模式的主要优势包括代码的分离与组织、提高了代码的可维护性和可扩展性、降低了耦合度、促进团队协作等。它已经成为了许多 Web 应用程序和框架的标准架构模式,如 Ruby on Rails、Spring MVC、Django 等。

举报

相关推荐

0 条评论