深入理解Spring MVC概要与环境配置

时间:2022-01-07 23:20:31

一、mvc概要

mvc是模型(model)、视图(view)、控制器(controller)的简写,是一种软件设计规范,用一种将业务逻辑、数据、显示分离的方法组织代码,mvc主要作用是降低了视图与业务逻辑间的双向偶合。mvc不是一种设计模式,mvc是一种架构模式。当然不同的mvc存在差异。

深入理解Spring MVC概要与环境配置

在web早期的开发中,通常采用的都是model1。model1中,如图所示主要分为两层,视图层和模型层。model2把一个项目分成三部分,包括视图、控制、模型。这样不仅提高的代码的复用率与项目的扩展性,且大大降低了项目的维护成本。model 1模式的实现比较简单,适用于快速开发小规模项目,model1中jsp页面身兼view和controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。model2消除了model1的缺点。

深入理解Spring MVC概要与环境配置

model1

深入理解Spring MVC概要与环境配置

model2

常见的服务器端mvc框架有:struts、spring mvc、asp.net mvc、zend framework、jsf;常见前端mvc框架:angularjs、reactjs、backbone;由mvc演化出了另外一些模式如:mvp、mvvm。

二、spring mvc介绍

spring mvc是spring framework的一部分,是基于java实现mvc的轻量级web框架。spring mvc的特点:

1、轻量

2、高效

3、与spring兼容性好

4、功能强大

restful、数据验证、格式化、绑定机制、本地化、主题等

5、简洁灵活

spring的web框架围绕dispatcherservlet设计。 dispatcherservlet的作用是将请求分发到不同的处理器。从spring 2.5开始,使用java 5或者以上版本的用户可以采用基于注解的controller声明方式。官网上说spring的web模块提供了大量独特的功能,包括:

清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 servlet分发器(dispatcherservlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等等。 每一个角色都可以由一个专门的对象来实现。

强大而直接的配置方式:将框架类和应用程序类都能作为javabean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用。

可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如action/actionform)继承。

可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象, 需要手动解析它并转换到业务对象。

可定制的handler mapping和view resolution:spring提供从最简单的url映射, 到复杂的、专用的定制策略。与某些web mvc框架强制开发人员使用单一特定技术相比,spring显得更加灵活。

灵活的model转换:在springweb框架中,使用基于map的 键/值对来达到轻易地与各种视图技术的集成。

可定制的本地化和主题(theme)解析:支持在jsp中可选择地使用spring标签库、支持jstl、支持velocity(不需要额外的中间层)等等。

简单而强大的jsp标签库(spring tag library):支持包括诸如数据绑定和主题(theme) 之类的许多功能。它提供在标记方面的最大灵活性。

jsp表单标签库:在spring2.0中引入的表单标签库,使得在jsp中编写 表单更加容易。

spring bean的生命周期可以被限制在当前的http request或者http session。 准确的说,这并非spring mvc框架本身特性,而应归属于sping mvc使用的webapplicationcontext容器。

三、第一个spring mvc 项目:hello world

3.1、通过maven新建一个web项目

在eclipse中新建maven项目,选择“create a simple project”,创建一个简单项目,不选择模板。

深入理解Spring MVC概要与环境配置

修改层面信息,更加详细的内容请参考前面写过的文章:

深入理解Spring MVC概要与环境配置

将webcontent中的所有内容复制到webapp目录下,并删除webcontent目录,删除后的结果如下:

深入理解Spring MVC概要与环境配置

修改项目的部署信息,删除测试文件夹,添加webapp为项目根目录:

深入理解Spring MVC概要与环境配置

 如果不打算在pom.xml中添加对server runtime的依赖,则这里必须手动添加依赖,如下图所示:

深入理解Spring MVC概要与环境配置

另外如果pom.xml报错,修改任意位置保存。

3.2、添加依赖的jar包

1、修改pom.xml文件、添加jar包的依赖,主要有:spring框架核心库、spring mvc、jstl等,具体信息如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<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.zhangguo</groupid>
  <artifactid>springmvc01</artifactid>
  <version>0.0.1</version>
  <packaging>war</packaging>
 
  <properties>
    <project.build.sourceencoding>utf-8</project.build.sourceencoding>
    <spring.version>4.3.0.release</spring.version>
  </properties>
 
  <dependencies>
    <!--spring框架核心库 -->
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-context</artifactid>
      <version>${spring.version}</version>
    </dependency>
    <!-- spring mvc -->
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-webmvc</artifactid>
      <version>${spring.version}</version>
    </dependency>
    <!-- jstl -->
    <dependency>
      <groupid>javax.servlet</groupid>
      <artifactid>jstl</artifactid>
      <version>1.2</version>
    </dependency>
</dependencies>
</project>

当依赖成功时,会加载的jar包如下:

深入理解Spring MVC概要与环境配置

3.3、修改web.xml注册中心控制器dispatcherservlet

spring mvc框架像许多其他mvc框架一样, 请求驱动,围绕一个中心servlet分派请求及提供其他功能,dispatcherservlet是一个实际的servlet (它继承自httpservlet 基类)。如下图所示当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

深入理解Spring MVC概要与环境配置

深入理解Spring MVC概要与环境配置

修改web.xml文件注册该servlet,修改后的web.xml文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  id="webapp_id" version="3.0">
 
  <servlet>
    <!--名称 -->
    <servlet-name>springmvc</servlet-name>
    <!-- servlet类 -->
    <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class>
    <!-- 启动顺序,数字越小,启动越早 -->
    <load-on-startup>1</load-on-startup>
    <init-param>
      <!--springmvc配置参数文件的位置 -->
      <param-name>contextconfiglocation</param-name>
      <!--默认名称为servletname-servlet.xml -->
      <param-value>classpath*:springmvc-servlet.xml</param-value>
    </init-param>
  </servlet>
 
  <!--所有请求都会被springmvc拦截 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
 
</web-app>

3.4、添加spring mvc配置文件

在src/main/java源代码目录下添加springmvc-servlet.xml配置文件,配置的形式与spring容器配置基本类似,为了支持基于注解的ioc,设置了自动扫描包的功能,具体配置信息如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?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"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  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-4.3.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
 
  <!-- 自动扫描包,实现支持注解的ioc -->
  <context:component-scan base-package="com.zhangguo.springmvc01" />
 
  <!-- spring mvc不处理静态资源 -->
  <mvc:default-servlet-handler />
 
  <!-- 支持mvc注解驱动 -->
  <mvc:annotation-driven />
 
  <!-- 视图解析器 -->
  <bean
    class="org.springframework.web.servlet.view.internalresourceviewresolver"
    id="internalresourceviewresolver">
    <!-- 前缀 -->
    <property name="prefix" value="/web-inf/view/" />
    <!-- 后缀 -->
    <property name="suffix" value=".jsp" />
  </bean>
</beans>

在视图解析中我们把所有的视图都存放在/web-inf/目录下,这样是为了视图安全,因为这个目录客户端不能直接访问。

3.5、创建helloworld控制器

在src/main/java源代码目录下创建包com.zhangguo.springmvc01.controller,在包下创建一个普通的类:helloworld,具体代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.zhangguo.springmvc01.controller;
import org.springframework.stereotype.controller;
import org.springframework.ui.model;
import org.springframework.web.bind.annotation.requestmapping;
 
@controller
@requestmapping("/hello")
public class helloworld {
  @requestmapping("/sayhi")
  public string sayhi(model model) {
    model.addattribute("message", "hello spring mvc!");
    return "sayhi";
  }
}

注解为@controller是为了让spring ioc容器初始化时自动扫描到;@requestmapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/hello/sayhi;方法中声明model类型的参数是为了把action中的数据带到视图中;方法返回的结果是视图的名称sayhi。

3.6、创建视图

在web-inf/view目录中创建视图,视图将从action中带回的信息展示,具体内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>hello spring mvc!</title>
</head>
<body>
  <h2>${message}</h2>
</body>
</html>

3.7、测试运行

启动tomcat运行项目,请注意查看启动信息,如果有异常应该先解决异常信息,运行成功后的结果如下所示:

深入理解Spring MVC概要与环境配置

3.8、示例下载

项目地址:springmvcdemo.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/best/p/5653916.html