SpringMVC工作流程和Demo示例

SpringMVC是Spring下的一个模块,与Spring自然无缝衔接,相比Structs2我更喜欢SpringMVC。这篇博客介绍一下SpringMVC的基本工作流程最后会附上一个小demo可供演示。
先上一张图:


SpringMVC工作流程和Demo示例_第1张图片

这张图展示了SpringMVC大致的工作流程,下面开始逐步讲解:

  1. 用户通过浏览器发送一个Http给Web应用。
  2. 如果该请求与web.xml中DisPatcherServlet的配置匹配,则将该请求交由DispatcherServlet处理。
  3. DispatcherServlet根据请求的信息URL、HTTP处理器等信息以及HandlerMapping的配置找到处理请求的Handler(一般是Controller)。
  4. 找到Handler后,通过HandlerAdapter对Handler进行封装,使用统一的接口来调用Handler.
  5. 在Handler完成业务处理之后返回一个ModelAndView给DispatcherServlet,ModelAndView,顾名思义,其中包含一个逻辑视图名和模型数据信息。
  6. 然后DisPatcherServlet调用ViewResolver完成逻辑视图名到真实的视图对象的解析。
  7. 当得到真实的视图对象View后,DispatcherServlet会用这个View对ModelAndView中的视图对象进行渲染。
  8. 最终返回客户端一个Http相应,可能是HTML页面,也可能是一个图片等。

下面做一个demo来实践一下整个过程:

  • 先用IDEA创建一个空的的maven工程(也可以new->project->maven->勾选create from archetype->选中webapp,但感觉有问题)。然后按照web应用目录结构手动创建一个webapp及其子目录。
  • 在pom.xml中添加依赖,最终结果如下:


    4.0.0

    SpringMVC-Demo
    springmvc-demo
    1.0-SNAPSHOT

    


        
            org.springframework
            spring-webmvc
            4.3.9.RELEASE
        

        
            javax.servlet
            jstl
            1.2
        
    


    war




注意要添加jstl依赖,否则会报错。

  • 配置web.xml和xxx-servlet.xml文件,配置如下:
    web.xml



    Springmvc-demo

    
        vzard
        org.springframework.web.servlet.DispatcherServlet
        1
    

    
        vzard
        /
    
    
        index.jsp
    
    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        encodingFilter
        /*
    

vzard-servlet.xml




    
    

    
    

    
    

    
    
    
        
        
        
    



这里要注意的是还要添加一个applicationContext.xml文件,这个文件是Spring的全局配置文件,亲测不配置会报错,里面可以不配置东西,但是这个文件一定要有。

applicationContext.xml





  • 然后就是业务逻辑分析部分,这个demo要做的事是:开启应用-->进入欢迎页,点击注册-->进入注册页面,输入信息,点击提交-->进入注册成功页面,显示用户信息
  • 业务逻辑实现:
    UserController类:
package org.vzard.Controller;

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 org.vzard.domain.User;
import org.vzard.service.UserService;


/**
 * Created by V-zar on 2017/8/25.
 */
@Controller

public class UserController {
    // @Autowired(required = false)
    //UserService userService;

    @RequestMapping("/")
    public String index() {
        return "index";
    }

    @RequestMapping("/adduser")
    public String addUser() {
        return "adduser";
    }


    @RequestMapping(value = "/success")
    public ModelAndView register(User user) {
        //userService.creatUser(user);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("success");
        modelAndView.addObject("user", user);
        return modelAndView;
    }

}

User类:


package org.vzard.domain;

/**
 * Created by V-zar on 2017/8/25.
 */
public class User {
    public String userName;
    public String password;
    public String realName;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }
}

前端界面引入了Bootstrap(然并卵,还是巨丑,懒得写界面):
index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    
    
    
    SpringMVC Demo 首页

    
    

    
    
    


WELCOME

">

adduser.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    
    
    
    SpringMVC Demo 首页

    
    

    
    
    


">
用户名
密码
姓名

success.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>



    
    
    
    
    SpringMVC Demo 首页

    
    

    
    
    


欢迎,${user.userName}

您的密码是:${user.password}

您的真实姓名是:${user.realName}

运行结果:


SpringMVC工作流程和Demo示例_第2张图片
SpringMVC工作流程和Demo示例_第3张图片
SpringMVC工作流程和Demo示例_第4张图片

完整demo可在我的github上clone运行:Demo
运行环境&工具:

  • IDEA
  • JDK 1.8
  • Tomcat 8.5

你可能感兴趣的:(SpringMVC工作流程和Demo示例)