`
realkcn
  • 浏览: 893 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MVC 4.1.x 相关知识(一)Spring MVC的配置

阅读更多

 一、引言

    本系列基于Spring 4.1.5,大部分内容来至Spring MVC 4.1.x的Reference Document。本文假设你已经对Spring IOC容器有一定了解,并对Spring MVC有初步认识。本文的Servlet是Servlet 3.0规范,可能会有一些和Servlet 2.x不太一样的。

 

二、Spring MVC的初始化

1. ContextLoaderListener

        在web 工程中只使用spring不用MVC是可行的,这个只需要在web.xml里面配置ContextLoaderListener即可。

 

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
   ...
</web-app>

 

 

        这时ContextLoaderListener会初始化一个WebApplicationContext供Spring容器使用。你也可以通过指定contextClass参数使用自己的context class,但这个类必须是ConfigurableWebApplicationContext的子类。

ContextLoadListener的参数有三个: 
contextClass:自定义的context类名
contextConfigLocation:指定的spring配置文件,这里可以用空格或者逗号分隔多个xml配置文件
namespace:缺省是[servlet-name]-servlet,指定了servlet的xml配置文件名。比如名为dispatcher的servlet,缺省会载入dispatcher-servlet.xml的配置文件。其实这是对 servlet的配置

 

2.DispatcherServlet

      这个是Spring MVC的核心,只有配置了它Spring MVC才能接管相关请求并对request进行处理。这里只讨论它的配置和初始化,关于MVC部分之后再介绍。

      一个dispatcher的典型配置

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

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

</web-app>

    这个配置表明这个dispatcher处理/example/下的所有请求。它初始化时,会读取dispatcher-servlet.xml中的bean配置。 

    每一个DispatcherServlet都是有自己的WebApplicationContext,它继承了ContextLoadListener生成的Root WebApplicationContext。下图说明了DispatcherServlet的application context结构。

 

    当然,你也可以把所有bean配置放到Root WebApplicationContext里面,只需要给dispatcher一个空的配置就行了

 

<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>
 

 

3.程序配置

    dispatcher也可以通过程序配置,一般做法是实现一个WebApplicationInitializer的接口,并在OnStartup方法里面进行相关的初始化

    这是个例子,里面把dispatcher和CharacterEncodingFilter都通过程序来配置

 

public class MyWebApplicationInitializer implements WebApplicationInitializer {
    private static final Logger LOG = LoggerFactory.getLogger(MyWebApplicationInitializer.class);

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        DispatcherServlet dispatcher =  new DispatcherServlet();
        dispatcher.setContextConfigLocation(""); //没有dispatcher特定的配置文件
        ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher", dispatcher);
        registration.setLoadOnStartup(1); // 启动时载入
        registration.addMapping("*.do"); // 处理*.do的请求

        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceEncoding(true);
        servletContext.addFilter("encodingFilter", encodingFilter)
            .addMappingForServletNames(EnumSet.allOf(DispatcherType.class), true, "dispatcher");
    }
}
 也可以通过扩展Spring提供的抽象类AbstractDispatcherServletInitializer:

 

 

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/dispatcher-servlet.xml");
        return cxt;
    }

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

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] { new CharacterEncodingFilter() };
    }

}

 三、常见问题

    1.从上面可以看到,ContextLoaderListener和DispatcherServlet其实是两个层面的初始化,同时使用的时候一定记得它俩的配置不能重复,否则就会造成Bean在两个Context里面重复初始化。

    2.不配置ContextLoaderListener只配置DispatcherServlet是可以的,此时DispatcherServlet会有个空的root Context,其实也不影响使用。

  • 大小: 39.9 KB
分享到:
评论

相关推荐

    spring-framework-4.1.x.zip源码

    - **MVC**:Spring MVC是构建Web应用的主要部分,4.1.x版本对模型视图分离进行了优化,添加了更多自定义视图解析器的支持,并改进了异常处理机制。 - **WebSocket**:4.1.x引入了对WebSocket的支持,使得实时通信...

    java spring4.1.x源码

    Spring框架是中国Java开发领域中最广泛使用的轻量级框架之一,其4.1.x版本是它的一个稳定版本,提供了丰富的功能和改进。这个压缩包包含了Spring框架的核心组件和模块的源代码,是深入理解Spring工作原理、扩展其...

    Spring Framework Reference 4.1.x Web MVC部分 pdf

    ### Spring Framework 4.1.x Web MVC框架知识点详解 #### 一、Spring Web MVC框架概述 **Spring Web MVC**框架是Spring框架中的一个重要组成部分,它主要用于处理基于HTTP协议的请求,构建灵活且易于扩展的Web应用...

    springMVC+mybatis+mysql驱动等常用4.1.x版本包

    在4.1.x版本中,MyBatis增强了SQL动态语句的灵活性,支持了注解方式的映射,使得Mapper接口和XML配置文件的使用更加简洁。同时,它还提供了事务管理,与Spring框架无缝集成,便于在分布式环境中进行事务控制。 **...

    spring-webmvc jar包

    spring-webmvc-4.1.0.RELEASE.jar用于Spring框架的mvc注解

    Struts2.X+Hibernate3.X+Spring2.5 整合

    标题"Struts2.X+Hibernate3.X+Spring2.5 整合"指的是将这三个框架的特定版本(Struts2.X,Hibernate3.X,Spring2.5)集成到同一个项目中,实现高效的企业级应用开发。这种整合能够充分利用各个框架的优势,使开发者...

    springmvc 4.1

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序...以上就是Spring MVC 4.1中涉及的一些主要知识点,这些内容可以帮助开发者更好地理解和使用这个版本的框架来构建高效、灵活的Web应用程序。

    lesson4.1.zip

    首先,我们需要解压“lesson4.1.zip”,这是一个包含了具体示例代码的学习项目,旨在教授Spring的开发技术。通过这个项目,我们可以学习到以下关键知识点: 1. **IoC(Inversion of Control)控制反转**:Spring的...

    spring springmvc 4.1 最新版jar

    为了构建一个基于 Spring MVC 4.1 的应用,你需要配置 DispatcherServlet、创建 Controller、定义 Model、配置视图解析器,并确保所有依赖的 jar 包都已添加到项目的类路径中。通过这些步骤,你可以创建出一个高效、...

    spring4.1 doc + jar包

    Spring 4.1版本是一个重要的里程碑,引入了许多改进和新特性,旨在提升开发效率和应用程序的性能。下面我们将深入探讨Spring 4.1版本的关键知识点。 1. **依赖注入 (Dependency Injection, DI)**: Spring的核心特性...

    spring-mvc41:Spring MVC 4.1 示例

    Spring MVC 4.1是该框架的一个重要版本,它引入了许多改进和新特性,旨在提高开发者的生产力和应用的可扩展性。在这个"spring-mvc41:Spring MVC 4.1 示例"项目中,我们可以深入学习和理解Spring MVC 4.1的核心概念和...

    Manning.Spring.in.Action.4th.Edition.2014.11.epub

    7.1. Alternate Spring MVC configuration 7.1.1. Customizing DispatcherServlet configuration 7.1.2. Adding additional servlets and filters 7.1.3. Declaring DispatcherServlet in web.xml 7.2. Processing ...

    Spring3.2_Struts2.3_Hibernate.4.1.rar

    这个压缩包"Spring3.2_Struts2.3_Hibernate.4.1.rar"包含的是这三个框架的较新版本,即Spring 3.2、Struts 2.3和Hibernate 4.1,适合初学者学习和实践J2EE应用的开发。 Spring框架是Java企业级应用的核心容器,它...

    spring3.2+hibernate4.1 MVC.zip

    本指南将详细介绍如何在项目中集成Spring 3.2和Hibernate 4.1,构建一个基于MVC模式的应用程序。 Spring 3.2是Spring框架的一个重要版本,它在原有的基础上增强了依赖注入(DI)和面向切面编程(AOP)的功能。在...

    spring mvc测试样例,使用spring4.1开发

    Spring MVC 是 Spring 框架的一个模块,专为构建 Web 应用程序而设计。它提供了模型-视图-控制器(MVC)架构,帮助开发者有效地分离业务逻辑、数据处理和用户界面。在这个测试样例中,我们看到是基于 Spring 4.1 ...

    Spring4.1官方jar包完整版

    3. **SpringMVC**:作为Spring的Web MVC框架,SpringMVC4.1增强了异步处理能力,支持Servlet 3.1非阻塞I/O,提升了Web应用的性能。另外,ModelAndView对象现在支持模型属性的自动绑定,以及更强大的视图解析器。 4....

    springmvc4.1+spring4.1+mybatis3.2+spring-security3.2的maven环境搭建

    在本项目中,我们主要关注的是一个基于Spring MVC 4.1、Spring 4.1、MyBatis 3.2以及Spring Security 3.2的Maven环境的搭建过程。下面将详细介绍这些技术栈的核心概念、它们如何协同工作以及如何在实际开发环境中...

    spring-beans-4.2xsd 文件下载

    Spring默认在启动时是要加载XSD文件来验证xml文件的,所以如果有的时候断网了,或者一些开源软件切换域名,那么就很容易碰到应用启动不了。...为了防止这种情况,Spring提供了一种机制,默认从本地加载XSD文件

    spring-framework-4.1.6.RELEASE

    Spring 4.1.x开始支持WebSocket,4.1.6版本提供了Stomp协议的支持,可以用于实时通信和双向交互,极大地改善了Web应用的用户体验。 6. **类型安全的转换服务**: Spring 4.1引入了类型安全的转换服务,允许开发者...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

Global site tag (gtag.js) - Google Analytics