先说一下SpringMVC与servlet处理请求中所携带的参数的区别,和SpringMVC的参数绑定的原理。
先说区别吧,在servlet中,我们在后端通过request获取到的数据一般都是字符串的形式,如果需要其他的操做,比如根据id去数据库中查找数据等都需要我们对获取到的数据进行强制类型转化,在SpringMVC当中,他简化这个操做,从前端获取到的数据SpringMVC框架会自动进行类型转换,并根据数据名放到对应的参数当中,之所以能做到这一点就得说一下SpringMVC的工作原理了,在SpringMVC当中,对于前端数据的处理分为这样几个步骤,首先通过HandlerMapping(处理器映射器)将请求映射到对应的处理器,在处理器当中,SpringMVC框架会根据请求的URL选择对应的处理器方法也就是这个获得的参数要前往的方法,一旦确定了处理器方法,SpringMVC会使用处理器适配器,将选定的处理器方法封装成可调用的对象,并提供一个接口来调用该方法,在调用封装好的处理器方法之前,会选择合适的参数解析器,将请求中的参数转换为方法需要的参数类型,在参数解析器当中,会根据方法参数的注解和类型获取对应的请求参数值,然后将该值转换为方法参数所需要的类型,如果转换失败,就会抛出异常,参数解析完成之后,就会执行绑定操作,将类型转换之后的参数和方法的参数绑定起来,这样就实现了SpringMVC对参数的自动绑定,用例子来说就是,在postman当中向localhost/user/save发送一个get请求,在请求当中带着一个int型的id和一个String型的name,HandlerMapping会将其映射到处理器当中,处理器会根据url去找到@RequestMapping注解的路径为/user/save处理器方法,然后参数解析器会将参数转换为方法参数对应的类型,如果没有出现异常就进行参数的绑定,处理器适配器会进行方法的调用和返回值的处理
前两天对SpringMVC的原理掌握的不够,接下来对其进行修正(GTP润色后):
-
请求拦截:所有从前端发来的请求都会被前端控制器(DispatcherServlet)拦截。DispatcherServlet是Spring MVC的核心组件,它充当了所有请求的入口点。
-
URL解析:DispatcherServlet会解析请求的URL路径,获取请求的URI(Uniform Resource Identifier)。
-
处理器映射器(HandlerMapping):HandlerMapping根据URL路径和配置的映射规则,找到对应的处理器(Controller)。处理器映射器根据请求的URI,通过配置找到对应的处理器,并生成处理器的对象。
-
拦截器的执行:如果存在拦截器,它们会在执行链中生成拦截器对象,并按照配置的顺序执行拦截器的逻辑。
-
执行链返回:处理器映射器将处理器和拦截器对象以执行链的形式返回给DispatcherServlet。
-
处理器适配器(HandlerAdapter)的选择:DispatcherServlet根据执行链选择合适的处理器适配器。处理器适配器将处理器对象适配为可以调用的形式。
-
调用Controller:处理器适配器通过调用处理器(Controller)来处理业务逻辑。Controller是开发者编写的类,负责接收请求、处理业务逻辑,并返回相应的结果。
-
参数绑定:在调用Controller之前,处理器映射器解析URI时,会从路径和请求参数中提取数据,并自动进行类型转换和参数封装。Spring MVC框架会根据URL的路径、数据名和数据的类型,将从前端获取到的数据放到对应的参数中。
-
返回ModelAndView对象:Controller执行完毕后,返回一个ModelAndView对象,其中包含处理结果数据以及要使用的视图的逻辑名称。
-
处理器适配器返回结果:处理器适配器将ModelAndView对象返回给DispatcherServlet。
-
视图解析器:DispatcherServlet根据配置调用视图解析器(ViewResolver),解析ModelAndView对象。视图解析器根据ModelAndView中的逻辑视图名称,找到对应的View对象。
-
视图渲染:视图对象将Model中的数据与视图模板进行渲染,生成最终的HTML或其他类型的响应。
-
返回响应:DispatcherServlet将视图的渲染结果返回给前端,完成整个请求-响应周期。
在开发过程中,你只需要配置DispatcherServlet,指定拦截路径和加载的配置类,并编写Controller处理业务逻辑。Spring MVC框架会根据你的配置自动调用和执行相应的组件,简化了数据类型转换、请求路由和视图渲染等操作。