SpringMVC框架

 

1.SpringMVC

Spring MVC 是一个模型 - 视图 - 控制器(MVC)的Web框架建立在中央前端控制器。servlet(DispatcherServlet),它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果的概念。
 

2.请求-响应模型 

 3.mvc模型

 
 
 
 

3.1 组件:

1.前端控制器DispatcherServlet(不需要程序员开发)
作用接收请求,响应结果,相当于转发器,中央处理器。
有了DispatcherServlet减少了其它组件之间的耦合度。
 
2.处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的url查找Handler
 
3.处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
 
4.处理器Handler(需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
 
5.视图解析器View resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
 
6.视图View(需要程序员开发jsp)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
 

五大组件及作用

DispatcherServlet

DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

HandlerMapping 

HandlerMapping 是处理器映射,它的作用是请求派发,负责请求和控制器建立对应的关系。它是由 DispatcherServlet 调用,DispatcherServlet 会从容器中取出所有 HandlerMapping 实例并遍历,让 HandlerMapping 实例根据自己实现类的方式去尝试查找 Handler。也就是说,DispatcherServlet要将一个请求交给哪个特定的Controller,它需要咨询一个Bean,这个Bean的名字为“HandlerMapping”。

Controller

控制器,负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。

ModelAndView                 

封装数据信息和视图信息的模型。使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。 

ViewResolver                   

视图解析器,ViewResolver 的主要作用是把一个逻辑上的视图名称解析为一个真正的视图。

 

3.2 配置解析

1.Dispatcherservlet
Dispatcherservlet是前置控制器,配置在web.xml文件中。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controoler来处理,是配置springMVC的第一步。
 
2.InternalResourceViewResolver
视图名称解析器
 
3.SpringMVC常用注解
@Controller:标识这个类是一个控制器
@RequestMapping:给控制器方法绑定一个uri
@ResponseBody:将java对象转成json,并且发送给客户端
@RequestBody:将客户端请求过来的json转成java对象
@RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射
@PathVarible:用于获取uri中的参数,比如user/1中1的值
Rest风格的新api
@RestController相当于@Controller+ @ResponseBody
@GetMapping@DeleteMapping@PostMapping@PutMapping
 
4.SpringMVC的入门程序
web.xml
 1 <web-app>
 2     <servlet>
 3           <!-- 加载前端控制器 -->
 4           <servlet-name>springmvc</servlet-name>
 5           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 6          <!-- 
 7                加载配置文件
 8                默认加载规范:
 9                * 文件命名:servlet-name-servlet.xml====springmvc-servlet.xml
10               * 路径规范:必须在WEB-INF目录下面
11               修改加载路径:
12          -->
13          <init-param>
14              <param-name>contextConfigLocation</param-name>
15              <param-value>classpath:springmvc.xml</param-value>   
16          </init-param>
17      </servlet>
18     <servlet-mapping>
19          <servlet-name>springmvc</servlet-name>
20          <url-pattern>*.do</url-pattern>
21     </servlet-mapping>
22  </web-app>
springmvc.xml
 1   <beans>
 2       <!-- 配置映射处理器:根据bean(自定义Controller)的name属性的url去寻找handler;springmvc默认的映射处理器是BeanNameUrlHandlerMapping-->
 3       <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
 4       
 5       <!-- 配置处理器适配器来执行Controller ,springmvc默认的是SimpleControllerHandlerAdapter
 6       -->
 7       <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
 8       
 9      <!-- 配置sprigmvc视图解析器:解析逻辑视图; 
10          后台返回逻辑视图:index
11          视图解析器解析出真正物理视图:前缀+逻辑视图+后缀====/WEB-INF/jsps/index.jsp
12      -->
13      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
14          <property name="prefix" value="/WEB-INF/jsps/"></property>
15          <property name="suffix" value=".jsp"></property>        
16      </bean>
17  </beans>
自定义处理器
 1   @Controller
 2   @RequestMapping("/mvc")
 3   public class MyController implements Controller{
 4    
 5       @PostMapping("/request")
 6       public ModelAndView handleRequest(HttpServletRequest arg0,
 7               HttpServletResponse arg1) throws Exception {
 8           ModelAndView mv = new ModelAndView();
 9          //设置页面回显数据
10          mv.addObject("hello", "欢迎学习springmvc!");
11          
12         //返回物理视图
13          //mv.setViewName("/WEB-INF/jsps/index.jsp");
14         
15          //返回逻辑视图
16          mv.setViewName("index");
17         return mv;
18      }
19  }

 

posted on 2020-12-15 15:10  CHENSISI  阅读(207)  评论(0编辑  收藏  举报