SSM中的xml配置

一、web.xml

1.web容器,跟随tomcat启动。

(1)<!-- spring的配置文件-->

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<context-param>:在这里是指定了applicationContext.xml的地址,但这个标签本质上是一组键值对,通过<param-name>和<param-value>来表示键值,则在程序中即可以通过name取到value,说白了,他就相当于设定了一个固定值,我们可以在程序中去使用它。就这么个作用。下面列举一个取值的栗子:

<context-param>
            <param-name>home-page</param-name>
            <param-value>home.jsp</param-value>

</context-param>

取值:String HomePage = getServletContext().getInitParameter("home-page");

通过上面这句代码,我们就可以取得web.xml中配置的home.jsp这个值。


(2)配置监听:Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

        

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


(3)<!-- 配置servlet,spring mvc核心:分发servlet -->

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- spring mvc的配置文件 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
    </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

注1:<servlet-name>的名字随便起,但是class必须是org.springframework.web.servlet.DispatcherServlet,而且这里的<servlet-name>名字和下面的mapping的<servlet-name>名字需要一致,<init-param>classpath:springMVC.xml(如果springMVC.xml直接在src下面的写classpath:文件名即可,如果还有一层包,那就写classpath:包名/spring-config.xml

注2:<init-param>和<context-param>一样都上下文参数,但是区别在于范围和使用方式不同。

<context-param>是application范围内的初始化参数,用于向servlet-context提供键值对,即应用程序的上下文信息,listener、filter等初始化时会用到这些信息

<init-param>是servlet范围内的参数,只能在servlet类的init()方法中取得。

注3:<loda-on-startup>:在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是标记容器是否在启动的时候就加载这个servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载,正数的值越小,启动该servlet的优先级越高。

(4)Servlet的映射地址:Servlet在编写完毕后,必须先在web.xml中配置才能访问。在配置时,需要指定一个 Servlet的访问地址。

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

 

二、applicationContext.xml

1.<!-- 声明注解 -->

<context:annotation-config />
<context:component-scan base-package="com.how2java.service" />

<context:annotation-config/>:作用是向Spring容器注册以下四个BeanPostProcessor:

  • AutowiredAnnotationBeanPostProcessor
  • CommonAnnotationBeanPostProcessor
  • PersistenceAnnotationBeanPostProcessor
  • RequiredAnnotationBeanPostProcessor
那么,为什么要注册这四个BeanPostProcessor呢?是为了让系统能够识别相应的注解。

如果按照传统的方式进行配置将会非常繁琐,所以Spring给我们提供了一个简便的方式:<context:annotation-config/>,使用该元素可以自动声明以上注解。

注:由于<context:component-scan base-package=”xx.xx”/>也包含了自动注入上述Bean的功能,所以<context:annotation-config/> 可以省略。如果两者都进行了配置,则只有前者有效。

2.<!-- 配置数据源 -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    <property name="driverClassName"
        <value>com.mysql.jdbc.Driver</value> 
    </property> 

    <property name="url"
        <value>jdbc:mysql://localhost:3306/bpm?characterEncoding=UTF-8</value> 
    </property>
 
    <property name="username"
        <value>root</value> 
    </property> 

    <property name="password"
        <value>cictec</value> 
    </property>    
    </bean>
3.<!-- 扫描存放sql语句的category.xml -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="typeAliasesPackage" value="com.how2java.pojo" />
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:com/how2java/mapper/*.xml"/>
</bean>

4.<!-- 扫描com.how2java.mapper -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.how2java.mapper"/>
</bean>

注:ApplicationContext.xml中的配置信息,是将CategoryMapper和Category.xml关联起来。

三、springMVC.xml

1.<!-- 声明注解 -->

  <context:annotation-config/>

2.<!-- 扫描包,获取controller下面的注解声明 -->

<context:component-scan base-package="com.how2java.controller">
    <context:include-filter type="annotation"
        expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

3.<!-- 注解驱动 -->

  <mvc:annotation-driven />

4.<!-- 访问静态页面 -->

<mvc:default-servlet-handler />

5.<!-- 视图定位 --> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

四、原理解析

1. 首先浏览器上访问路径 /listCategory
2. tomcat根据web.xml上的配置信息,拦截到了/listCategory,并将其交由DispatcherServlet处理。
3. DispatcherServlet 根据springMVC的配置,将这次请求交由CategoryController类进行处理,所以需要进行这个类的实例化
4. 在实例化CategoryController的时候,注入CategoryServiceImpl。 (自动装配实现了CategoryService接口的的实例,只有CategoryServiceImpl实现了CategoryService接口,所以就会注入CategoryServiceImpl)
5. 在实例化CategoryServiceImpl的时候,又注入CategoryMapper
6. 根据ApplicationContext.xml中的配置信息,将CategoryMapper和Category.xml关联起来了。
7. 这样拿到了实例化好了的CategoryController,并调用listCategory方法
8. 在listCategory方法中,访问CategoryService,并获取数据,并把数据放在"cs"上,接着服务端跳转到listCategory.jsp去

9. 最后在listCategory.jsp 中显示数据

SSM中的xml配置