启动Spring:web.xml方式

前言

        Spring是一个容器,它支持JPA(Java持久化接口)、IoC(反转控制)、DI(依赖注入)、AOP(面向切面编程)、MVC(模型-视图-控制器)等等,它们能在Spring环境下工作。我们知道,Tomcat也是一个容器,一个JavaEE程序容器,同所有容器一样,要让容器工作,就必须启动它,还需要配置它,指导它如何工作。

应用上下文

        应用上下文是Spring运行的环境,从狭义上讲,应用上下文就是一组配置,指定需要管理哪些bean,如何执行事务等等。应用上下文对应的java类型是org.springframework.context.ApplicationContext接口。一个Spring应用程序至少需要一个应用上下文,通常情况下,我们创建一个根应用上下文和一个DispatcherServlet应用上下文,根应用上下文管理一组和业务逻辑相关的bean,而DispatcherServlet应用上下文管理一组和控制相关的bean。一个应用上下文管理的bean可以访问相同上下文、父应用上下文、父应用上下文的父应用上下文(可以无限制的往上推)的bean。也即是说,DispatcherServlet应用上下文的bean可以访问根应用上下文的bean。一个常见的场景是,DispatcherServlet应用上下文有个控制类的bean,需要访问定义在根应用上下文的业务类的bean。
        既然应用上下文是Spring运行的环境,启动Spring就需要配置应用上下文。有两种配置方式,分别是xml文件和java编程。

web.xml启动Spring

应用上下文的配置方式是xml文件

 <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/rootContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/res/*</url-pattern>
    </servlet-mapping>
    
    
   <servlet>
        <servlet-name>springDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servletContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
        使用ContextLoaderListener创建一个根应用上下文,指定根应用上下文的配置方式是xml文件,配置文件是/WEB-INF/rootContext.xml。

        使用DispatcherServlet创建一个DispatcherServlet应用上下文,指定DispatcherServlet应用上下文的配置方式是xml文件,配置文件是/WEB-INF/servletContext.xml。DispatcherServlet在应用程序容器启动时启动,映射模式是/,映射所有的请求。DispatcherServlet把请求转发给控制器的方法,进行必要的业务处理。ContextLoaderListener会先于所有的servlet启动。

        有一个默认的servlet,映射模式是/res/*,凡是资源文件的请求都会映射到默认servlet(假设所有的资源文件,比如css、js、图片、flash等都放在目录res及其子目录下)。映射模式/res/*比映射模式/具体,前者会覆盖后者。比如有个请求http://locahost:8080/test/res/test.jpg,那么该请求会映射到默认servlet,而不是DispatcherServlet。此处为什么需要一个默认servlet映射资源文件的请求呢?DispatcherServlet的任务是把请求映射到控制器的方法,方法做业务处理。但是,对于资源文件来说,显然没有业务处理的需求,所以提供默认servlet,做出默认的响应。

应用上下文的配置方式是java编程

<context-param>
        <param-name>contextClass</param-name>
        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </context-param>
    <context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>com.gxz.config.RootContextConfig</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/res/*</url-pattern>
    </servlet-mapping>
    
    
   <servlet>
        <servlet-name>springDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>com.gxz.config.DispatcherServletContextConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

        使用ContextLoaderListener创建一个根应用上下文,指定根应用上下文的配置方式是java编程,编写配置的java类是com.gxz.config.RootContextConfig。设备上下文的配置方式是java编程和配置方式是xml文件相比,前者的contextConfigLocation是一个java类,后者是一个xml文件。另外,前者需要指定contextClass的值是org.springframework.web.context.support.AnnotationConfigWebApplicationContext,表示设备上下文的配置方式是java编程。
        使用DispatcherServlet创建一个DispatcherServlet应用上下文,指定DispatcherServlet应用上下文的配置方式是java编程,编写配置的java类是com.gxz.config.DispatcherServletContextConfig。和根应用上下文的启动方式一样,DispatcherServlet应用上下文也需要指定contextClass的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值