创建一个简单的SpringMVC框架

  昨天写了一个单个Mybatis框架的小例子,今天来写一个SpringMVC框架的小例子。来复习一下框架的一些知识。主要是理解框架的执行流程。下面就直接开始吧。

  SpringMVC框架是现在比较流行的MVC框架,类似于Struts2,它的好处有很多,最重要的大概就是它是Spring的衍生产品,属于SpringFrameWork的后续产品,所以不需要特别的jar包,直接就可以和Spring整合,另外SpringMVC框架的设计思想是:控制器是基于方法的拦截,不是Struts2基于实例的拦截,所以SpringMVC对于服务器的内存的消耗要小于Struts2。剩下的优点我可能不太了解,欢迎大家补充。

  实现SpringMVC的小例子比较简单,和前面Mybatis的例子一样,也需要几个步骤。

  1.导入jar包,因为SpringMVC是SpringFrameWork的后续产品,所以需要的jar包和Spring没有什么区别,下面就举出本次小例子需要的jar包。

  2.编写Controller类。Controller类相当于Struts2中的Action,只不过Action是实例拦截用户请求的,Controller是方法拦截用户请求的。因为SpringMVC配置文件比较少,只有一个核心配置文件,所以大部分的配置都是需要注解来完成的。代码如下:

package com.psq.springmvctrain.controller;

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

@Controller
public class HelloWorld {
	/**
	 * hello方法
	 */
	@RequestMapping("hello")
	public ModelAndView hello() {
		
		System.out.println("hello world");
		
		//模型视图,springMVC自带的
		ModelAndView mav = new ModelAndView();
		
		//设置的模型数据,用于传递到jsp页面
		mav.addObject("msg", "hello springmvc...");
		
		//设置打开的视图名字
		mav.setViewName("/WEB-INF/jsp/hello.jsp");
		
		return mav;
	}
}

   3.配置SpringMVC核心配置文件springmvc.xml。这个文件主要是配置SpringMVC中的bean对象,还有就是配置映射器,适配器,视图解析器(SpringMVC三大组件)。一些细节的问题代码中都有注释,都有详细的介绍。代码如下:

<?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">
    
    <!-- 配置@Controller处理器,包扫描器 -->
    <context:component-scan base-package="com.psq.springmvctrain.controller" />
    
    <!-- springmvc三大组件,处理器映射器,处理器适配器,视图解析器 -->
    <!--
                     映射器与适配器必需配套使用,如果映射器使用了推荐的RequestMappingHandlerMapping,
                    适配器也必需使用推荐的RequestMappingHandlerAdapter。 
     -->
    <!-- 配置处理器映射器 -->
    <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> -->
    
    <!-- 配置处理器适配器 -->
    <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> -->
    
    <!-- 注解驱动配置,代替映射器与适配器的单独配置,同时支持json响应(推荐使用) -->
    <mvc:annotation-driven />
    
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    
        <!-- 配置视图响应的前缀 -->
        <property name="prefix" value = "/WEB-INF/jsp/" />
        <!-- 配置视图响应的后缀 -->
        <property name="suffix" value = ".jsp" />
    
    </bean>
</beans>

   4.编写jsp页面,提供测试。这个页面写什么无所谓,主要就是 测试使用,hello world即可。没有什么难度。要注意的就是jsp文件夹的位置要在WEB-INF目录下,可以防止用户的直接访问。

  5.配置前端控制器,在web.xml中配置和SpringMVC相关的一些配置,没有什么要讲的点,主要代码如下:

  <!-- 配置前端控制器 -->
  <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:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <!-- 配置拦截路径 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

   6.测试。测试就是最后一步了,要注意在web.xml中配置了拦截的路径,所以在访问的时候要注意请求的地址是以.action为结束的。

  编写的是一个小例子,甚至没有连接数据库,这里也不再讲和Mybatis的整合,大概在复习完Spring后,我会整合三个框架。我还是认为,最主要的学习是学习框架的思想和框架的具体流程,使用框架只是一个入门。剩下的就没有什么了。下面就说一说SpringMVC框架的具体流程。

  用户请求一个地址,首先web.xml会先拿到地址,首先进行判断,找到处理这个请求的servlet,在加载SpringMVC的核心配置文件。在核心配置文件中会加载所有的Controller类,因为springmvc.xml中声明了包扫描器,会扫描所有的Controller类,在去对应的Controller类中找到和用户请求相同的方法。处理请求后,在返回视图。代码执行的流程图如下所示:

  

  以上就是代码的执行流程图,但是单看这个还是很难理解SpringMVC的执行流程,下面就在说说SpringMVC的架构。

  SpringMVC中最重要的就是三大组件。处理器映射器,处理器适配器,视图解析器。三大组件的先后顺序也是这样,用户请求先交给前端控制器,在调用处理器映射器,返回处理执行链。在调用处理器适配器,适配器决定由那个处理器处理,处理完成后返回一个模型和视图,在交给视图解析器决定返回的视图。最后视图解析器返回给前端控制器,前端控制器在响应用户。最后完成。具体的结构图如下:

  上面的两个图不是我的,如果有问题,联系我,我删除。

  上面就是SpringMVC的一些具体流程,现在可以完成和理解本次的简单的例子了,但是对于开发还是远远不够,还是有很多问题,这里也不再叙述,因为本博客只是理解SpringMVC的思想和流程。但是还是列出具体的问题,防止自己忘记。

  首先是:在实际的开发中,Controller中会有一些参数要传进去,如何传参是个问题,SpringMVC支持request和response传参,但是很麻烦,所以可以直接传pojo类,基本类型,包装的pojo类。具体的传参还是要看个人的开发。

  其次是:映射器和适配器必须要配套使用,还有就是我的代码本来使用映射器和适配器是过时的,所以进行了修改,具体的修改有些麻烦,不再叙述。提个醒,自己没有忘就可以了。

  在其次就是:SpringMVC和Mybatis的整合问题,其实可以直接三个框架整合,因为SpringMVC是和Spring无缝整合的,所以后面会在写一个博客直接整合三个框架。

  最后就是:个人认为Spring-Boot和Maven虽然在一定程度上方便了开发,但是这些工具也在一定程度上提高了入门的门槛,工具的使用看自己的理解,菜鸟像我还是先慢慢写,最后理解了在使用这些工具会更好。这是个人的理解,勿喷。

  结束。

 

posted on 2018-07-29 10:43  丶烟雨丶  阅读(541)  评论(0编辑  收藏  举报

导航