Spring MVC简介

Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。从这样一个角度来说,Spring MVC和Struts、Struts2非常类似。Spring MVC的设计是围绕DispatcherServlet展开的,DispatcherServlet负责将请求派发到特定的handler。通过可配置的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图。Spring MVC请求处理的整体流程如图:

Spring3.x中定义一个控制器类,必须以@Controller注解标记。当控制器类接收到一个请求时,它会在自己内部寻找一个合适的处理方法来处理请求。使用@RequestMapping注解将方法映射到一些请求上,以便让该方法处理那些请求。这种方法就像一般的类中的方法,方法名参数列表和返回值并不像Struts2之类的框架有很强的限制。方法参数列表具体以及返回值具体都有哪些,这里先不细说。这篇博客的目的在于简单介绍如何快速上手使用Spring MVC框架。

控制器在选择好适合处理请求的方法时,传入收到的请求(根据方法参数类型,可能以不同的类型传入),并且调用该方法中的逻辑来进行处理(也可以是调用Service来真正处理)。方法逻辑可能也会在参数中添加或者删除数据。处理方法处理完之后,会委派给一个视图,由该视图来处理方法的返回值。处理程序的返回值并不代表视图的具体实现,可以只是String类型,代表视图名,甚至是void(这时候Spring MVC可以根据方法名或者控制器名找默认视图)。也不需要担心返回值只是视图名称的话,视图拿不到要显示的数据。因为方法参数对于视图来说也是可以拿到的。比如说,如果处理方法以Map为参数,那么这个Map对于视图也是可以拿到的。

返回的视图名称会返回给DispatcherServlet,它会根据一个视图解析器将视图名称解析为一个具体的视图实现。这里说到的视图解析器是一个实现了ViewResolver借口的Bean,它的任务就是返回一个视图的具体实现(HTML、JSP、PDF等等).

2.Spring MVC版本的helloworld

接下来我们用Spring MVC开发一个最最简单的Web应用。首先创建一个Dynamic Web Project。为了方便起见,我们将Spring dist目录下的所有jar包放到WEB-INF/lib目录下。这里我是用的是Spring3.1.x版本。此外还需要添加commons-logging包。

接下来在web.xml文件中配置DispatcherServlet,在web.xml文件中添加如下片段:

1
2
3
4
5
6
7
8
9
10
11
<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

这里我们将DispatcherServlet命名为hello,并且让它在web项目一启动就加载。接下来我们需要在WEB-INF目录下创建一个hello-servlet.xml的Spring配置文件。Spring官方文档上推荐的默认的文件名是[servlet-name]-servlet.xml文件,这里servlet-name叫hello,因此,这个文件也就是叫hello-servlet.xml。在这个文件中可以定义各种各样的Spring MVC需要使用的Bean。需要说明的是,对于整个Web项目中的Spring配置文件中定义的Bean在这个配置文件中是可以继承的,反过来不成立。上面我们将所有的请求都交给DispatcherServlet。

现在我们定义一个控制器类HelloController:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package springmvc.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public class HelloController {
     
    @RequestMapping(value="/hello",method=RequestMethod.GET)
    public String sayHello(Model model) {
        model.addAttribute("msg", "Hello, World!");
        return "hello";
    }
}

首先通过@Controller注解标示这个类是一个控制器,接下来通过@RequestMapping注解为制定方法sayHello处理哪些请求,在这个例子中,sayHello方法仅仅处理GET类型的/hello请求。

sayHello方法接收一个org.springframework.ui.Model类型的参数model,SpringMVC会自动将请求参数封装进model中,我们可以简单的把model理解为一个Map。我们在方法中从model中取出参数person的值并且打印出来,接下来往model中添加一个属性msg,值为"Hello,World!",然后返回视图名称hello。

接下来我们需要在Spring MVC配置文件中配置一个视图解析器,我们看看hello-servlet.xml的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
    xsi:schemaLocation="
 
    <!-- 默认的注解映射的支持 -->
    <mvc:annotation-driven />
    <!--启用自动扫描  -->
    <context:component-scan base-package="springmvc.controller" />
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

前面没什么好说的,但是注意添加了mvc名称空间,接下来启用了spring的自动扫描,并且设置了默认的注解映射支持。这里需要重点解释的是配置文件中的那个bean。它的类型是是Spring MVC中最常用的一种视图解析器,当然还有很多其他的类型,由于这篇博客的重点在于简单的介绍Spring MVC,因此不重点介绍,后续博文会补充。prefix属性是指视图前缀,suffix是视图后缀,这里配置的是.jsp,我们在控制器的方法sayHello中返回的是hello,再结合这里的配置,对应的完整的视图是:/WEB-INF/jsp/hello.jsp。接下来我们完成这个视图,我们只是简单的取出我们放的信息msg:

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello.jsp</title>
</head>
<body>
    ${msg}
</body>
</html>

接下来部署应用,我们访问http://localhost:8080/springmvc/hello ,会显示视图的内容,并且取出了msg的内容:

就这样一个简单的Spring MVC的Web应用就ok了。

author:wawlian
save me from myself

Spring MVC简介的更多相关文章

  1. 第63节:Java中的Spring MVC简介笔记

    前言 感谢! 承蒙关照~ Java中的Spring MVC简介笔记 MVC简介 Spring MVC 基本概念 Spring MVC 项目搭建 maven 使用Spring MVC进行开发 实现数据绑 ...

  2. Spring MVC 简介及入门小例子

    说明:文章内容全部截选自实验楼教程[Spring MVC 简易教程] 一.什么是 Spring MVC Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring ...

  3. Spring MVC简介 2.5 Spring MVC执行的流程

    package org.fkit.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http ...

  4. Spring MVC 简介

  5. Spring MVC——基础(简介,使用,地址映射)

    Spring MVC简介 重点Spring MVC的处理流程 Spring MVC特点 Spring MVC的使用 将相应的JAR包导入lib文件下 配置相关webxml 配置servlet-mvcx ...

  6. Spring MVC基础入门

    Spring MVC简介 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱 ...

  7. 相识不易,要懂珍惜----------Spring Mvc

    一.Spring Mvc简介 Spring Mvc也叫Spring Web Mvc,属于表现层额框架.Spring Mvc是Spring框架的一部分,是在Spring3.0后发布的. 二.Spring ...

  8. Spring MVC Web框架

      1. Spring MVC简介 Spring MVC是java EE平台请求驱动类型的轻量级Web框架,使用了MVC设计模式的思想,spring框架的主要优势之一就是分层架构,分层架构允许选择使用 ...

  9. Spring mvc 模式小结

    http://www.taobaotesting.com/blogs/2375 1.spring mvc简介 Spring MVC框架是一个MVC框架,通过实现Model-View-Controlle ...

随机推荐

  1. poj 3262 Protecting the Flowers

    http://poj.org/problem?id=3262 Protecting the Flowers Time Limit: 2000MS   Memory Limit: 65536K Tota ...

  2. android selector 开始自定义样式

    Selector的结构描述: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:a ...

  3. Excel应该这么玩——6、链接:瞬间转移

    上一篇中提到通过命名表格来管理基础数据,这样会让数据更规范.如果有很多个基础数据表,需要查找或者修改其中的一个,可以通过名称框中下拉来定位. 但是当表格较多的时候,通过下拉选择的方式就不是很好定位了. ...

  4. 浮动【电梯】或【回到顶部】小插件:iElevator.js

    iElevator.js 是一个jquery小插件,使用简单,兼容IE6,支持UMD和3种配置方式,比锚点更灵活. Default Options _defaults = { floors: null ...

  5. java 使用 集合 制作学生管理系统

    以上是文件组织结构 下面是个.java的具体代码: package com.collection.students.pojo; public class Student { private Strin ...

  6. Android 6.0 权限请求

    在申请权限之前一定要在清单配置文件中添加该权限private static final int MY_PERMISSIONS_REQUEST_RECORD_AUDIO = 1; //随便定义 publ ...

  7. python_函数

    一.map 遍历序列,对序列中每个元素进行操作,最终获取新的序列 li = [11,22,33,44] new_list = map(lambda a: a + 100,li) print(new_l ...

  8. C语言-《通讯录》

    黑白的通讯录 --1-- 需求分析 1.1 需求 1.2 原型展示 1.3 功能分析 --2-- 代码实现 2.1 外部声明.变量.宏 2.2 模块实现 ----------------------- ...

  9. 数据持久化以及DAO模式的简单使用

    持久化:(是将程序中的数据在瞬时状态和持久状态间转换机制)        即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然 ...

  10. zigbee学习之路(十一):看门狗

    一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...