SpringMVC简单介绍及使用

1、回顾MVC三层架构

1.1、MVC三层是什么

MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。就是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。

Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。

Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。

其实在最早期的时候还有model1和model2的设计模型

最典型的MVC就是JSP + servlet + javabean的模式。

https://note.youdao.com/yws/public/resource/5c9055f0c6fff47263ddf0e0d37422d5/xmlnote/7A49C57D2B984A1EABE723B1A45E9873/5F8FFED217A64CB9B1B937B4750048EC/2586

 

servlet作为控制器的代码展示:

HelloServlet.java

package cn.tulingxueyuan.controller;
​
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
​
public class HelloServlet extends HttpServlet {
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       String method = request.getParameter("method");
       if (method.equals("add")){
           request.getSession().setAttribute("msg","add");
      }else if(method.equals("sub")){
           request.getSession().setAttribute("msg","sub");
      }
       request.getRequestDispatcher("index.jsp").forward(request,response);
  }
​
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doPost(request, response);
  }
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>cn.tulingxueyuan.controller.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/user</url-pattern>
    </servlet-mapping>
</web-app>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
   <title>$Title$</title>
 </head>
 <body>
${msg}
 </body>
</html>

2、SpringMVC

2.1、SpringMVC的介绍

Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.

Spring Web MVC是构建在Servlet API上的原始Web框架,从一开始就包含在Spring Framework中。 正式名称 “Spring Web MVC,” 来自其源模块(spring-webmvc)的名称,但它通常被称为“Spring MVC”。

简而言之,springMVC是Spring框架的一部分,是基于java实现的一个轻量级web框架。

学习SpringMVC框架最核心的就是DispatcherServlet的设计,掌握好DispatcherServlet是掌握SpringMVC的核心关键。

2.2、SpringMVC的优点

  • 1.轻量级、可适配、非侵入,简单易学
  • 2.高效 , 基于请求响应的MVC框架(解耦、可重用、提高维护性)
  • 3.与Spring兼容性好,无缝结合
  • 4.约定优于配置
  • 5.功能强大:灵活的URL映射、RESTful、数据验证、格式化、本地化、主题标签库等
  • 6.简洁灵活

2.3、SpringMVC的实现原理

springmvc的mvc模式:

DispatcherServlet(前端控制器)

Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。

​ Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。

https://note.youdao.com/yws/public/resource/5c9055f0c6fff47263ddf0e0d37422d5/xmlnote/7A49C57D2B984A1EABE723B1A45E9873/977AC70181FB445EBB4EEE07BF5C1496/2564

 

SpringMVC的具体执行流程:

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

https://note.youdao.com/yws/public/resource/5c9055f0c6fff47263ddf0e0d37422d5/xmlnote/7A49C57D2B984A1EABE723B1A45E9873/E75F3823251F4CB693635E55C66B71FF/2580

DispatcherServlet: 前端调度器 , 负责将请求拦截下来分发到各控制器方法中

HandlerMapping: 负责根据请求的URL和配置@RequestMapping映射去匹配, 匹配到会返回Handler(具体控制器的方法)

HandlerAdaper: 负责调用Handler-具体的方法- 返回视图的名字 Handler将它封装到ModelAndView(封装视图名,request域的数据)

ViewReslover: 根据ModelAndView里面的视图名地址去找到具体的jsp封装在View对象中

View:进行视图渲染(将jsp转换成html内容) 最终response到的客户端

1、DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。

2、HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。

3、返回处理器执行链,根据url查找控制器,并且将解析后的信息传递给DispatcherServlet

4、HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

5、执行handler找到具体的处理器

6、Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

7、HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

8、DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

9、视图解析器将解析的逻辑视图名传给DispatcherServlet。

10、DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图,进行试图渲染

11、将响应数据返回给客户端

3、基于注解的Hello_SpringMVC

1、添加pom依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
    </dependencies>

 2、编写web.xml文件

<!--配置DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联springmvc的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
     <!--匹配servlet的请求,/标识匹配所有请求-->
    <!--/*和/都是拦截所有请求,/会拦截的请求不包含*.jsp,而/*的范围更大,还会拦截*.jsp这些请求-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3、编写springmvc需要的spring配置文件

<?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"
       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">

    <context:component-scan base-package="com.springmvc"></context:component-scan>
</beans>

4、HelloController.java

package com.springmvc.controller;

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

@Controller
public class HelloController {
    @RequestMapping("/Hello")
    public String hello(String name){
        System.out.println("hello springmvc"+name);
        return "redirect:index.jsp";
    }
}

5、流程细节

1、springmvc_helloworld运行流程:

通过上述的代码,我们能够总结出具体的运行流程:

1、客户端发送请求http://localhost:8080/springmvc01/hello

2、由tomcat接受到对应的请求

3、SpringMVC的前端控制器DispatcherServlet接收到所有的请求

4、查看请求地址和@RequestMapping注解的哪个匹配,来找到具体的类的处理方法

5、前端控制器找到目标处理类和方法之后,执行目标方法

6、方法执行完成之后会有一个返回值,SpringMVC会将这个返回值用视图解析器进行解析拼接成完整的页面地址

7、DispatcherServlet拿到页面地址之后,转发到具体的页面

2、springmvc的配置文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--
		关联springmvc的配置文件
		此配置文件的属性可以不添加,但是需要在WEB-INF的目录下创建 前端控制器名称-servlet.xml文件
		-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

3、DispatcherServlet的url-pattern

匹配servlet的请求,
    /:标识匹配所有请求,但是不会jsp页面
    /*:拦截所有请求,拦截jsp页面

     但是需要注意的是,当配置成index.html的时候,会发现请求不到
     原因在于,tomcat下也有一个web.xml文件,所有的项目下web.xml文件都需要继承此web.xml
     在服务器的web.xml文件中有一个DefaultServlet用来处理静态资源,但是url-pattern是/
     而我们在自己的配置文件中如果添加了url-pattern=/会覆盖父类中的url-pattern,此时在请求的时候
     DispatcherServlet会去controller中做匹配,找不到则直接报404
     而在服务器的web.xml文件中包含了一个JspServlet的处理,所以不过拦截jsp请求 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SpringMVC是一个基于MVC架构的Web框架,它是Spring框架的一个模块。它提供了一种简单的方式来开发Web应用程序,并且可以与其他Spring框架的模块集成。SpringMVC框架的核心是DispatcherServlet,它接收所有的请求并将它们分发到相应的处理程序(Controller)。SpringMVC框架还提供了许多功能,如数据绑定、表单验证、国际化、文件上传等。 ### 回答2: SpringMVC是一个基于JavaMVC(Model-View-Controller)设计模式的Web应用程序框架。它是Spring框架的一部分,用于开发灵活、可扩展和高性能的Web应用程序。 SpringMVC将应用程序分成三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型表示应用程序的数据,视图负责呈现模型数据给用户,控制器处理用户的请求并将其发送到合适的模型和视图。这种分离使得应用程序更容易维护和测试。 SpringMVC框架具有以下特点: 1. 灵活性:SpringMVC允许开发人员选择适合他们需求的组件,如视图解析器、数据绑定、表单处理等。这种灵活性使得开发人员可以根据应用程序的需求进行定制。 2. 可扩展性:SpringMVC支持各种扩展,如处理器适配器、拦截器、视图解析器等。这些扩展能够满足不同的业务需求,从而提高框架的可扩展性。 3. 易于测试:SpringMVC使用MVC设计模式,将应用程序分离成不同的组件,这样可以更容易对不同的组件进行单元测试和集成测试。 4. 高性能:SpringMVC采用了基于注解的配置方式,避免了XML配置的繁琐,提高了框架的性能。 5. 提供RESTful支持:SpringMVC支持REST(Representational State Transfer)风格的Web服务,可以通过注解方式定义REST API,并且可以将请求和响应转化为各种格式,如JSON、XML等。 6. 支持国际化:SpringMVC能够很方便地处理国际化和本地化的需求,提供了多语言的支持。 7. 安全性:SpringMVC提供了强大的安全性功能,支持基于角色的访问控制、表单验证、CSRF(Cross-Site Request Forgery)保护等。 总之,SpringMVC是一个功能强大、灵活性高、可扩展性好的Web应用程序框架,被广泛应用于开发Java Web应用程序。 ### 回答3: Spring MVC是一个基于Java的、轻量级的、灵活的MVC(模型-视图-控制器)框架。它是Spring框架的一部分,用于构建Web应用程序。 Spring MVC提供了一个定义良好的架构,可将应用程序的不同方面进行分离。它通过使用模型(Model)、视图(View)和控制器(Controller)的分离来实现这一目标。模型用来表示应用程序的数据,视图用来展示数据给用户,而控制器则负责处理用户的请求并更新模型和视图。 Spring MVC的工作流程如下: 1. 用户发送HTTP请求到服务器。 2. 前端控制器(Front Controller)拦截请求,并将其传递给适当的处理器映射器(Handler Mapper)。 3. 处理器映射器根据请求中的URL找到对应的处理器(Controller)。 4. 处理器执行相应的业务逻辑,并返回一个模型和视图的逻辑视图名。 5. 视图解析器(View Resolver)将逻辑视图名解析为实际的视图对象。 6. 视图对象负责生成HTTP响应,并将数据渲染到视图上。 7. 响应从服务器发送给用户。 Spring MVC的许多特性使得开发Web应用程序变得更加简单和高效。其中一些特性包括: - 易于测试:由于Spring MVC的松耦合性,可以更容易地编写单元测试和集成测试来验证应用程序的正确性。 - 灵活性:Spring MVC允许开发人员使用多种视图技术,例如JSP、Thymeleaf、Velocity等。 - 安全性:Spring MVC提供了一种配置简单的安全机制,可用于保护Web应用程序免受常见的Web攻击。 - 可扩展性:Spring MVC支持各种扩展,例如处理拦截器、处理器适配器和视图解析器等。 - 国际化支持:Spring MVC提供了一套易于使用的国际化功能,可用于构建多语言的Web应用程序。 总体而言,Spring MVC是一个功能强大、灵活且易于使用Java MVC框架,可用于构建现代化的Web应用程序。它基于Spring框架的强大特性和生态系统,为开发人员提供了丰富的工具和选项,以满足各种需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值