`
tx1999
  • 浏览: 1742 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SpringMVC 简介

阅读更多

Web MVC framework
1.1 Spring MVC介绍

1.是一个模型-视图-控制(model-view-controller)框架,它设计为围绕DispatcherServlet将请求分派给各个处理器,具有可匹配的映射处理器(handler mappings)、视图解析器(view resolution)、本地设置、时区和主题解析以及支持文件上传。
2.在Spring Web MVC中,您可以使用任何对象作为命令或表单支持对象; 您不需要实现框架特定的接口或基类。

1.2 Spring MVC特性

1.明确的角色分离。各个角色--控制器,验证器,命令对象,表单对象,模型对象,DispatcherServlet,映射处理器,视图解析等等都可以用专门的对象来实现。
2.框架和程序类都可以使用直接使用强大的JavaBeans配置,这些配置包含简单的上下文的引用,如从控制器到业务对象和验证器。
3.适用性,非侵入性,灵活性,定义你需要的任何控制器方法签名。可能会使用的如(@RequestParam, @RequestHeader, @PathVariable)。
4.可重用的业务代码,不需要重复写,使用现有业务对象如命令对象或表单对象代替。
5.可定制绑定和验证,如本地化数据和数值绑定,而不要只是用字符串表单对象进行手动解析和转换业务对象。
6.可定制映射处理器和视图解析器。映射处理器和视图解析器的策略范围从简单的基于URL配置到复杂的专用解析策略,比其他框架更灵活。
7.灵活的模型传输,基础key/value的map模型,很容易与任何视图技术集成。
8.可定制化本地化,时区和主题解析。支持JSPs或不带Spring标签库的JSP,支持JSTL,内置支持Velocity。
9.提供一个称为Spring标签库的简单强大JSP标签库,支持如数据绑定和主题等功能,在标记代码方面自定义标签库提供了最大的灵活性。
10.从Spring2.0开始就引入了JSP表单标签库,使在JSP里面写表单变得更简单。
11.Beans的生命周期范围限定在当前的HTTP请求或HTTP的Session中,不是由Spring MVC提供的是由使用的WebApplicationContext容器限定的。

1.3 请求处理流程

Spring的Web MVC框架与许多其他Web MVC框架一样,以请求为驱动,围绕一个中央Servlet设计,将请求发送给控制器,并提供了其他促进Web应用程序开发的功能。 但是Spring的DispatcherServlet不仅仅是这样做。 它与Spring IoC容器完全集成,因此允许您使用Spring的其他所有功能。

 

1.请求处理流程图


 
 
DispatcherServlet是一个实际的Servlet(它继承自HttpServlet基类),因此可以Web应用程序中被声明。 您需要使用URL映射来映射要DispatcherServlet处理的请求。 以下是Servlet 3.0+环境中的标准Java EE Servlet配置:

 

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {
        ServletRegistration.Dynamic registration = container.addServlet("example", new DispatcherServlet());
        registration.setLoadOnStartup(1);
        registration.addMapping("/example/*");
    }

}
 在这个配置中以/ example开头的所有请求都将由名为Example的DispatcherServlet实例处理。WebApplicationInitializer是由Spring MVC提供的接口,可确保您的基于代码的配置被检测并自动用于初始化任何Servlet 3容器。AbstractAnnotationConfigDispatcherServletInitializer的接口的抽象基类实现通过简单地指定其servlet映射和列出配置类来更容易地注册DispatcherServlet。

 

 

也可以在web.xml中声明,下面是一个标准的Java EE Servlet配置。

 

 

<web-app>
    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/example/*</url-pattern>
    </servlet-mapping>

</web-app>
 

 

 

在Web MVC框架中,每个DispatcherServlet都有自己的WebApplicationContext,它继承了所有已经在根WebApplicationContext中定义的bean。

 

2.Spring Web MVC中的典型上下文层次结构

 

 

 
 在初始化DispatcherServlet时,Spring MVC将在Web应用程序的WEB-INF目录中查找名为[servlet-name] -servlet.xml的文件,并创建在那里定义的bean,覆盖全局范围内使用相同名称定义的任何bean的定义。

如以下DispatcherServlet 配置

 

 

<web-app>
    <servlet>
        <servlet-name>golfing</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>golfing</servlet-name>
        <url-pattern>/golfing/*</url-pattern>
    </servlet-mapping>
</web-app>
 

 

 

使用上述Servlet配置,您需要在应用程序中有一个名为/WEB-INF/golfing-servlet.xml的文件; 该文件将包含您所有的Spring Web MVC特定组件(bean)。 您可以通过Servlet初始化参数更改此配置文件的指定位置。

 

3.Spring Web MVC中的单根上下文




 
 

可以通过设置一个空的ContextConfigLocation servlet init参数进行配置,如下所示:

 

 

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/root-context.xml</param-value>
    </context-param>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>
 

 

WebApplicationContext是普通ApplicationContext的扩展,它具有Web应用程序所需的一些额外功能。 它与普通的ApplicationContext不同之处在于它能够解析主题,并且它知道它与哪个Servlet相关联(通过连接到ServletContext)。 WebApplicationContext绑定在ServletContext中,并且通过在RequestContextUtils类上的静态方法,您可以随时查找WebApplicationContext。

 

我们可以通过基于Java的配置实现

 

public class GolfingWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // GolfingAppConfig defines beans that would be in root-context.xml
        return new Class[] { GolfingAppConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // GolfingWebConfig defines beans that would be in golfing-servlet.xml
        return new Class[] { GolfingWebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/golfing/*" };
    }

}
 

 

3.WebApplicationContext中的特殊Bean类型

HandlerMapping 将请求映射到一个处理器列表,它包含前置处理器和后置处理器(处理拦截器),其细节由HandlerMapping实现而异。 最流行的实现支持注释控制器,但其他实现也存在。
HandlerAdapter 主要是用来屏蔽DispatcherServlet 的技术细节,它帮助DispatcherServlet 调用映射到请求的处理程序,而不管实际调用哪个处理程序,如调用带注释的控制器需要解析各种注释。
HandlerExceptionResolver 将异常映射到视图,也允许更复杂的异常处理代码。
ViewResolver 将基于逻辑字符串的视图名称解析为实际的View类型。
LocaleResolver & LocaleContextResolver 解决客户端正在使用的区域设置以及可能的时区,以便能够提供国际化的视图。
ThemeResolver 解决您的Web应用程序可以使用的主题,例如,提供个性化的布局
MultipartResolver 解析多部分请求,以支持从HTML表单处理文件上传。
FlashMapManager 存储并检索“输入”和“输出”FlashMap,它可以用于将属性从一个请求传递到另一个请求,通常是通过重定向。

 

4.默认DispatcherServlet配置

 

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
	org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
	org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
	org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
 一旦您在WebApplicationContext中配置了一个特殊的bean(如InternalResourceViewResolver),就会覆盖了该特殊bean类型的默认实现列表。 例如,如果配置了InternalResourceViewResolver,则会忽略ViewResolver实现的默认列表。

 

 

5.DispatcherServlet处理序列

在您设置了DispatcherServlet并且针对该特定DispatcherServlet启动了一个请求后,DispatcherServlet将按如下所示开始处理请求:

● 在请求中搜索并绑定WebApplicationContext作为控制器和进程中的其他元素可以使用的属性。默认情况下,它将在DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE键下绑定。
 
● 语言环境解析器被绑定到请求,以使进程中的元素能够解决在处理请求时使用的区域设置(渲染视图,准备数据等)。 如果您不需要语言环境解析,则不需要它。
 
● 主题解析器被绑定到使得诸如视图之类的元素确定要使用哪个主题的请求。 如果不使用主题,可以忽略它。
 
● 如果指定了多部分文件解析器,则会检查该请求的多部分; 如果找到多部分,则请求被包装在MultipartHttpServletRequest中,以便进程中的其他元素进一步处理。
 
● 搜索适当的处理程序,如果找到处理程序,通过执行与处理程序(预处理程序,后处理程序和控制器)关联的执行链来准备模型或渲染视图。
 
● 如果返回模型则呈现视图。 如果没有返回模型(可能是由于预处理程序或后处理程序拦截请求,如可安全原因没有通过),因为请求可能已经被实现了,所以不会呈现任何视图。
 
在WebApplicationContext中声明的处理程序异常解析程序在处理请求期间提取异常。 使用这些异常解析器允许您定义自定义行为来解决异常。
Spring DispatcherServlet还支持返回由Servlet API指定的最后修改日期。 确定特定请求的最后修改日期的过程很简单:DispatcherServlet查找适当的处理程序映射,并测试发现的处理程序是否实现了LastModified接口。 如果是,则LastModified接口的long getLastModified(request)方法的值将返回给客户端。
 
DispatcherServlet初始化参数
contextClass 实现WebApplicationContext的类,它实例化了这个Servlet使用的上下文。 默认情况下,使用XmlWebApplicationContext。
contextConfigLocation 传递给上下文实例(由contextClass指定)以指示可以找到上下文的字符串,该字符串可能包含多个字符串(使用逗号作为分隔符)来支持多个上下文。在具有两次定义的bean的多个上下文位置的情况下,最后定义的优先级最高。
namespace WebApplicationContext的命名空间。 默认为[servlet-name] -servlet。
 
  • 大小: 100.1 KB
  • 大小: 41.5 KB
  • 大小: 35.6 KB
分享到:
评论

相关推荐

    spring及springMvc简介

    spring及springMvc简介

    SpringMVC简介与多线程解决方案

    SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。它简化了从前端接收到数据并将其处理后返回到前端的过程,提供了强大的功能,如请求分发、视图解析、参数绑定以及异常处理...

    springMVC简介.docx

    Spring MVC 是一个基于Java的轻量级Web框架,它的核心目标是实现Web MVC设计模式,以简化Web应用的开发过程。这个框架通过职责解耦,将Web层分为模型(Model)、视图(View)和控制器(Controller)三个部分,遵循...

    IDEA社区版编写的SpringMVC小项目

    **SpringMVC简介** SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)架构。它提供了处理HTTP请求、数据绑定、验证、国际化等功能,使开发者能够更专注于业务逻辑而...

    jetty整合springmvc例子

    2. **SpringMVC简介** SpringMVC是Spring框架中的一个模块,用于处理Web请求。它遵循Model-View-Controller架构模式,帮助开发者分离业务逻辑、数据处理和用户界面。SpringMVC通过DispatcherServlet进行请求分发,...

    黑马程序员SpringMVC课堂笔记

    1. SpringMVC简介:解释SpringMVC的架构,以及它如何与其他Spring模块协作。 2. 搭建环境:讲解如何设置Java环境,导入Maven或Gradle依赖,创建Web项目,并配置web.xml文件以启动SpringMVC。 3. Hello World示例:...

    springmvc第一天课堂笔记.docx

    #### 一、SpringMVC简介 **SpringMVC**是Spring框架中的一个重要组成部分,主要用于Web应用程序的开发。它遵循MVC(Model-View-Controller)设计模式,帮助开发者构建清晰、可维护的Web应用。与Spring其他部分无缝...

    springMVC+dwr技术实现消息推送实例

    **SpringMVC简介** SpringMVC是Spring框架的一个模块,设计用于处理HTTP请求和响应。它遵循Model-View-Controller(MVC)设计模式,使得业务逻辑、数据模型和用户界面得以分离。SpringMVC提供了一套完整的解决方案,...

    开涛Spring和SpringMVC书籍

    1. **SpringMVC简介**:解释SpringMVC的工作原理,以及与Spring框架的关系。 2. **配置与启动**:讲解如何配置SpringMVC的DispatcherServlet、配置处理器映射器和视图解析器等。 3. **控制器**:介绍Controller接口...

    简单的SpringMVC小项目(适合刚刚学的)

    **SpringMVC简介** SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)架构。SpringMVC通过将业务逻辑、控制逻辑和显示逻辑分离,提高了代码的可维护性和可测试性。在...

    SpringMVC例子代码小汇总

    **SpringMVC简介** SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。SpringMVC提供了处理HTTP请求、数据绑定、验证、本地化、视图解析等功能,极大地简化了...

    Maven+SpringMVC的入门级HelloWorld实例

    **SpringMVC简介** SpringMVC是Spring框架的一部分,它提供了一种组织和处理HTTP请求的方式。在SpringMVC中,请求由DispatcherServlet接收,然后分发给处理器(如Controller)。Controller通常是一个实现了特定注解...

    SpringMVC.docx

    【SpringMVC简介】 SpringMVC是Spring框架的一部分,它是一个基于Java的Web MVC设计模式的轻量级框架。SpringMVC的核心理念是将Web层的职责进行解耦,采用松散耦合的组件结构,使得它具有高度的扩展性和灵活性。...

    SpringMVC从无到有

    一、SpringMVC简介 SpringMVC是一个轻量级的Web开发框架,它提供了强大的数据绑定、模型验证和本地化支持。通过使用依赖注入(DI),SpringMVC允许开发者将业务逻辑与展示层分离,提高代码的可测试性和可维护性。 ...

    mybatis整合springMvc完整jar包

    2. SpringMVC简介: SpringMVC是Spring框架的一部分,它是一个基于模型-视图-控制器(MVC)设计模式的Web应用开发框架。SpringMVC通过DispatcherServlet处理HTTP请求,将请求转发给相应的处理器,并将处理器的结果...

    传智播客_Springmvc+Mybatis由浅入深全套视频教程-SpringMVC笔记(两天)

    #### SpringMVC简介 - **定义**:SpringMVC是一个基于MVC设计理念的Web层框架,它是Spring框架的一个模块,可以轻松地与Spring其他模块整合,无需额外的整合层。 - **优势**:相比其他框架,如Struts2,SpringMVC的...

    springmvc入门程序(下载后你不会后悔的)

    #### 一、SpringMVC简介 SpringMVC是Spring框架中的一个模块,专门用于Web应用程序的开发。它继承了Spring框架的一系列优点,并且提供了更为简洁高效的MVC(Model-View-Controller)架构支持。与传统的Java Web开发...

Global site tag (gtag.js) - Google Analytics