SpringMVC运用

1. 摘要

本文旨在读者能通过本文知道SpringMVC是什么、干什么用的,在此基础上为了让读者能”知其然知其所以然”,还会介绍SpringMVC执行原理流程是怎么的,为的是让读者能对SpringMVC有更加深刻的认识和理解,在开发中能顺心应手,最后再通过一个简单的入门案例实现SpringMVC的功能,让读者切身感受下SpringMVC在项目中的作用。

2. SpringMVC概述

2.1. 什么是SpringMVC

SpringMVC就是一个Spring内置的MVC框架。

MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化等等),而且使用简单,与Spring无缝集成。支持 RESTful风格的URL请求。

采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

2.2. SpringMVC的作用

MVC模式(Model-View-Controller):解决页面代码和后台代码的分离。

3. SpringMVC原理

在没有使用SpringMVC之前我们都是使用Servlet在做Web开发。但是使用Servlet开发在接收请求参数,数据共享,页面跳转等操作相对比较复杂。servlet是java进行web开发的标准,既然springMVC是对servlet的封装,那么很显然SpringMVC底层就是Servlet,SpringMVC就是对Servlet进行深层次的封装。

--SpringMVC执行流程:

01、用户发送出请求被前端控制器DispatcherServlet拦截进行处理。
02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03、HandlerMapping找到具体的处理器(查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
06、Controller执行完成返回ModelAndView对象。
07、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
08、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。
09、ViewReslover解析ModelAndView后返回具体View(视图)给DispatcherServlet。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应View给用户。

 

--涉及组件分析:

1、前端控制器DispatcherServlet(不需要程序员开发)由框架提供,在web.xml中配置。
作用:接收请求,响应结果,相当于转发器,中央处理器。
 
2、处理器映射器HandlerMapping(不需要程序员开发)由框架提供。
作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。
 
3、处理器适配器HandlerAdapter(不需要程序员开发)由框架提供。
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler中的方法。
 
4、处理器Handler(也称之为Controller,需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。
 
5、视图解析器ViewResolver(不需要程序员开发)由框架提供。
作用:进行视图解析,把逻辑视图解析成真正的物理视图。 
SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、ThymeleafView等。
 
6、视图View(需要工程师开发)
作用:把数据展现给用户的页面
View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)

--根据以上分析,SpringMVC需要程序员完成的工作有三个:

【1】配置前端控制器DispatcherServlet。

【2】开发后端控制器Handler/Controller。

【3】开发视图View。

接下来的入门案例,我们尝试只完成三个工作,看下能不能实现SpringMVC的功能。

4.案例

4.1.1. 添加spring-webmvc依赖

webmvc依赖包含beans、context、core、expression、commons-logging、aop、web、webmvc,换言之导入一个webmvc依赖,就间接导入了启动mvc框架的所有依赖。

--web:spring对web项目的支持。

--webmvc:SpringMVC核心包。

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.9</version>
    </dependency>

4.1.3. 添加servlet依赖

因为springmvc底层还是servlet,所以还必须添加serlvet依赖。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

 4.2. 开发后端控制器Controller(与以前servlet类似)

package com.openlab.controller;

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


@Controller
@RequestMapping("/E")
public class MyController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

4.4. 开发视图View

在/WEB-INF下添加一个hello.jsp。

<%@ page import="java.util.Date" %><%--
  Created by IntelliJ IDEA.
  User: cjm
  Date: 2021/9/18
  Time: 14:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%=new Date()%>
<a href="${pageContext.request.contextPath}/A/yes">转换到</a>
</body>
</html>

4.5. 配置前端控制器DispatcherServlet

在web.xml中配置spring mvc核心(前端)控制器,并加载springmvc配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
    <context:component-scan base-package="com.openlab.controller"></context:component-scan>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

4.6运行Tomcat.

5.总结

通过入门测试,我们确实完成三个工作:配置前端控制器、开发后端控制器、开发视图,就能通过浏览器或者测试工具(PostMan)访问我们的项目,即通过SpringMVC实现了MVC模式。但是通过XML配置的方式有一个问题:servlet的uri配置和serlvet的java代码是分开的,试想一下,如果servlet有几十个,上百个,那么我们需要定位serlvet对应的uri是不是要去配置文件里面逐个排查?这就很影响我们的开发效率了,特别是出现bug之后,本来心情就不愉快了,还要逐个逐个的排查,我们的心态会崩的,此时就需要使用springmvc另外一种开发模式:纯注解开发,来解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值