SpringMVC架构

(1)框架结构

(2)架构流程

1、用户发送请求到前端控制器DispatcherServlet

2、DispatcherServlet收到请求调用处理器映射器(HandlerMapping)

3、处理器映射器根据请求的URL地址找到具体的处理器,生成 处理器对象以及拦截器(如果有就生成)一并返回给DispatcherServlet

4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5、执行处理器(controller,也叫后端控制器)

6、Controller执行完成返回ModelAndView

7、HandlerAdapter将Controller执行的结果ModelAndView返回给DispatcherServlet

8、解析ModelAndView中View,根据View的地址得到一个View对象。

9、返回view对象

10、DispatcherServlet对View进行渲染(将数据模型的数据填充到视图中,就变成HMTL),

11、DispatcherServlet相应用户,返回HTML

(3)组件说明

以下组件通常使用框架提供实现:

DispatcherServlet:前端控制器

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心

由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

HandlerMapping:处理器 映射器

HandlerMapping负责根据用户请求url找到Handler即处理器

springmvc提供了不同的映射器实现不同的映射方式

例如:配置文件方式,实现接口方式,注解方式等。

Handler:处理器  ---- 控制器Controller

Handler 是继DispatcherServlet前端控制器的后端控制器

在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler

HandlAdapter:处理器适配器

过HandlerAdapter对处理器进行执行,这是适配器模式的应用

通过扩展适配器可以对更多类型的处理器进行执行。

下图是许多不同的适配器,最终都可以使用usb接口连接

 

ViewResolver:视图解析器

View Resolver负责将处理结果生成View视图

View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址

再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

View:视图

springmvc框架提供了很多的View视图类型的支持

包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户

需要由程序员根据业务需求开发具体的页面。

说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。

需要用户开发的组件有handlerview

(4)配置视图解析器srpingmvc.xml配置文件中

集成Spring,SpringMVC,Mybatis,第一个SSM项目

这个项目的整合建立在第一个SpringMVC项目的基础之上

链接:https://blog.csdn.net/h1025372645/article/details/92000427

项目结构:项目结构如下所示,添加了圈中的包与文件

步骤1:导入Mybatis包,在第一个SpringMVC项目中已经为Mybatis添加了必要的包

步骤2:数据库准备

DROP TABLE IF EXISTS `product`;
CREATE TABLE `t_product` (
                           `id` int(11) NOT NULL AUTO_INCREMENT,
                           `name` varchar(32) NOT NULL COMMENT '商品名称',
                           `price` float(10,1) NOT NULL COMMENT '商品定价',
                           `detail` text COMMENT '商品描述',
                           `createtime` datetime NOT NULL COMMENT '生产日期',
                           PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO t_product VALUES (1,"苹果手机",8000,"苹果手机很贵哦,但是很好用",'2018-02-03 13:22:53');
INSERT INTO t_product VALUES (2,"华为手机",2000,"华为手机,国产手机中的战斗机",'2018-02-03 13:22:53');
INSERT INTO t_product VALUES (3,"oppo手机",1000,"oppo手机,国产手机中的g广告手机",'2018-02-03 13:22:53');

步骤3:添加配置文件

Mybatis配置文件sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--为实体添加别名-->
    <typeAliases>
        <package name="com.hxy.pojo"></package>
    </typeAliases>

</configuration>

Spring配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
							http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
							http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
							http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">

    <!--读取数据库配置型db.properties-->
    <!--读取配置文件-->
    <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>

    <!--dataSource:C3P0连接池-->
    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:sqlMapconfig.xml"></property>
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        <!--指定扫描的包,如果扫描多个包,每个包之前用半角的逗号分隔-->
        <property name="basePackage" value="com.hxy.mapper"></property>
    </bean>

    <!--扫描控制器-->
   <context:component-scan base-package="com.hxy"></context:component-scan>


</beans>

springmvc配置文件springmvc.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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!--扫描控制器-->
    <context:component-scan base-package="com.hxy.controller"></context:component-scan>

</beans>

步骤4:开发Mapper层,此时已经有了对应实体,否则要自己建立pojo中的实体

也可以使用Mybatis逆向工程,不建议新手使用

ProductMapper.interface

package com.hxy.mapper;

import com.hxy.pojo.Product;

import java.util.List;

public interface ProductMapper {
    /**
     * 获取所有商品列表
     * @return
     */
    public List<Product> findProductList();
}

ProductMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:命名空间,对SQL进行分类管理,SQL隔离-->
<mapper namespace="com.hxy.mapper.ProductMapper">
    <select id="findProductList" resultType="Product">
        select * from t_product;
    </select>
</mapper>

步骤5:开发Service层

ProductService.interface

package com.hxy.service;

import com.hxy.pojo.Product;

import java.util.List;

public interface ProductService {
    public List<Product> getProductList();
}

.ProductServiceImpl.class

package com.hxy.service.impl;

import com.hxy.mapper.ProductMapper;
import com.hxy.pojo.Product;
import com.hxy.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductMapper productMapper;

    /**
     * 动用mapper中的方法
     * @return
     */
    @Override
    public List<Product> getProductList(){
        List<Product> productList = productMapper.findProductList();
        return productList;
    }
}

步骤6:修改ProductController中的方法

package com.hxy.controller;


import com.hxy.pojo.Product;
import com.hxy.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.ArrayList;
import java.util.List;

@Controller
public class ProductController {

    @Autowired
    private ProductService productService;

    @RequestMapping(value = "/product/productList.action")
    public ModelAndView itemList(){
        System.out.println("lalal");
        //模拟假数据测试
        List<Product> list = new ArrayList<Product>();
        list= productService.getProductList();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("productList",list);
        modelAndView.setViewName("/static/productList.jsp");
        return modelAndView;
    }

}

步骤7:修改WEB-INF中的的web.xml配置文件

加入监听器,当项目启动时,就创建Spring容器

<?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>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
       <servlet-mapping>
           <servlet-name>springmvc</servlet-name>
           <url-pattern>*.action</url-pattern>
       </servlet-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
</web-app>

步骤8:开始测试,成功显示数据库中的数据

第一个SSM(Spring,SpringMVC,Mybatis)项目搭建成功

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐