`
duanxw
  • 浏览: 8848 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring MVC入门使用

阅读更多

  Spring提供了DispatcherServlet,这个类不仅负责实现请求转发,还负责启动一个WebApplicationContext容器。 按照Spring一贯的IoC哲学,所有的Controller都是JavaBean,并由IoC容器统一管理。对于View,则采取了更灵活的处理方 式,Spring MVC允许使用不同的View实现,除了JSP外,还可以使用Velocity、Freemaker、XSLT等多种View技术。

总的来讲,要使用Spring MVC框架,需要以下步骤。

① 在web.xml中配置DispatcherServlet及URL映射。

② 编写IoC容器需要的XML配置文件,命名为<servlet-name>-servlet.xml,放到/WEB-INF目录下。例如,如果DispatcherServlet在web.xml中的配置名称为dispatcher,则Spring将寻找dispatcher- servlet.xml配置文件。

③ 在XML配置文件中定义URL映射方式和使用哪种View技术。

我们仍以SimpleMVC为基础,用Spring MVC框架来实现这个Web应用程序。在Eclipse中创建一个SpringMVC项目,结构如图7-21所示。

/web/WEB-INF/lib目录下的jstl.jar和standard.jar是JSP标准标签库,将在JSP视图中用到,/web/WEB-INF/c.tld是标签库的声明文件,稍后我们会在JSP视图文件中用到它们。

一、  配置DispatcherServlet
首先,在web.xml中配置DispatcherServlet,并将所有以“.html”结尾的URL全部映射到DispatcherServlet上,这样,用户仅从URL地址上无法得知服务器端后台使用了何种技术。

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

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <!-- spring dispatch servlet -->

    <servlet>

        <servlet-name>dispatcher</servlet-name>

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

        <load-on-startup>0</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>dispatcher</servlet-name>

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

    </servlet-mapping>

    <!-- 申明taglib,将在JSP中使用 -->

    <taglib>

        <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>

        <taglib-location>/WEB-INF/c.tld</taglib-location>

    </taglib>

</web-app>

和普 通的Spring应用程序稍有不同,对于Web应用程序,Spring的ApplicationContext是由DispatcherServlet加 载的,它会在/WEB-INF/下查找一个名称为<servletName> -servlet.xml的XML配置文件来初始化Spring Web应用程序的ApplicationContext。对于上例,我们在web.xml中定义DispatcherServlet的名称为 dispatcher,因此,相应的XML配置文件就必须是/WEB-INF/dispatcher-servlet.xml。

下一步便是编写dispatcher-servlet.xml配置文件,首先定义URL的映射方式(HandlerMapping)。Spring提供了几种常用的HandlerMapping。

1.使用SimpleUrlHandlerMapping

SimpleUrlHandlerMapping提供了最简单的URL映射,通过Properties将URL和Controller对应起来,配置示例如下。

<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet. handler.SimpleUrlHandlerMapping">

    <property name="mappings">

        <props>

            <prop key="/a.html">controllerA</prop>

            <prop key="/b.html">controllerB</prop>

        </props>

    </property>

</bean>

这种方式和Struts的配置类似。当用户请求一个URL时,Spring就在SimpleUrl HandlerMapping注入的Properties中查找对应的Controller。

2.使用BeanNameUrlHandlerMapping

BeanNameUrlHandlerMapping的实现更为简单,每个Controller的URL与其name属性对应,因此,只需要对每个Controller以URL作为name,就可以实现URL映射。配置示例如下。

<bean id="beanNameUrlHandlerMapping" class="org.springframework.web.servlet. handler.BeanNameHandlerMapping" />

<bean name="/a.html" class="example.chapter7.ControllerA" />

<bean name="/a.html" class="example.chapter7.ControllerB" />

之所以用Bean的name作为URL而不是id,是因为XML规范不允许在id标识中使用特殊字符“/”。当用户请求一个URL时,Spring将直接查找name为URL的Controller。

使用 SimpleUrlHandlerMapping的麻烦之处在于,添加或删除Controller时必须要对 SimpleUrlHandlerMapping做相应的修改,而BeanNameUrlHandlerMapping则无需手工编写映射,只需要在每个 Controller中仔细定义name属性。如果使用XDoclet自动生成配置文件,则可以将name在Controller的注释中定义,维护起来 更加方便。因此,我们推荐首先考虑使用BeanNameUrlHandlerMapping。事实上,如果没有在XML配置文件中定义任何 UrlHandlerMapping,则Spring MVC默认使用BeanNameUrlHandlerMapping。

Spring还提供了一个 ControllerClassNameHandlerMapping,它和BeanName UrlHandlerMapping类似,不过是将Controller的ClassName和对应的URL关联起来,由于这种方式灵活性欠佳,实际使用 较少。

也可以混合使用多种 UrlHandlerMapping,但是必须为每个UrlHandlerMapping指定order属性来表示优先级,order值越小优先级越高, Spring会先查询优先级高的UrlHandlerMapping。若找到了对应的Controller,就不再继续查询,否则,按照优先级依次查询, 直到找到为止。若所有的UrlHandlerMapping都无法返回一个合适的Controller,并且没有设置默认的Controller时,就会 返回给客户端一个“404 Not Found”错误,表示不存在这个URL。

下一步需要为Spring MVC指定一个ViewResolver(视图解析器),指示使用何种视图技术,以及如何解析ModelAndView返回的逻辑视图名称。

这里我们直接给出使用JSP视图的配置,对于其他的视图技术将会在后面讲到。

<bean id="viewResolver" class="org.springframework.web.servlet.view. InternalResourceViewResolver">

    <property name="viewClass" value="org.springframework.web.servlet. view.JstlView" />

    <property name="prefix" value="/" />

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

</bean>

prefix和suffix将和逻辑视图名称一起组合成为实际视图的路径。例如,对于上例,若返回一个new ModelAndView("test", model),则实际的视图路径由prefix+逻辑视图名+suffix这3部分构成。

/test.jsp

定义 前缀(prefix)使得视图文件无论放在何处都可以通过修改前缀来实现位置无关性(当然,必须在web目录内),许多应用程序将其放在/WEB-INF 目录下,使得用户无法通过URL直接访问视图文件以保证视图文件的安全;定义后缀(suffix)可以在将来用另一种视图技术(例如,Velocity) 取代现在的JSP视图,只需将后缀从“.jsp”更改为“.vm”即可,而不必更改源代码中的逻辑视图名。总之,一切目标都是为了实现最大限度的解耦。

二、实现Controller
实现了org.springframework.web.servlet.mvc.Controller接口的Bean都可以作为有效的Controller来处理用户请求。例如,一个最简单的TestController。

public class TestController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServlet Response response) throws Exception {

        String name = request.getParameter("name");

        if(name==null)

            name = "spring";

        Map model = new HashMap();

        model.put("name", name);

        model.put("time", new Date());

        return new ModelAndView("test", model);

    }

}

注 意,上例的Controller接口和返回值ModelAndView都是在Spring框架中定义的,这和SimpleMVC项目中我们自己定义的 Controller接口和ModelAndView类所在的包是不同的。在SimpleMVC项目中,我们并没有使用Spring MVC,而是借用Spring MVC的概念自定义接口。在现在的SpringMVC项目中,我们没有自定义任何接口,而是直接使用Spring MVC框架来实现Web应用程序,这一点请读者务必区分清楚。

另外需要注意的是,ModelAndView返回的逻辑视图是“test”,还记得在viewResolver中定义的prefix和suffix吗?实际的视图名称由这3部分构成便是“/test.jsp”。

最后将这个TestController作为Bean定义在dispatcher-servlet.xml中,由于我们准备使用默认的BeanNameUrlHandlerMapping,因此,需要在Bean的name中指定URL。

<bean name="/test.html" class="example.chapter7.TestController" />

完整的dispatcher-servlet.xml配置文件的内容如下。

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

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean name="/test.html" class="example.chapter7.TestController" />

    <bean id="viewResolver" class="org.springframework.web.servlet.view. InternalResourceViewResolver">

        <property name="viewClass" value="org.springframework.web.servlet. view.JstlView" />

        <property name="prefix" value="/" />

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

    </bean>

</beans>

注意,我们没有指定UrlHandlerMapping,Spring会自动使用默认的BeanNameUrl HandlerMapping。

三、  实现View
到目前为止,我们已经编写了 Controller的实现和配置文件,最后一步是编写一个JSP文件作为视图。由于采用了MVC架构,视图的任务只有一个,就是将Controller 返回的Model渲染出来。Spring MVC会将Model中的所有数据全部绑定到HttpServlet Request中,然后将其转发给JSP,JSP只需将数据显示出来即可。

通过JSTL标签库能进一步简化显示逻辑,我们看看如何显示TestController返回的Model。test.jsp文件的内容如下。

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

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

<html>

    <head>

        <title>SpringMVC</title>

    </head>

    <body>

        <h3>Hello, <c:out value="${name}" />,

        it is <c:out value="${time}" /></h3>

    </body>

</html>

现在,Spring MVC所需的所有组件都已编写并配置完毕,我们先来回顾一下Spring MVC的处理流程,如图7-22所示。

 

将SpringMVC工程的编译输出目录设置为/web/WEB-INF/classes,然后编译工程,打开浏览器,测试我们编写的SpringMVC,结果如图7-23所示。

 

图7-23

现在,读者对Spring的MVC框架应该有了一个初步的认识。实际上,除了基本的MVC标准流程外,Spring MVC还提供了相当多的功能,下面我们将逐一介绍Spring MVC提供的各种丰富的Controller、拦截器和异常处理机制。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangyaoheng/archive/2008/05/21/2465834.aspx

分享到:
评论

相关推荐

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

    这个"精简源码-spring-mvc 入门级使用"的压缩包文件,旨在为初学者提供一个简单易懂的实践案例,帮助他们快速理解和上手 Spring MVC。 首先,我们从 "spring" 这个标签开始。Spring 是一个开源框架,它提供了一个...

    Spring MVC入门(登录示例)

    **Spring MVC 入门教程——基于登录示例** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了模型-视图-控制器(MVC)架构,帮助开发者分离业务逻辑、数据处理和用户界面,使得代码更易于...

    Spring MVC 入门实例

    这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...

    spring mvc经典入门案例

    这个经典入门案例将引导你逐步了解并掌握 Spring MVC 的基本概念、配置以及实际应用。 1. **Spring MVC 概述** Spring MVC 是一个模型-视图-控制器(MVC)架构模式的实现,它简化了Java Web 应用的开发,提供了一...

    Spring MVC入门教程

    十、spring mvc 如何使用拦截器? 十一、spring mvc 如何实现全局的异常处理? 十二、spring mvc 如何把全局异常记录到日志中? 十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向...

    spring mvc 的入门级资料

    Spring MVC 入门级资料 Spring MVC 是一个基于 Java 的 Web 框架,它提供了一种灵活、可扩展、Easy-to-use 的 Web 应用程序开发方式。Spring MVC 是 Spring 框架的一部分,提供了一个强大、灵活、可扩展的 MVC 框架...

    spring MVC_快速入门

    要使用Spring MVC,首先需要在项目中引入Spring MVC的依赖,并配置Spring的DispatcherServlet,它是Spring MVC的前端控制器,负责调度请求到相应的处理器。 3. **Controller** Controller是处理请求的组件,通常...

    Spring mvc指南+Spring mvc入门

    Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。本指南将深入探讨 Spring MVC 的核心概念、配置、控制器、...

    spring mvc入门示例

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它作为Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、用户界面和数据访问分离开来,...

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

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

    spring mvc入门书籍

    Spring MVC 是一款强大的Java web应用程序框架,用于构建高效、模块化的Web应用。它基于Spring框架,专注于处理HTTP请求和响应,...《Spring MVC入门》这本书将帮助你深入了解这一框架,并引导你一步步掌握其使用技巧。

    spring mvc入门小例子

    本教程将深入探讨Spring MVC的基本概念和关键组件,帮助初学者快速入门。 首先,让我们理解Spring MVC的核心组件: 1. **DispatcherServlet**:它是Spring MVC的前端控制器,负责接收HTTP请求,根据请求的URL和...

    Spring MVC入门项目

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

    intellij idea 2017 spring mvc 入门

    【描述】:“Java Spring MVC超简单,Spring MVC入门,第一个Java程序,IntelliJ IDEA入门” 这表明我们将从零开始,逐步学习如何在IntelliJ IDEA这个强大的Java集成开发环境中配置Spring MVC环境,创建并运行一个...

    spring mvc 入门范例

    要开始使用Spring MVC,你需要在项目的`web.xml`中配置DispatcherServlet,它是Spring MVC的核心组件,负责调度请求。同时,还需要配置Spring的上下文配置文件,包含Spring MVC的bean定义。 3. **@Controller注解*...

    Spring mvc 入门向导

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

    Spring MVC入门Demo

    本入门Demo将帮助初学者快速理解并掌握 Spring MVC 的基本概念和使用方法。 首先,Spring MVC 提供了控制器(Controller)的概念,它负责接收来自客户端的请求,处理业务逻辑,并将结果传递给视图(View)。在 ...

    spring mvc 入门介绍

    ### Spring MVC 入门知识点详解 #### 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一部分,主要用于构建基于 Model-View-Controller (MVC) 设计模式的 Web 应用程序。它提供了丰富的功能来简化 Web 开发过程,...

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

    Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...

Global site tag (gtag.js) - Google Analytics