ssm框架-1 基础

SSM(Spring+SpringMVC+MyBatis)框架由Sping、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架
   其中sping是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
在这里插入图片描述

重要类解释

  1. DispatcherServlet:前端控制器,页面发起请求时会将request提交到DispatcherServlet。在Web项目中DispatcherServlet处于web.xml中的servlet,项目启动时会将此类加载。spring-mvc.xml会作为此类的init-param(初始化参数)被加载
  2. HandlerMapping:处理器映射器,通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。程序启动的时候会将所有的handlerMapping加载进handlerMappings(DispatcherServlet的一个属性)我知道的有4种:
  • RequestMappingHandlerMapping
  • BeanNameUrlHandlerMapping
  • SimpleUrlHandlerMapping
  • DefaultAnnotationHandlerMapping
  1. HandlerExecutionChain:处理器执行链由某一具体处理器

Spring MVC运行原理

整个处理过程从一个HTTP请求开始:

  1. Tomcat在启动时加载解析web.xml,找到Spring Mvc的前端控制器DispatcherServlet,并且通过DispatcherServlet来加载相关的配置文件信息
  2. DispatcherServlet接收到客户端请求,找到对应HandlerMapping,根据映射规则,找到对应的处理器(Handler)
  3. 调用相应处理器中的处理方法,处理该请求后,会返回一个ModelAndView
  4. DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户。

新建SSM项目

文件目录如下:
在这里插入图片描述
点击这里去github查看源码
新建一个空的项目点击这里查看如何新建一个空的项目

  1. File—>New—>Module—>Maven---->org.apache.maven.archetypes:maven-archetype-webapp,
    创建成功后,默认web.xml的version=“2.3”,需要删除该版本,重新添加一个web.xml,版本为2.5,步骤如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    目录如下:
    在这里插入图片描述
  2. 重新添加一个web.xml,版本为2.5.
    Filer–>Project Structure–>Modules–>
    在这里插入图片描述
    移除后点击Apply,然后在点击+
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. pom.xml文件需要更改更改3个地方:
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.torey.ssmTest</groupId>
 <artifactId>torey-ssmTest</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>war</packaging>

 <name>torey-ssmTest Maven Webapp</name>
 <!-- FIXME change it to the project's website -->
 <url>http://www.example.com</url>

 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <!--这里改为1.8-->
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
 </properties>

 <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <!--这里改为4.1.2-->
     <version>4.12</version>
     <scope>test</scope>
   </dependency>
   <!--添加spring-webmvc依赖-->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>4.3.14.RELEASE</version>
   </dependency>
 </dependencies>

 <build>
   <finalName>torey-ssmTest</finalName>
   <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
     <plugins>
       <plugin>
         <artifactId>maven-clean-plugin</artifactId>
         <version>3.1.0</version>
       </plugin>
       <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
       <plugin>
         <artifactId>maven-resources-plugin</artifactId>
         <version>3.0.2</version>
       </plugin>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.8.0</version>
       </plugin>
       <plugin>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>2.22.1</version>
       </plugin>
       <plugin>
         <artifactId>maven-war-plugin</artifactId>
         <version>3.2.2</version>
       </plugin>
       <plugin>
         <artifactId>maven-install-plugin</artifactId>
         <version>2.5.2</version>
       </plugin>
       <plugin>
         <artifactId>maven-deploy-plugin</artifactId>
         <version>2.8.2</version>
       </plugin>
     </plugins>
   </pluginManagement>
 </build>
</project>
  1. web.xml文件里配置前端控制器(servlet)

在这里插入图片描述
在这里插入图片描述
web.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
           version="2.5">
<!--配置前端控制器-->
    <servlet>
        <servlet-name>springMvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置启动web容器的时候实例化当前servlet实例,数字越大,优先级越高-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
  1. 发布tomchat,尝试运行:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    运行报如下错误:
    07-Sep-2018 05:31:03.703 严重 [RMI TCP Connection(3)-127.0.0.1] org.springframework.web.servlet.DispatcherServlet.initServletBean Context initialization failed
    org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/springMVC-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/springMVC-servlet.xml]
    报错原因是没有配置springMVC-servlet.xml
       在main下新建resource文件夹,并右击该文件夹—>mark Directory as—>Resources Root
    在resource文件夹下新建spring文件夹,在resource/spring文件夹下新建springMVC-servlet.xml文件,右击spring文件夹—>New---->XML Configuration File---->Spring Config---->取名为 springMVC-servlet
    在web.xml配置加载springMVC-servlet.xml文件,配置映射处理器如下:
<!--配置前端控制器-->
    <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/springMVC-servlet.xml</param-value>
        </init-param>
        <!--配置启动web容器的时候实例化当前servlet实例,数字越大,优先级越高-->
        <load-on-startup>0</load-on-startup>
    </servlet>

在这里插入图片描述

在main下新建 新建java文件夹,右击该文件夹Mark Directorey as —>Sources Root,然后在java文件夹下新建类:com.demo.controller.MvcController.class,该MvcController.class继承Controller。

如果出现如下界面,证明没有引入servlet,引入servlet方法请参照
在这里插入图片描述

实现访问MvcController.handleRequest方法,跳转到index.jsp页面

配置映射处理器-BeanNameUrlHandlerMapping

配置映射处理器,在springMVC-servlet.xml添加,class值在springframework:spring-webmvc:4.3.14–>org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
springMVC-servlet.xml内容如下
在这里插入图片描述
springMVC-servlet.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置映射处理器-->
    <bean name="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    <bean name="/test1/mvc" class="com.demo.controller.MvcController"></bean>
</beans>

在这里插入图片描述
MvcController.class文件内容如下:

package com.demo.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class MvcController implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws Exception {
        ModelAndView mv=new ModelAndView();
        //默认为 转发
         mv.setViewName("/index.jsp");
        //redirect:重定向
       // mv.setViewName("redirect:/index.jsp");
        // forward 请求转发
      //  mv.setViewName("forward:/index.jsp");
        return mv;
    }
}
配置映射处理器 - SimpleUrlHandlerMapping

SimpleUrlHandlerMapping映射处理器:可以实现多个路径对应一个controller
springMVC-servlet.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置映射处理器-->
    <!--beanNameUrlHandlerMapping 映射处理器-->
   <!-- <bean name="beanNameUrlHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    <bean name="/test1/mvc" class="com.demo.controller.MvcController"></bean>-->
    <bean id="testController" class="com.demo.controller.MvcController"></bean>
    <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <!--多个路径对应一个controller-->
                <prop key="/test.do">testController</prop>
                <prop key="/hello.do">testController</prop>
            </props>
        </property>
    </bean>
</beans>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值