Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境

1、查看当前项目,因此配置文件如上图所示:
html

启动项目就进行初始化:java

    1. 在启动Web项目时,容器(好比Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。web

    2. 接着容器会建立一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。spring

    3. 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。数据库

    4. 容器建立<listener></listener>中的类实例,即建立监听(备注:listener定义的类能够是自定义的类但必须须要继承ServletContextListener)。express

    5. 在 监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中能够经过 event.getServletContext().getInitParameter("contextConfigLocation") 来获得context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,好比说数据库链接的关闭。
      api

    6. 获得这个context-param的值以后,你就能够作一些操做了.注意,这个时候你的WEB项目尚未彻底启动完成.这个动做会比全部的Servlet都要早。tomcat

      由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener  >> fileter  >> servletmybatis

    <>
        <>log4jConfigLocation</> 参数
        <>classpath:log4j.properties</> 参数值
    </>
    
    <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    
    根据参数名进入java源文件,找到对应的执行过程
    
    进入源文件有两个方法,一个是容器会在应用程序初始化期间调用 contextInitialized() 方法
    其实有一个initLogging()方法,在根据参数名找到对应的属性()。该过程在程序启动时,就能够
    根据参数名得到你所配置的classpath:log4j.properties值。
    
    另外一个方法contextDestroyed()是当tomcat关闭shutdown的时候调用(简单的说就是不打印日志!)

    <>
        <>contextConfigLocation</> 参数名
        <>
            classpath*:spring/applicationContext.xml,
            classpath:mybatis/mybatis-spring/spring-mybatis.xml,
            classpath*:spring/applicationContext-ehcache.xml,
            classpath:captcha/captcha-context.xml
        </>
    </>
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    servlet上下文须要加载的配置文件,对应的根据参数名能够在对应的java源文件中找到对应的原理。


    <>
        <>admin</>
        <>org.springframework.web.servlet.DispatcherServlet</>
        <>
            <>contextConfigLocation</>
            <>/WEB-INF/springMVC-servlet.xml</>
        </>
        <>1</>
    </>
    <>
        <>admin</>
        <>/admin/*</>这里配置了路径,点击请求就加载springMVC
        -servlet.xml配置文件
    </>
    
    是一个程序的入口,用户发送请求Dispatcher servlet映射处理器而后调用配置文件中的拦截器,
    调用处理器相应功能处理方法到Handler好比userController。而后在进行视图解析、视图渲染对应
    至springMVC-servlet的viewResolver(视图解析)与viewClass(视图渲染)



    springMVC-servlet.xml配置文件剖析:mvc

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

     上图的配置,简单的说是为了能够在controller层与service层使用注解的方式直接调用;


    </>
    </>

    <mvc:annotation-driven/>至关于注册了DefaultAnnotationHandlerMapping和 AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了 @Controller注解的使用前提配置。

    <mvc:default-servlet-handler/>servlet在找页面时,走的是dispatcherServlet路线。找不到的时候会报404

    加上这个默认的servlet时候,servlet在找不到的时候会去找静态的内容。


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

     如图所示,该段配置是对模型视图名称的解析,(简单的说就是在控制层中,须要跳转的页面的时候只须要直接写页面名称便可,不须要后缀jsp)



    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <!--<mvc:exclude-mapping path="/admin/login.html"/>-->
            <!--<mvc:exclude-mapping path="/admin/user/loginHtml.html"/>-->
            <mvc:exclude-mapping path="/api/vehicle/"/>
            <bean class="com.maiqianweng.common.interceptor.AdminContextInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

    如图所示,该项目中使用了MVC拦截器,并无拦截静态资源

    Spring没有总的拦截器。<mvc:interceptors/>会为每个HandlerMapping,注入一个拦截器。总有一个HandlerMapping是能够找处处理器的,最多也只找到一个处理器,因此这个拦截器总会被执行的。起到了总拦截器的做用。

    <mvc:mapping path="/**"/>

    该段是匹配全部路径被拦截,


    <mvc:exclude-mapping path="/api/vehicle/"/>
    <bean class="com.maiqianweng.common.interceptor.AdminContextInterceptor"/>

    该段代码是不拦截的,<bean>标签中写了后台代码,具体拦截的内容;当前url等于登陆url是返回true不拦截,反之拦截

    未完待续......

相关文章
相关标签/搜索