一、mvc设计模式,创建 Web 应用程序的模式

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就已包含在 Spring Framework 中。正式名称“ Spring Web MVC”来自其源模块的名称(spring-webmvc),但更通常称为“ Spring MVC”。
换句话说:Spring mvc是基于web层(请求处理和响应发送 b/s)的框架。
贴士:sturts1,struts2,spring mvc ,spring webFlux等等都属于web层框架

二、传统的b/s架构与spring mvc的架构有区别

mvc模式:m (model ) v(view–jsp,html) c (control–servlet)

1) 传统的b/s架构

客户端------请求-----控制器(servlet)----->封装数据model中
------->响应----------->jsp-----------------|
缺点: servlet生产周期长,大量servlet的产生。占据大量内存。

2)spring mvc 的b/s架构

优点:

  1. 只有1个servlet。
  2. 分工明确:

中央处理器(servlet):接受请求,分配任务,发送响应.
映射器:根据url,确定找谁(处理器),干什么(办什么业务),将其告诉老大。
适配器:根据映射器结果,找到对应的处理器,完成任务,并将结果返回给老大。
视图解析器:解析处理器返回的结果(model view)—返回哪个jsp,里面要显示什么数据渲染。

springmvc开发环境 springmvc开发模式_springmvc开发环境

三、spring mvc开发的流程

第1步: mybatis spring mvc需要的包(spring+ spring-web包+spring-webmvc)

spring-web-5.0.14.RELEASE.jar
spring-webmvc-5.0.14.RELEASE.jar

第2步:web.xml配置中央处理器(spring 写好的一个servelt)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Springmvc01</display-name>
  
  <!--  Tomcat容器来加载spring 和spring mvc配置-->
  <!-- 加载spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:context.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 三、spring的编码过滤器 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  
  
  <!--二、 spring mvc的配置==>中央处理器(1个老大与3个小弟) -->
    <display-name>nd-springmvc01-base</display-name>
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 参数 :告诉中央处理器 使用哪个映射器,哪个适配器,哪个视图解析器 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-web.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- / 中央处理器处理所有请求:包括jsp html 注意:不能写/*,否则报错 *.do 中央处理器处理url中以.do结果 比如: 
            http://127.0.0.1:8080/easybuy/index.do 被处理 http://127.0.0.1:8080/easybuy/index.jsp 
            不被处理 -->
        <!-- <url-pattern>*.do</url-pattern> -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

第3步:配置spring-web.xml(映射器,适配器,视图解析器)

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://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.lq.web"/>
	<!-- 1.映射器:HandlerMapping  url==>handler -->
	<bean
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
	<!-- 2.适配器: HandlerAdatper   调用 Handler==>Controller-->
	<bean
		class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
	<!-- 3.视图解析器: -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 解析jstl标签 -->
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<!-- 动态页面的前缀 -->
		<property name="prefix" value="/WEB-INF/" />
		<!-- 动态页面的后缀 -->
		<property name="suffix" value=".jsp" />
	</bean>

</beans>

第4步:定义处理器
@Controller
@requestMapping

package com.lq.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.lq.entity.Users;
import com.lq.service.IUsersService;

//http://localhost:8080/nd-springmvc01-base2/user/list
@Controller// 等价于@Component
@RequestMapping("/user")
public class UserController {
	
	@Autowired
	private IUsersService iUsersService;
	
    @RequestMapping("/list")
    public ModelAndView list() {
        System.out.println("调用UserController的list方法");
        //查询分页查询users的数据(Model)
        List<Users> users = iUsersService.list();
        
        //返回model(users)AndView(users.jsp)
        ModelAndView mav=new ModelAndView();
        mav.addObject("users",users);
        mav.setViewName("users");
        return mav; //"user.jsp"
    }
    
    @RequestMapping("/to_edit")
    public String toEdit(Model model,Integer id) {
    	Users userDetail = iUsersService.getUser(id);
    	model.addAttribute("userDetail", userDetail);
    	
    	return "edit_user";
    }
    
    @RequestMapping("/edit")
    public void edit() {}
    
    @RequestMapping("/login")
    public String login() {
    	System.out.println("用户登录成功");
    	return null;
    }
    
    
}

【补充】
@Component这个注解 在后期spring后期版本中进行细化 :
1) @Controller ----web层
2) @Service -----业务层
3) @Repository -----持久层 spring data jpa