1. 程式人生 > >springmvc中dispatcherservlet與攔截器

springmvc中dispatcherservlet與攔截器

dispatcherservlet常見配置

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-*-
config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

<url-pattern>/</url-pattern>

時,預設就是攔截所有路徑
連靜態資源也不能訪問
但是,controller中配置@RequestMapping的路徑是不會被攔截的,配置了@RequestMapping就相當於在web.xml中註冊了<servlet>

那麼此時如果需要做類似登入攔截的操作,就必須自定義攔截器,如:

    <interceptors>
        <interceptor>
            <mapping path="/cus/*" />
            <beans:bean class="com.water.it.yqb.backend.interceptor.LoginInterceptor"
>
</beans:bean> </interceptor> <interceptor> <mapping path="/cus/*/*" /> <beans:bean class="com.water.it.yqb.backend.interceptor.LoginInterceptor"> </beans:bean> </interceptor> <interceptor> <mapping path="/biz/*" /> <beans:bean class="com.water.it.yqb.backend.interceptor.LoginInterceptor"> </beans:bean> </interceptor> </interceptors>

這樣,凡是cus和biz開頭的路徑都會被攔截

注意:登入頁面不要以cus或biz開頭,否則連登入頁都無法訪問,或者可以配置不攔截URL

<property name="exceptUrls">  
    <list>  
        <value>/user/login</value>  
        <value>/user/register</value>  
    </list>  
</property>  

靜態資源訪問

<url-pattern>/</url-pattern>時,預設就是攔截所有路徑,所以靜態資源也是無法訪問的,參考配置:

<resources mapping="/components/**" location="/components/" />
<resources mapping="/backend/**" location="/backend/" />
<resources mapping="/mobile/**" location="/mobile/" />

配置以後,components、backend和mobile開頭的路徑資源都能正常訪問

注意:靜態目錄必須是web根(可能是webapp,webContent等)目錄下,否則是不能引用的