SpringMVC边角料整理

【  os:标题很高大上(喵?),其实只是把之前有关串讲springMVC的内容整理了一下放上来,,没有在文案上逻辑上做更多二次加工,具有一定阅读门槛(高情商)。愿你在本次茶余浏览中能有所得。】

一、概念相关

1.什么是MVC

MVC是一种设计模式。三个字母分别指代:模型model(javabean)、视图view(jsp/img)、控制器Controller(Action/servlet)。每个部分各司其职。

Model:数据模型,JavaBean的类,用来进行数据封装。

View:指JSP、HTML用来展示数据给用户

Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等。

2.基于面试答题模板

SpringMVC一种轻量级的、基于MVC的Web层应用框架。偏前端而不是基于业务逻辑层,是Spring框架的一个后续产品。通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

3.涉及组件

(1)前端控制器(DispatcherServlet)

(2)处理器映射器(HandlerMapping)

(3)处理器(Handler)

(4)处理器适配器(HandlAdapter)

(5)视图解析器(View Resolver)

(6)视图(View)

4.执行原理/工作流程(重要)

(1)用户发送请求至前端控制器(DispatcherServlet)。

(2)前端控制器收到请求后,调用处理器映射器(HandlerMapping)来处理请求。

(3)处理器映射器根据请求的URL找到对应的处理器,生成处理器对象以及处理器拦截器(如果有的话)一并返回给前端控制器。

(4)前端控制器调用处理器适配器(HandlerAdapter)来执行具体的处理器(Controller)。

(5)处理器执行完成后返回一个ModelAndView对象。

(6)处理器适配器将处理器返回的ModelAndView对象返回给前端控制器。

(7)前端控制器将ModelAndView对象发送给视图解析器(ViewResolver)。

(8)视图解析器解析ModelAndView对象,返回具体的View。

(9)前端控制器根据View进行视图渲染,然后将响应返回给用户。

(借用佬Coder_Oldou制作的流程图——方便过沈,非饿意截取,欢迎移步http://t.csdnimg.cn/tU7IN了解SpringMVC更详细的执行原理及工作流程)

二、常用注解、绑定参数相关

1.RequestMapping注解

   RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系

   RequestMapping注解可以作用在方法和类上

  (1)作用在类上:第一级的访问目录。表示类中的所有响应请求的方法都以该地址作为父路径。

  (2)作用在方法上:第二级的访问目录。表示该方法的请求URL路径需要与该注解中的值匹配。

        细节:路径可以不编写 /     表示应用的根目录开始

     RequestMapping的属性

  (1)path 指定请求路径的url(必须指定)

  (2)value   value属性和path属性是一样的(默认为value)

  (3)mthod  指定该方法的请求方式

  (4)params  指定限制请求参数的条件

2.参数绑定

Spring MVC的参数绑定是指将请求参数绑定到控制器方法的参数上,使得控制器方法可以方便地获取到请求参数。Spring MVC提供了多种参数绑定方式,包括简单类型、复杂类型、表单对象等。

(1)简单类型{基本数据类型和字符串类型}:控制器方法的参数可以直接绑定到请求参数上,例如:

        @RequestMapping("/example")  

        public String example(String name, int age) {  

            // ...  

        }

        关注:提交表单的name和参数的名称是相同的区分大小写

(2)复杂类型{实体类型(JavaBean)}:控制器方法的参数可以是一个对象,这个对象可以包含多个属性,这些属性可以与请求参数进行绑定。例如:

        @RequestMapping("/example")  

        public String example(User user) {  

            // ...  

        }

关注:

1.提交表提交表单的name和JavaBean中的属性名称需要一致

2.如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属 性 例如:address.name

(3)表单对象{集合数据类型(List、map集合等)}:控制器方法的参数可以是一个表单对象,这个表单对象可以包含多个属性,这些属性可以与请求参数进行绑定。例如:

        @RequestMapping("/example")  

        public String example(UserForm userForm) {  

            // ...  

        }

URL请求参数为get请求时,不会出现中文乱码问题;请求参数为post请求时,需在web.xml中配置Spring提供的过滤器类。

3.自定义类型转换器(/两种方式的区别)

(1)使用@DateTimeFormat注解的方式:

这种方式主要用于简单的类型转换,如将字符串转换为日期类型。通过在控制器方法的参数上添加@DateTimeFormat注解,并指定日期时间的格式,Spring框架会自动将请求参数转换为指定类型的参数。这种方式无需自定义转换器,使用起来相对简单方便。

(2)自定义类型转换器:

 如果默认的类型转换器不能满足需求,或者需要更复杂的类型转换逻辑,就需要使用自定义类型转换器。通过实现Converter接口,可以自定义任意类型的转换器,实现更为灵活和复杂的类型转换逻辑。自定义类型转换器可以支持任意两种类型的转换,并且可以根据需要实现更复杂的转换逻辑。同时,自定义类型转换器需要手动注册到Spring容器中,以便在需要时自动调用该转换器进行数据类型的转换。

4.其他常用注解

(1)@RequestParam注解:

作用:用于将请求参数绑定到控制器方法的参数上。

属性:value:请求参数中的名称;required:请求参数中是否提供此参数值,默认为true。

使用场景:适用于获取简单的请求参数,如表单数据、查询参数等。

注意点:如果请求中没有提供对应的参数值,则服务器会报错。

(2)@RequestBody注解:

作用:用于将请求体绑定到控制器方法的参数上。常用于处理JSON、XML等格式的请求数据。

属性:required:是否必须有请求体,默认为true。当取值为true时,如果请求中没有提供请求体,会报错。如果取值为false,即使请求中没有提供请求体,也不会报错,但对应的参数值为null。

使用场景:适用于处理复杂的请求数据,如JSON、XML等格式的数据。

注意点:仅适用于POST请求,因为GET请求没有请求体。

(3)@PathVaribale注解:

 @PathVariable 注解和 RESTful 风格的 URL 之间存在密切的关系。

首先,RESTful 风格的 URL 是基于资源的,使用统一的资源标识符(Uniform Resource Identifier)来标识资源。这种风格的 URL 设计遵循了 HTTP 协议的特性,如使用 URI 来定位资源、使用 HTTP 方法来执行对资源的操作等。

在 RESTful 风格的 URL 中,资源标识符通常包含了资源的名称和可能的属性。例如,对于一个用户资源,URL 可能包括用户的 ID 或其他属性。这种设计方式使得 URL 更加简洁、直观,易于理解和使用。

而 @PathVariable 注解的作用是将 URL 中的占位符(或变量部分)绑定到控制器方法参数上。通过使用 @PathVariable,我们可以方便地从 URL 中获取资源标识符的值,并将其传递给控制器方法进行进一步的处理。

因此,@PathVariable 注解是实现 RESTful 风格的 URL 的关键之一。通过将 URL 中的变量部分绑定到控制器方法参数上,我们可以方便地获取资源标识符的值,并根据这些值执行相应的操作。这种设计方式有助于提高应用程序的可读性、可维护性和可扩展性。

三、响应数据和结果视图

1.按返回值划分

(1)返回String

如果控制器方法的返回值是String对象,那么这个返回值通常表示视图的逻辑名称。Spring MVC会根据这个名称来查找对应的视图模板,并将处理后的数据填充到模板中,生成最终的HTML页面。

(2)返回void

如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。可以使用请求转发或者重定向跳转到指定的页面

(3)返回值是ModelAndView对象

如果控制器方法的返回值是ModelAndView对象,那么这个方法将具有更大的灵活性来控制响应的呈现。

ModelAndView是Spring MVC中的一个类,它允许开发者将模型数据和视图名称组合在一起,并返回给Spring MVC框架。这样,开发者可以更加灵活地控制响应的内容和格式。

2.SpringMVC框架提供的转发(forward请求转发)和重定向(redirect重定向

3.ResponseBody响应json数据(重要)

@ResponseBody注解在Spring框架中用于将控制器方法的返回值直接写入HTTP响应体中。当与JSON数据一起使用时,它可以自动将返回的对象转换为JSON格式的字符串,并将其作为响应内容返回给客户端。

AJAX(Asynchronous JavaScript and XML)是一种使用JavaScript在浏览器端发起异步请求的技术,它可以通过XMLHttpRequest对象向服务器发送请求并处理响应,从而实现动态更新页面内容而无需刷新整个页面。

当使用@ResponseBody注解返回JSON数据时,你可以在客户端使用AJAX来发送请求并处理返回的JSON数据。例如,你可以使用jQuery的$.ajax()方法来发送GET或POST请求,并处理返回的JSON数据。

四、SpringMVC异常处理

1.异常处理思路:Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。

可以自定义异常类或配置异常处理器来提升用户体验。

五、拦截器

1.拦截器和过滤器的功能比较类似,有区别:

(1)过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。拦截器是SpringMVC框架独有的。

(2)过滤器配置了/*,可以拦截任何资源。拦截器只会对控制器中的方法进行拦截。

2.想要自定义拦截器,需要实现HandlerInterceptor接口。

HandlerInterceptor接口中的方法

<1>preHandle方法是controller方法执行前拦截的方法

可以使用request或者response跳转到指定的页面

return true放行,执行下一个拦截器,如果没有拦截器,执行controller中的方法。

return false不放行,不会执行controller中的方法。

<2>postHandle是controller方法执行后执行的方法,在JSP视图执行前。

可以使用request或者response跳转到指定的页面

如果指定了跳转的页面,那么controller方法跳转的页面将不会显示。

<3>postHandle方法是在JSP执行后执行

request或者response不能再跳转页面了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值