`
ttwang
  • 浏览: 332046 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

Spring MVC设计模式入门

阅读更多


作为一个 J2EE 的开发者,我们基本上是开发基于 WEB 的应用系统。事实上,工作流,状态管理以及验证都是需要解决的重要功能。而 HTTP 协议的无状态性决定了这些功能都不容易实现。 Spring 的 WEB 框架就是来帮助我们解决这些问题的。使用 Spring ,我们可以让 WEB 框架自动将传递进来的请求参数填充到模型对象中,同时提供验证和错误处理。还可以管理用户在 WEB 表单中创建的对象的状态。在了解 SpringMVC 之前,我们先来复习下 MVC.

MVC 从逻辑上把应用分为模型组件,视图组件和控制器组件。其中控制器组件又可以细分为:前端控制器组件和后端控制器组件。



我们来看一下 MVC 的基本工作流程:



首先是客户端(通常是浏览器)发出一个请求。第一个接受这个请求的组件一般是一个前端控制器。它将不同的请求交给不同的后端控制器来处理,而在后端控制器里面又可以调用相应的模型对象来处理具体的业务逻辑,最后再返回一个特定的视图响应给客户端。



现在大家应该可以理解 MVC 的设计思想了。拿我们比较熟悉的 struts 框架来说,前端控制器就是 ActionServlet, 后端控制器就是 Action. 请求的 URL 和后端控制器的映射关系在 struts-config.xml 上的 <action-mappings> 里面配置,模型对象就是我们平常写的 DAO/DTO ,返回的视图类型一般就是 jsp 了。



那么,在 spring MVC 中又是怎样的呢 ? ,我们先按上面对号入座地说一下。第一个接受这个请求的前端控制器叫 DispatcherServlet ,后端控制器叫 Controller 。负责处理请求 URL 和后端控制器映射的叫 HandMapping ,它有多种类型,比较灵活,也是在一个 xml 文件上进行配置。负责业务逻辑处理的模型对象一般也是我们平常写的 DAO/DTO 组件。只是它最后的返回更灵活, Controller 返回一个 ModelAndView 对象给 DispatcherServlet , ModelAndView 可以携带一个视图对象,也可以携带一个视图对象的逻辑名。如果携带的是一个视图对象的逻辑名,那 DispatcherServlet 需要一个 ViewResolver 来查找用于渲染回应的视图对象。最后, DispatcherServlet 将请求分派给 ModelAndView 对象指定的视图对象。视图对象负责渲染返回给客户的回应。



       我们学习知识,一样要注意运用类比迁移的方法。有人说,我学会了 struts ,但学不会 springMVC 。这是说不过去的。因为二者的思想完全一致。所以,我们只需要学习它们不一样的地方就可以啦。好,我们现在先跑一个最简单的例子,让大家对构建 SpringMVC 的基本步骤有个直观的认识。大家要边跑边跟 struts 做比较。

(1) 建立动态 web 工程,导入 spring 的 jar 包。



(2) 配置 DispatcherServlet



DispatcherServlet 是 SpringMVC 的核心,将下面 Servlet 的注册信息登记在 web.xml 中。一定要记住: Servlet 跟伴侣一样,要结婚,先得注册登记!

< servlet >

  < servlet-name > test </ servlet-name >   < servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >

  < load-on-startup > 1 </ load-on-startup >

  </ servlet >



  < servlet-mapping >

  < servlet-name > test </ servlet-name >

  < url-pattern > *.do </ url-pattern >

  </ servlet-mapping >



(3) 编写 Controller ,做核心配置文件,并配置 url 和 Controller 的映射



package com.wepull.test;



import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;



public class HelloController implements Controller{

    public ModelAndView handleRequest(HttpServletRequest request,

              HttpServletResponse response) throws Exception {

             request.setAttribute( "hello" , "welcome to spring!" );

             return new ModelAndView( " welcome " );

             }

}

我们知道 Struts 有个 XML 格式的核心配置文件, springMVC 当然也有,在 WEB-INF 下新建一 XML 文件 : test -servlet.xml. 注意,这里的 test 取决于 servlet 的名字 . 当 DispatcherServlet 载入后,它将试图从这个文件中载入应用上下文。

<? xml version = "1.0" encoding = "UTF-8" ?>

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >

< beans >

    <!-- 缺省映射处理器,不需要明确声明,但声明后就非常清楚使用的是哪个映射处理器   -->   < bean id = "beanNameUrlMapping"

    class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" >

    </ bean >

    <!-- 这里的 name 属性有两个职责,既定义 Bean 的名字,也定义需要这个控制器处理的 URL 样式 -->

    < bean name = "/hello.do"

       class = "com.wepull.test.HelloController" >

    </ bean >

</ beans >

上面可能有人奇怪,为什么不用 id 属性,而设置 name 属性。这里是因为 URL 中含有 XML id 属性非法字符——特别是斜杠( / ) ;



(4) 配置一个视图解析器将控制器与 JSP 结合起来。



将解析器的配置片段加到上面的 test-servlet.xml 中。

< bean id = "viewResolver"

    class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >

       < property name = "prefix" value = "/WEB-INF/jsp/" />

       < property name = "suffix" value = ".jsp" />

</ bean >

InternalResourceViewResolver 在 ModelAndView 返回的视图名前加上 prefix 属性配置的前缀 , 再在最后加上 suffix 属性配置的后缀。由于 HelloController 返回的 ModelAndView 中视图名为 welcome, 所以 InternalResourceViewResolver 将在 /WEB-INF/jsp/welcome.jsp 处查找视图。



(5) 编写呈现给用户的 jsp 文件。



/WEB-INF/jsp/welcome.jsp

<%@ page contentType = "text/html; charset=UTF-8" %>

<%@ page isELIgnored = "false" %>

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html xmlns = "http://www.w3.org/1999/xhtml" >

  < head >

  < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />

  < title > Hello World! </ title >

  </ head >

  < body >

  < h2 >

   ${hello}

  </ h2 >

  </ body >

</ html >



完成后启动服务器,在浏览器地址栏上输入 http://locahost:8080/projectName/hello.do       就可以访问了。

       对照一下,我们发现 SpringMVC 跟 Struts 大同小异。只是有两处映射, SpringMVC 做的相对灵活。哪两处呢?

(1) url 和动作 ( 后端控制器 ) 的映射。

springMVC 里有个映射处理器 (HandlerMapping) 的概念。它实际上是一个处理器映射 Bean, 用来将一个控制器指定到一个 URL 上。 Spring 提供了三种有用的 HandlerMapping 的实现:

—— BeanNameUrlHandlerMapping

       根据控制器的名字将控制器映射到 URL

—— SimpleUrlHandlerMapping

       用上下文配置文件中定义的属性集合将控制器映射到 URL

—— CommonsPathMapHandlerMapping

       使用控制器代码中的元数据将控制器映射到 URL 

(2) 逻辑视图名和视图对象的映射。

springMVC 里还有个视图解析器 (ViewResolver) 的概念。它决定了 ModelAndView 对象的逻辑视图名如何解析成一个用于将结果渲染给用户的视图 Bean..Spring 有四种 ViewResolver 实现:

—— InternalResourceViewResolver

       将逻辑视图名解析成一个用模板文件 ( 如 JSP 和 Velocity 模板 ) 渲染的视图对象

—— BeanNameViewResolver

       将逻辑视图名解析成一个 DispatcherServlet 应用上下文中的视图 Bean

—— ResourceBundleViewResolver

       将逻辑视图名解析成一个 ResourceBundler 中的视图对象

—— XmlViewResolver

       从一个 XML 文件中解析视图 Bean, 这个文件是从 DispatcherServlet 应用上下文中分离出来的。

       好啦,今天就算是 SpringMVC 的一个入门。建议大家将 Struts 和 SpringMVC 对照着学习,那样效果会更好。与人分享,集思广益。希望大家都能够学习快乐,工作顺心。下次再见。
分享到:
评论

相关推荐

    Spring MVC 教程快速入门 深入分析

    Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,使用了IoC容器,支持RESTful风格的应用程序开发。Spring MVC通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发...

    Spring MVC

    - 文件:`Spring MVC设计模式入门.docx` 可能详细介绍了Spring MVC的设计模式基础,帮助初学者快速上手。 - 文件:`第一个Spring.docx` 可能是关于构建第一个Spring MVC应用的教程,涵盖了基本配置和简单Controller...

    精简源码-spring-mvc 入门级使用,亲测好用

    通过这个项目,你可以学习到如何使用 Spring MVC 构建 Web 应用,理解 MVC 设计模式,熟悉 Spring MVC 中的注解驱动编程,以及如何组织和调试一个基于 Spring MVC 的项目。这将是你踏入 Java Web 开发领域的重要一步...

    Spring mvc指南+Spring mvc入门

    首先,我们来理解 MVC 设计模式。MVC 将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑和数据管理,视图负责呈现用户界面,而控制器处理用户请求并协调模型和视图...

    spring mvc入门示例

    在开始Spring MVC的学习之前,首先需要理解MVC设计模式。MVC模式将应用程序分为三个主要部分:Model(模型)负责处理数据和业务逻辑,View(视图)负责显示数据,Controller(控制器)接收用户请求并调用模型进行...

    Spring MVC_快速入门分析篇

    1. 了解MVC设计模式。 2. 学习Spring的基础知识,如依赖注入。 3. 熟悉Servlet和JSP。 4. 阅读Spring MVC官方文档和教程。 5. 实践编写简单的Spring MVC项目。 6. 进一步研究数据绑定、拦截器、异常处理等高级特性。...

    Spring mvc(从入门到精通)

    Spring MVC 是一个基于 Java 的 Web 应用程序框架,基于模型-视图-控制器(MVC)模式。它提供了一个灵活的方式来开发 Web 应用程序,具有良好的可扩展性和灵活性。 Spring MVC 的核心组件 在 Spring MVC 中,...

    spring mvc - 入门

    Spring MVC 提供了一个模型-视图-控制器的设计模式,它将应用程序逻辑、用户界面和数据处理分离,使得开发更加模块化和易于维护。在 MVC 模式中: - Model(模型):代表业务逻辑和数据,通常由 Java 对象...

    Spring MVC 教程,快速入门,深入.rar_SpringMVC教程_spring mvc教程_springmvc

    它遵循MVC设计模式,其中模型负责处理数据,视图负责展示结果,而控制器则协调这两者之间的交互。 2. **组件解析**: - **DispatcherServlet**:它是Spring MVC的核心,负责接收HTTP请求,并根据配置分发到相应的...

    spring mvc 入门范例

    MVC设计模式将应用分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑,视图负责展示数据,而控制器接收用户请求,处理数据并转发到相应的视图。 2. **配置Spring MVC**: ...

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    接下来,文档讨论了Spring中的控制反转(IoC)和依赖注入(DI)的设计模式。IoC是一种设计原则,用于减少代码之间的耦合。在Spring框架中,IoC容器管理Java对象的生命周期和对象之间的依赖关系。通过IoC,对象被动地...

    Spring MVC入门项目

    本项目是一个专门为初学者设计的入门教程,旨在帮助大家快速掌握Spring MVC的基本概念和使用方法。 1. **Spring MVC 框架简介** Spring MVC 是 Spring 框架的一部分,它通过解耦业务逻辑、数据处理和用户界面,...

    spring mvc入门书籍

    2. **Model-View-Controller (MVC)**: 一种设计模式,Spring MVC 将应用程序分为三个主要部分:模型(Model)负责业务逻辑,视图(View)负责展示结果,控制器(Controller)协调模型和视图。 3. **@Controller**: ...

    spring3.0 mvc和rest入门例子

    它遵循MVC设计模式,有助于分离业务逻辑、数据处理和用户界面。在Spring 3.0版本中,Spring MVC引入了许多改进,包括增强的注解支持、更好的类型安全和简化配置等。 1. **注解驱动开发**:Spring 3.0 强化了对注解...

    Spring MVC 详细入门教程(含jar包)

    它是Spring框架的一个重要组成部分,遵循Model-View-Controller(MVC)设计模式,旨在简化Web应用的开发流程。本教程将带你一步步了解并掌握Spring MVC的基础知识。 一、Spring MVC 概述 Spring MVC 提供了丰富的...

    intellij idea 2017 spring mvc 入门

    无论你是Spring框架的新手,还是对MVC设计模式不熟悉,都可以通过这个教程快速入门。 【压缩包子文件的文件名称列表】:HelloSpring-master 这个文件名暗示了我们将通过一个名为"HelloSpring"的示例项目来学习...

    Spring mvc 入门向导

    在这个Spring MVC入门向导中,我们将深入探讨如何配置开发环境、理解Spring MVC的架构以及构建Web Store项目。 首先,配置Spring开发环境至关重要。这包括安装Java Development Kit (JDK),设置环境变量以确保Java...

    spring MVC的HelloWorld完整实例

    Spring MVC遵循模型-视图-控制器(MVC)设计模式,分离了业务逻辑、数据和用户界面。模型处理业务逻辑,视图负责展示结果,而控制器接收用户请求并调度模型和视图。 2. **DispatcherServlet**: 在Spring MVC中,...

    资料-10 Spring MVC入门程序.rar

    2. **MVC设计模式**:Model代表业务数据,View负责显示数据,Controller处理用户请求并更新Model,三者之间通过接口进行交互,实现了业务逻辑与展示逻辑的分离。 3. **Controllers**:在Spring MVC中,Controller是...

Global site tag (gtag.js) - Google Analytics