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

从SpringBoot到SpringMVC

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

从SpringBoot到SpringMVC


概述

用久了SpringBoot,深受其约定大于配置的便利性 “毒害” 之后,我想回归到SpringMVC时代,看看SpringMVC开发模式中用户是如何参与的。本文就来体验一下SpringMVC时代开发的流程。


SpringMVC架构模式

一个典型的SpringMVC请求流程如图所示,详细分为12个步骤:

  1. 用户发起请求,由前端控制器DispatcherServlet处理
  2. 前端控制器通过处理器映射器查找hander,可以根据XML或者注解去找
  3. 处理器映射器返回执行链
  4. 前端控制器请求处理器适配器来执行hander
  5. 处理器适配器来执行handler
  6. 处理业务完成后,会给处理器适配器返回ModeAndView对象,其中有视图名称,模型数据
  7. 处理器适配器将视图名称和模型数据返回到前端控制器
  8. 前端控制器通过视图解析器来对视图进行解析
  9. 视图解析器返回真正的视图给前端控制器
  10. 前端控制器通过返回的视图和数据进行渲染
  11. 返回渲染完成的视图
  12. 将最终的视图返回给用户,产生响应

整个过程清晰明了,下面我们将结合实际实验来理解这整个过程。


SpringMVC项目搭建

实验环境如下:

  • IntelliJ IDEA 2018.1 (Ultimate Edition)
  • SpringMVC 4.3.9.RELEASE
  • Maven 3.3.9

这里我是用IDEA来搭建的基于Maven的SpringMVC项目,搭建过程不再赘述,各种点击并且下一步,最终创建好的项目架构如下:


添加前端控制器配置

使用了SpringMVC,则所有的请求都应该交由SpingMVC来管理,即要将所有符合条件的请求拦截到SpringMVC的专有Servlet上。

为此我们需要在 web.xml 中添加SpringMVC的前端控制器DispatcherServlet:

    
    
 mvc-dispatcher
 org.springframework.web.servlet.DispatcherServlet
 
     contextConfigLocation
     classpath:mvc-dispatcher.xml
 
    

    
 mvc-dispatcher
 *.action
    

该配置说明所有符合.action的url,都交由mvc-dispatcher这个Servlet来进行处理


编写SpringMVC核心XML配置文件

从上一步的配置可以看到,我们定义的mvc-dispatcher Servlet依赖于配置文件 mvc-dispatcher.xml,在本步骤中我们需要在其中添加三个方面的配置

  • 0x01. 添加处理器映射器

SpringMVC的处理器映射器有多种,这里的使用的BeanNameUrlHandlerMapping其映射规则是将bean的name作为url进行处理

  • 0x02. 添加处理器适配器

SpringMVC的处理器适配器也有多种,这里的使用的SimpleControllerHandlerAdapter是Controller实现类的适配器类,其本质是执行Controller中的handleRequest方法。

  • 0x03. 添加试图解析器

这里配置了InternalResourceViewResolver视图解析器后,其会根据controller方法执行之后返回的ModelAndView中的视图的具体位置,来加载对应的界面并绑定数据


编写控制器

这里模拟的是一个打印学生名单的Service,我们编写的控制器需要将查询到的学生名单数据通过ModelAndView渲染到指定的JSP页面中

public class TestController implements Controller {

    private StudentService studentService = new StudentService();

    @Override
    public ModelAndView handleRequest( HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
 List studentList = studentService.queryStudents();
 ModelAndView modelAndView = new ModelAndView();
 modelAndView.addObject("studentList",studentList);
 modelAndView.setViewName("/WEB-INF/views/studentList.jsp");
 return modelAndView;
    }
}

class StudentService {
    public List queryStudents() {
 List studentList = new ArrayList();

 Student hansonwang = new Student();
 hansonwang.setName("hansonwang99");
 hansonwang.setID("123456");

 Student codesheep = new Student();
 codesheep.setName("codesheep");
 codesheep.setID("654321");

 studentList.add(hansonwang);
 studentList.add(codesheep);

 return studentList;
    }
}

编写视图文件

这里的视图文件是一个jsp文件,路径为:/WEB-INF/views/studentList.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>



    学生名单


    学生列表
    
     
姓名 学号
${student.name} ${student.ID}

结合本步骤和上一步骤,视图和控制器都已编写完成,由于我们之前配置的处理器映射器为:BeanNameUrlHandlerMapping,因此接下来我们还需要在mvc-dispatcher.xml文件中配置一个可被url映射的controller的bean,供处理器映射器BeanNameUrlHandlerMapping查找:



实验测试

启动Tomcat服务器,然后浏览器输入:

http://localhost:8080/test.action

数据渲染OK。

备注:当然本文所使用的全是非注解的配置方法,即需要在XML中进行配置并且需要遵循各种实现原则。而更加通用、主流的基于注解的配置方法将在后续文章中详述。

呼,长舒一口气,这么个小Demo用SpringMVC完成的话,各种XML配置了半天,真麻烦啊,算了,还是回SpringBoot好了!


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

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

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