欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-02 20:11:16
一、mvc概要 mvc是模型(model)、视图(view)、控制器(controller)的简写,是一种软件设计规范,用一种将业务逻辑、数据、显示分离的方法组织代码,m...

一、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等,具体信息如下:

<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文件如下:

<?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,设置了自动扫描包的功能,具体配置信息如下:

<?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,具体代码如下:

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中带回的信息展示,具体内容如下:

<%@ 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_jb51.rar

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