1. 程式人生 > 實用技巧 >web.xml之servlet與filter配置

web.xml之servlet與filter配置

servlet配置

一個完整的servlet配置分為兩塊,< servlet >塊和< servlet-mapping >塊

< servlet >

<servlet>
    <servlet-name>NameIsServletTest</servlet-name>      <!-- 該servlet標識名,與servlet-mapping中的標識名對應 組成配對 -->
    <servlet-class>com.qq.web.servlet.ServletTest</servlet-class>   <!-- 該servlet全類名 -->
    <init-param>    <!-- 初始化引數 -->
        <param-name>paramName</param-name>   <!-- 初始化引數 鍵-->
        <param-value>paramValue</param-value>   <!-- 初始化引數 值-->
    </init-param>
    <init-param>    <!-- 初始化引數 可配置多個-->
        <param-name>paramName2</param-name>
        <param-value>paramValue2</param-value>
    </init-param>
</servlet>

< servlet-mapping >

<servlet-mapping>
    <servlet-name>NameIsServletTest</servlet-name>      <!-- 與上面<servlet>下的<servlet-name>一致組成配對 -->
    <url-pattern>/test</url-pattern>    <!-- 該servlet路由配置 -->
</servlet-mapping>

InitParameter獲取初始化引數

    Enumeration<String> en1 = getInitParameterNames();      // getInitParameterNames()獲取初始化引數的key列舉
    while (en1.hasMoreElements()) {
        String key = en1.nextElement();
        System.out.println("en1-----value:"+getInitParameter(key));     // getInitParameter(key)通過key獲取初始化引數的值
    }
  
        // 其實和上面是一樣的
    Enumeration<String> en2 = getServletConfig().getInitParameterNames();      // 使用getServletConfig().getInitParameterNames()獲取初始化引數的key列舉      
    while (en2.hasMoreElements()) {
        String key2 = en2.nextElement();
        System.out.println("en2-----value:"+getInitParameter(key2));
    }

filter配置

同servlet完整的filter配置也分為兩塊,< filter >與< filter-mapping >

< filter >

<filter>
    <filter-name>FilterTest</filter-name>   <!-- filter標識名 -->
    <filter-class>com.qq.web.filter.FilterTest</filter-class>  <!--filter全類名-->
    <init-param>    <!--初始化引數-->
        <param-name>filterName</param-name>
        <param-value>filterValue</param-value>
    </init-param>
</filter>

< filter-mapping >

 <filter-mapping>
    <filter-name>FilterTest</filter-name>   <!-- 標識名與上面的相同組成配對 -->
    <url-pattern>/*</url-pattern>       <!-- 匹配要過濾的請求url -->
    <!--
        /* , /login/* 模糊匹配 前面對上了就ok
        /index ,/login  全路徑匹配 全部對上才行
        *.html ,*.js 副檔名匹配,後面對上就ok,注意前面不能與 / 
            如果一個url能匹配上多個過濾器 
                過濾器都在xml中配置的話 按配置的前後順序執行
                過濾器都在註解上配置的  按過濾器類名的字母排序執行
                都有的話  先執行xml中配置的再執行註解配置的
    -->
    <!-- 過濾器攔截的請求型別 -->
    <dispatcher>REQUEST</dispatcher>    <!-- http請求 不寫預設時這個 -->
    <dispatcher>FORWARD</dispatcher>    <!-- 請求轉發 -->
    <dispatcher>INCLUDE</dispatcher>    <!-- jsp包含 -->
    <dispatcher>ERROR</dispatcher>      <!-- err時跳轉 -->
</filter-mapping>

filter獲取初始化引數

 public void init(FilterConfig config) throws ServletException {      // 在過濾器的init方法中用config獲取初始化引數
    Enumeration<String> filterEn1 = config.getInitParameterNames();
    while (filterEn1.hasMoreElements()){
        System.out.println(config.getInitParameter(filterEn1.nextElement()));
    }
}

上下文初始化引數

<context-param>      <!-- 只能有一對鍵值用作應用的Servlet上下文初始化引數,引數名在整個Web應用中必須是惟一的,任意的Servlet和jsp都可以隨時隨地訪問它 -->
    <param-name>contextName</param-name>
    <param-value>contextValue</param-value>
</context-param>

  // 獲取上下文初始化引數
    Enumeration<String> contextEn = getServletContext().getInitParameterNames();      // 全域性的資源都在getServletContext()這裡
    while (contextEn.hasMoreElements()) {
        System.out.println("context-----value:"+getServletContext().getInitParameter(contextEn.nextElement()));
    }