SpringMVC简单介绍以及常用注解使用方式

前言

经常对问题有总结性的人,往往一下能知道问题出现在哪里,多问为什么,是什么,能一直保持着一颗好奇心,那么就有利于了解任何事物

SpringMVC的简单了解

基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架
(SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整合)
通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合

Spring MVC的优点

它是基于组件技术(只扫描控制层controller)的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java 组件.并且和 Spring 提供的其他基础结构紧密集成.

  • (1)可以支持各种视图技术,而不仅仅局限于JSP;比如还有 jsp,html,json,jstl,ftl,freemarker
  • (2)与Spring框架集成(如IoC容器、AOP等);
  • (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
  • (4) 支持各种请求资源的映射策略。

SpringMVC中的核心组件

1 前端控制器(DispatcherServlet):在web.xml中的部署描述,从而拦截请求到springMVC
2 请求到处理器映射(HandlerMapping):将请求映射到处理器
3 处理器适配器(HandlerAdapter):支持多种类型的处理器(会去处理参数)
4 视图解析器(ViewResolver):prefix前辍 suffix后辍 重定向跳的页面
5 处理器或页面控制器(Controller)
6 验证器(Validator)
6 命令对象(Command 请求参数绑定到的对象就叫命令对象)
7 表单对象(Form Object提供给表单展示和提交到的对象就叫表单对象)

工作原理和流程是怎样?(也可以说是SpringMVC的生命周期)

工作原理:
1)客户端发送请求到 DispatcherServlet
2)DispatcherServlet 查询 handlerMapping 找到处理请求的 Controller
3)Controller 调用业务逻辑后,返回 ModelAndView
4)DispatcherServlet 查询 ModelAndView,找到指定视图
5)视图将结果返回到客户端
工作流程:
1)用户发送请求至前端控制器 DispatcherServlet。
2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象
及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。
5)HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
6)Controller 执行完成返回 ModelAndView。
7)HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。
8)DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
9)ViewReslover 解析后返回具体 View。
10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
11)DispatcherServlet 响应用户。
在这里插入图片描述

简洁: 用户发送请求–中央处理器–接收请求–处理器映射器–根据URL映射出处理器对象和和拦截器并且返回给中央处理器----处理器适配器–经过适配并且执行之后会让这个具体对象返回到视图和模型–中央处理器会将视图和模型交给视图解析器进行解析—解析完后返回具体视图–然后中央处理器就会对视图进行渲染–最后中央处理器响应给用户。
总:
发送请求–中央处理器–接收请求–映射器–适配器–视图和模型–视图解析器–具体视图–渲染–响应
附: 需要程序员开发
处理器Handler和视图View(View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等))

常用注解有哪些?这些注解的作用是什么?

(1)@Controller: 用于标识处理器类,表示控制层(表现层)
(2)@RequestMapping: 请求到处理器方法的映射规则(简单来说就是处理请求的)
作用:A.标注请求方法 B.窄化路径
(3)@ModelAttribute: 请求参数到命令对象的绑定
作用:A.标注方法参数 B.标注一个非请求处理方法 C.标注方法,方法的返回值会被添加到Model对象
(4)@RequestBody: ajax开发的数据绑定(提交数据类型为json格式)
(5)@ResponseBody: 处理器功能的处理方法的返回值作为响应体

注1:@RestController:
     @RestController=@Controller+@ResponseBody

SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决
方案是在控制器里面不能写字段。

Spring MVC怎么样设定重定向和转发的?

(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"

Spring MVC怎么和AJAX相互调用的?

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。
具体步骤如下 :
(1)加入Jackson.jar
(2)在配置文件中配置json的映射
(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

如何解决POST请求中文乱码问题,GET的又如何处理呢?

解决post请求乱码问题:
在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

答:可以在@RequestMapping注解里面加上method=RequestMethod.GET

怎样在方法里面得到Request,或者Session?

答:直接在方法的形参中声明request,Spring MVC就自动把request对象传入。

如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

答:直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样

如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?

答:直接在方法中声明这个对象,Spring MVC就自动会把属性赋值到这个对象里面。

Spring MVC中函数的返回值是什么?

答:返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好

Spring MVC用什么对象从后台向前台传递数据的?

(1)使用Model对象(常用):model.addAtrribute(传递参数的昵称,传递的参数)
(2)使用HttpServletRequest对象
(3)使用Map对象(把Model改成Map即可)

怎么样把ModelMap里面的数据放入Session里面?

答:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。

Spring MVC里面拦截器是怎么写的?

有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在Spring MVC的配置文件中配置拦截器即可:

<!-- 配置Spring MVC的拦截器 -->
<mvc:interceptors>
    <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 -->
    <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean>
    <!-- 只针对部分请求拦截 -->
    <mvc:interceptor>
       <mvc:mapping path="/modelMap.do" />
       <bean class="com.zwp.action.MyHandlerInterceptorAdapter" />
    </mvc:interceptor>
</mvc:interceptors>

Spring MVC的异常处理 ?

可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

其他

如何在项目中添加SpringMVC

(1)添加相关依赖
(2)在WEB-INF下添加springmvc-servlet.xml(spring-mvc.xml) 【springmvc-servlet.xml是系统默认的名字,如果不给配置,会自动去读取这个文件】
(3)修改web.xml(主要是添加中央控制器(和Struts2一样,都要读一个配置文件,因为管理所有的控制层))
注意:中央控制器版本不一样,可能名字就会有差别,请根据实际情况进行修改

    区别:SpringMVC:<url-pattern>/</url-pattern>    
          Struts2:url-pattern>*.action</url-pattern>

关于组件扫描的优化

现有条件:
SpringMVC上下文是Spring上下文的内部人员,SpringMVC可以访问Spring上下文的对象,但是Spring不可以访问SpringMVC的
解决方法:
Spring:可以扫描全部,除了扫描控制层(Controller)
SpringMVC:只能扫描控制层(Controller)
1


  1. 编写不易,如果有帮助到的话,可以关注,点赞和收藏哦~ ↩︎

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值