Spring Web MVC 处理Http请求的大致过程:
一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。
DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的ControllerHandlerMapping是这样一种对象,它能够完成客户请求到Controller之间的映射。在Struts中,这种映射是通过l文件完成的。其中,SpringController接口提供了若干实现,例如Spring默认使用的BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMappingCommonsPathMapHandlerMapping
Spring Controller将处理来自DispatcherServlet的请求。SpringController类似于strutsAction,能够接受HttpServletRequestHttpServletResponseSpringController接口提供了若干实现类,位于org.springframework.web.servlet.mvc包中。由于Controller需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理客户请求,这和Struts Action 扮演的角是一致的。
一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndViewHttp请求过程中返回的模型和视图。前端控制器返回的视图可以是视图的逻辑名,或者实现了View接口的对象。View对象能够渲染客户响应结果。其中,ModelAndView中的模型能够供渲染View时使用。借助于Map对象能够存储模型。
如果ModelAndView返回的视图只是逻辑名,则需要借助Spring提供的视图解析器(ViewResoler)在Web应用中查View对象,从而将响应结果渲染给客户。
DispatcherServletView对象渲染出的结果返回个客户。
============================
使用 Spring 2.5 基于注解驱动的 Spring MVC
陈 雄华 (quickselect@163), 技术总监, 宝宝淘网络科技有限公司
陈雄华,2002 年毕业于厦门大学计算机与信息工程学院,获硕士学位。是宝宝淘科技有限公司的创始人之一(www.baobaotao),这是一个服务于全国母婴用户的综合性网站,作者负责网站整体框架设计以及核心代码开发的工作。技术开发之余,常将经验所得行诸于文字,作者是国内多个著名技术网站的专栏作者,在各大技术网站、报刊杂志发表过数十篇技术文章,广受读者好评。于 2005 年出版《精通 JBuilder 2005》,于2007年出版《精通 Spring 2.x--企业应用开发详解》,其新作《EXT 2.x开发详解――AJAXWeb页面布局王者至尊》即将出版。
简介: 基于注解的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,为 Spring MVC 提供了完全基于注解的配置。本文将介绍 Spring 2.5 新增的 Sping MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML Spring MVC 配置。
本文的标签:  2.5, java_技术, mvc, spring, springmvc, 使用, 基于注解驱动的, 应用开发, 开放源码
标记本文!
发布日期: 2008 3 14
级别: 初级
访问情况 28566 次浏览
建议: 4 (查看或添加评论)
平均分 (共 74 个评分
概述
Spring 2.0 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller 的映射关系,仅仅使用注解就可以让一个 POJO 具有 Controller 的绝大部分功能 —— Spring MVC 框架的易用性得到了进一步的增强.在框架灵活性、易用性和扩展性上,Spring MVC 已经全面超越了其它的 MVC 框架,伴随着 Spring 一路高唱猛进,可以预见 Spring MVC MVC 市场上的吸引力将越来越不可抗拒。
本文将介绍 Spring 2.5 新增的 Sping MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML Spring MVC 配置。
回页首
一个简单的基于注解的 Controller
使用过低版本 Spring MVC 的读者都知道:当创建一个 Controller 时,我们需要直接或间接地实现 org.springframework.web.servlet.mvc.Controller 接口。一般情况下,我们是通过继承 SimpleFormController MultiActionController 来定义自己的 Controller 的。在定
Controller 后,一个重要的事件是在 Spring MVC 的配置文件中通过 HandlerMapping 定义请求和控制器的映射关系,以便将两者关联起来。
来看一下基于注解的 Controller 是如何定义做到这一点的,下面是使用注解的 BbtForumController

清单 1. BbtForumController.java
               
package com.baobaotao.web;
import com.baobaotao.service.BbtForumService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.Collection;
@Controller                  //<——
@RequestMapping("/forum.do")
public class BbtForumController {
    @Autowired
    private BbtForumService bbtForumService;
    @RequestMapping //<——
    public String listAllBoard() {
        AllBoard();
        System.out.println("call listAllBoard method.");
        return "listBoard";
    }
}
从上面代码中,我们可以看出 BbtForumController 和一般的类并没有区别,它没有实现任何特殊的接口,因而是一个地道的 POJO。让这个 POJO 与众不同的魔棒就是 Spring MVC 的注解!
处使用了两个注解,分别是 @Controller @RequestMapping。在“使用 Spring 2.5 基于注解驱动的 IoC”这篇文章里,笔者曾经指出过 @Controller@Service 以及 @Repository @Component 注解的作用是等价的:将一个类成为 Spring 容器的 Bean。由于 Spring MVC Controller 必须事先是一个 Bean,所以 @Controller 注解是不可缺少的。
真正让 BbtForumController 具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解。@RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来;还可以标注在方法签名处,以便进一步对请求进行分流。在 处,我们让 BbtForumController 关联“/forum.do”的请求,而 处,我们具体地指定 listAllBoard() 方法来处理请求。所以在类声明处标注的 @RequestMapping 相当于让 POJO 实现了 Controller 接口,而在方法定义处的 @RequestMapping 相当于让 POJO 扩展 Spring 预定义的 Controller(如 SimpleFormController spring ioc注解等)。
为了让基于注解的 Spring MVC 真正工作起来,需要在 Spring MVC 对应的 l 配置文件中做一些手脚。在此之前,还是先来看一下 l 的配置吧:

清单 2. l:启用 Spring 容器和 Spring MVC 框架
               
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="java.sun/xml/ns/javaee"
    xmlns:xsi="/2001/XMLSchema-instance"
    xsi:schemaLocation="java.sun/xml/ns/javaee
    java.sun/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <display-name>Spring Annotation MVC Sample</display-name>
    <!--  Spring 服务层的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>l</param-value>
    </context-param>
   
    <!--  Spring 容器启动 -->
    <listener>
        <listener-class>org.t.ContextLoaderListener
        </listener-class>
    </listener>
    <!--  Spring MVC Servlet,它将加载l
    配置文件,以启动Spring MVC模块-->
    <servlet>
        <servlet-name>annomvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>annomvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。