启动Spring:web.xml方式

来源:互联网 发布:复制加密光盘软件 编辑:程序博客网 时间:2024/05/18 00:54

前言

        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
原创粉丝点击