从零搭建SSM之——SpringMVC的单独使用以及Spring整合MVC

前几篇文章整合了Spring+Mybatis,这篇文章将最终整合SpringMVC,最终形成SSM基础框架。本篇文章与之前文章结构类似,先单独搭建SpringMVC,再统一整合Spring+Mybatis。

SpringMVC的单独搭建与使用

之前几篇的项目我都是以一个普通的项目在运行程序,但是如果运行SpringMVC的首要条件是项目必须是一个Web项目,所以,我首先要将原项目更改成一个Web项目:添加Web module。
(1)打开project structure设置,选择添加module
在这里插入图片描述
(2)更改目录
在这里插入图片描述
在这里插入图片描述
(3)pom文件添加打包方式为war
在这里插入图片描述
OK,现在这个项目已经是一个Web项目了。开始搭建SpringMVC。

1.环境准备

(1)导入SpringMVC的jar包

 <!--SpringMVC的jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

(2)编写web.xml配置
web程序运行在web容器中必须要实现至少一个Servlet,并且需要配置在web.xml中。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">

    <!--配置SpringMVC的前端控制器DispatcherServlet,并且<init-param>中配置了初始化DispatcherServlet时扫描springmvc.xml   -->
    <servlet>
        <servlet-name>spring-dispatcher</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>spring-dispatcher</servlet-name>
        <!--默认匹配所有请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>



    <!--url访问时,tomcat会执行filter过滤器,在这里将编码统一    -->
    <filter>
        <filter-name>encodingFilter</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/</url-pattern>
    </filter-mapping>



    <!--因为静态资源不需要处理,所以直接由tomcat的默认Servlet处理静态资源的获取    -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>

        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.ico</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>


</web-app>

SpringMVC最重要的就是DispatcherServlet,他是SpringMVC的核心,管理者所有的请求,所以我们只需要配置这一个Servlet,交由tomcat反射代理执行,即可完成转发处理请求。
SpringMVC的流程图(网图):
在这里插入图片描述

2.程序编写

SpringMVC的基础环境搭建完成,那么可以开始编写controller测试是否可以成功运行:

(1)Controller:

package WholeSSM.controller;


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

@Controller
@RequestMapping("myController")
public class MyController {


    @RequestMapping("test")
    public String test()
    {
        System.out.println("SpringMVC运行成功!");
        return "test";
    }


}

(2)jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
SpringMVC运行成功!
</body>
</html>

(3)部署tomcat

3.运行结果

在这里插入图片描述
在这里插入图片描述

Spring整合SpringMVC以及Mybatis

Spring整合SpringMVC的重点是该项目已经成为一个Web项目,Web项目的一个特点是没有main函数,所有方法的执行都是依靠web容器,所以ApplicationContext的创建就要使用其他方法:
(1)
配置一个监听器,在web容器创建的时候启动Spring容器完成扫描以及创建Bean对象并存储。这种情况适用于MVC框架是其他厂商的产品时。
(2)
直接使用DispatcherServlet加载Spring容器。

1.环境准备

(1)方法一:配置监听器启动Spring

<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.xml配置此监听器。

(2)SpringMVC直接一起加载Spring容器。
更改加载参数:
在这里插入图片描述
在这里的初始加载文件由springmvc改成了spring*,代表所有符合spring前缀的xml全部加载。
在这里插入图片描述
所以DispatcherServlet还一起加载了springdao。
springdao.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: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
	http://www.springframework.org/schema/context/spring-context.xsd">


    <!-- 扫描service以及mapper包下所有使用注解的类型 -->
    <context:component-scan base-package="WholeSSM" >
        <!--这里配置不扫描controller        -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>



    <!-- 配置整合mybatis过程 -->
    <!-- 数据库连接池 其中,JDBC的属性参数可以单独写一条properties文件,然后在此引用-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 配置连接池属性 -->
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/october?characterEncoding=utf8&amp;useSSL=false"/>
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>

        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <!-- 关闭连接后不自动commit -->
        <property name="autoCommitOnClose" value="false"/>
        <!-- 获取连接超时时间 -->
        <property name="checkoutTimeout" value="10000"/>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>

    <!-- 配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描entity包 使用别名 -->
        <property name="typeAliasesPackage" value="com.test.entity"/>
        <!-- 扫描sql配置文件:mapper需要的xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!-- 给出需要扫描Dao接口包 -->
        <property name="basePackage" value="WholeSSM.Mapper"/>
    </bean>


</beans>

所以,service以及mapper的接口也都被异同加载了。

2.代码

包结构:
在这里插入图片描述

package WholeSSM.controller;


import Entity.StudentEntity;
import Mapper.StudentMapper;
import WholeSSM.Service.myService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("myController")
public class MyController {


    @Autowired
    myService service;

    @RequestMapping("test")
    public String test()
    {
        System.out.println("SpringMVC运行成功!");
        List<StudentEntity> list= service.selectAll();
        for (StudentEntity studentEntity : list) {
            System.out.println(studentEntity);
        }
        return "test";
    }
}

package WholeSSM.Mapper;

import Entity.StudentEntity;

import java.util.List;

public interface StudentMapper {

    List<StudentEntity> selectAll();

    void update(StudentEntity student);
}

package WholeSSM.Service;

import Entity.StudentEntity;
import org.springframework.stereotype.Repository;

import java.util.List;

public interface myService {

    List<StudentEntity> selectAll();

    void update(StudentEntity student);
}
package WholeSSM.Service;

import Entity.StudentEntity;
import WholeSSM.Mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("Service")
public class myServiceImpl implements myService {

    @Autowired
    StudentMapper mapper;

    public List<StudentEntity> selectAll()
    {
        return mapper.selectAll();
    }

    public void update(StudentEntity student)
    {
        mapper.update(student);
    }
}

3.运行结果

在这里插入图片描述
在这里插入图片描述

OK,到此,SSM框架搭建完成。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值