栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC执行流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC执行流程

SpringMVC执行流程及工作原理


DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
我们假设请求的url为 : http://localhost:8080/s1/hello
如上url拆分成三部分:

http://localhost:8080服务器域名

SpringMVC部署在服务器上的web站点

hello表示控制器

通过分析,如上url表示为:请求位于服务器localhost:8080上的s1C站点的hello控制器。

  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet收到请求调用处理器映射器HandlerMapping。
    3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
  3. DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
  4. 执行处理器Handler(Controller,也叫页面控制器)。
  5. Handler执行完成返回ModelAndView
  6. HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
  7. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  8. ViewReslover解析后返回具体View
  9. DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
  10. ispatcherServlet响应用户。
方式一:使用配置 1. 新建项目, 添加web支持

由于maven可能存在资源过滤的问题,我们需要在pom.xml中添加下列代码


   
       
           src/main/java
           
               ***.xml
           
           false
       
       
           src/main/resources
           
               ***.xml
           
           false
       
   

2. 导入相关依赖

  
       junit
       junit
       4.12
   
   
       org.springframework
       spring-webmvc
       5.1.9.RELEASE
   
   
       javax.servlet
       servlet-api
       2.5
   
   
       javax.servlet.jsp
       jsp-api
       2.2
   
   
       javax.servlet
       jstl
       1.2
   

3. 配置web.xml, 注册DispatcherServlet



   
       springmvc
       org.springframework.web.servlet.DispatcherServlet
       
       
           contextConfigLocation
           classpath:springmvc-servlet.xml
       
       
       1
   
   
   
   
       springmvc
       /
   
   

  • 如果springmvc的配置文件在WEB-INF目录下则不需要配置init-param

  • / 和 / 的区别*:< url-pattern > / 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。< url-pattern > /* 会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错(xxx.jsp.jsp)。
    jsp本质也是一个Servlet

  • 注意web.xml版本问题,要最新版!

  • 注册DispatcherServlet

  • 关联SpringMVC的配置文件

  • 启动级别为1

  • 映射路径为 / 【不要用/*,会404】

4. 编写SpringMVC 的 配置文件! [servletname]-servlet.xml,命名规范准守官方要求
  • 此处的名称是上文中 classpath:springmvc-servlet.xml的内容
  • 根据视图解析器的配置,我们需要在WEB-INF目录下新建jsp文件夹

springmvc-servlet.xml




添加处理器映射器


添加 处理器适配器


添加 视图解析器

  • 前缀是我们需要跳转的视图的目录, jsp后面的"/"不能忘记


   
   
   
   

5. 编写我们要操作业务Controller ,要返回一个ModelAndView,装数据,封视图
  • 注意此处要导入的包为org.springframework.web.servlet.mvc.Controller
  • 在jsp目录下新建hello.jsp文件, 显示ModelandView存放的数据,以及我们的正常页面;

说明:

  • 实现接口Controller定义控制器是较老的办法
  • 缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦;
package com.zx.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 注意:这里我们先实现Controller接口,获得了控制器的功能
public class HelloController implements Controller {
	// //处理请求且返回一个模型与视图对象
   public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
       //ModelAndView 模型和视图
       ModelAndView mv = new ModelAndView();

       //封装对象,放在ModelAndView中。Model
       mv.addObject("msg","HelloSpringMVC!");
       //封装要跳转的视图,放在ModelAndView中
       mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
       return mv;
  }
   
}

hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


${msg}

6. 在springmvc-servlet.xml中注册bean
  • 注意此处添加的是"/hello"
  • 根据此处id, 我们访问的路径为:项目名/hello
    
    
    
7. 这个位置新建lib目录并将所需依赖添加到此处否则回报404错误

8. 访问

方式二:使用注解 1. 配置web.xml(同上)



   
   
       SpringMVC
       org.springframework.web.servlet.DispatcherServlet
       
       
           contextConfigLocation
           classpath:springmvc-servlet.xml
       
       
       1
   

   
   
       SpringMVC
       /
   



2. 添加Spring MVC配置文件


       

自动扫描包

  
   

让Spring MVC不处理静态资源

 

支持mvc注解驱动

 在spring中一般采用@RequestMapping注解来完成映射关系
   要想使@RequestMapping注解生效
   必须向上下文中注册DefaultAnnotationHandlerMapping
   和一个AnnotationMethodHandlerAdapter实例
   这两个实例分别在类级别和方法级别处理。
   而annotation-driven配置帮助我们自动完成上述两个实例的注入
     

添加视图解释器

   
   
       
       
       
       
   

在视图解析器中我们把所有的视图都存放在/WEB-INF/目录下,这样可以保证视图安全,因为这个目录下的文件,客户端不能直接访问。

  • 让IOC的注解生效
  • 静态资源过滤 :HTML . JS . CSS . 图片 , 视频 …
  • MVC的注解驱动
  • 配置视图解析器
3. 创建Controller
  • @Controller注解类型用于声明Spring类的实例是一个控制器(在讲IOC时还提到了另外3个注解);

  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。

  • @Controller注解的类会自动添加到Spring上下文中

  • Spring MVC会自动实例化一个Model对象用于向视图中传值

  • 返回视图位置,通过视图解析器DispatcherServlet接收到的为: /WEB-INF/jsp/hello.jsp

package com.zx.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/HelloController")	// 如果添加此处则访问地址变为:项目名/HelloController/hello
public class HelloController {

   //访问地址 : 项目名/hello
   @RequestMapping("/hello")
   public String sayHello(Model model){
       //向模型中添加属性msg与值,可以在JSP页面中取出并渲染
       model.addAttribute("msg","hello,SpringMVC");
       //web-inf/jsp/hello.jsp
       return "hello";
  }
}
  • @Controller是为了让Spring IOC容器初始化时自动扫描到;
  • @RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello;
  • 方法中声明Model类型的参数是为了把Action中的数据带到视图中;
  • 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。
4. 创建视图层

在WEB-INF/ jsp目录中创建hello.jsp , 视图可以直接取出并展示从Controller带回的信息;
可以通过EL表示取出Model中存放的值,或者对象;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


   SpringMVC


${msg}


5. 配置Tomcat运行

配置Tomcat , 开启服务器 , 访问 对应的请求路径!

小结

使用springMVC必须配置的三大件:
处理器映射器、处理器适配器、视图解析器
通常,我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置

参考文档:
狂神SpringMVC
SpringMVC执行流程及工作原理

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号