• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      SpringMVC4零配置--web.xml

       用勿龍潛 2015-09-30

      servlet3.0+規(guī)范后,允許servlet,filter,listener不必聲明在web.xml中,而是以硬編碼的方式存在,實現(xiàn)容器的零配置。

      ServletContainerInitializer:啟動容器時負責加載相關配置

      Java代碼  收藏代碼
      1. package javax.servlet;  
      2. import java.util.Set;  
      3. public interface ServletContainerInitializer {  
      4.  public void onStartup(Set<Class<?>> c, ServletContext ctx)  
      5.         throws ServletException;   
      6. }  

       容器啟動時會自動掃描當前服務中ServletContainerInitializer的實現(xiàn)類,并調用其onStartup方法,其參數Set<Class<?>> c,可通過在實現(xiàn)類上聲明注解javax.servlet.annotation.HandlesTypes(xxx.class)注解自動注入,@HandlesTypes會自動掃描項目中所有的xxx.class的實現(xiàn)類,并將其全部注入Set。

       

      Spring為其提供了一個實現(xiàn)類:

      SpringServletContainerInitializer

       

      Java代碼  收藏代碼
      1. package org.springframework.web;  
      2. import java.lang.reflect.Modifier;  
      3. import java.util.LinkedList;  
      4. import java.util.List;  
      5. import java.util.ServiceLoader;  
      6. import java.util.Set;  
      7. import javax.servlet.ServletContainerInitializer;  
      8. import javax.servlet.ServletContext;  
      9. import javax.servlet.ServletException;  
      10. import javax.servlet.annotation.HandlesTypes;  
      11. import org.springframework.core.annotation.AnnotationAwareOrderComparator;  
      12. @HandlesTypes(WebApplicationInitializer.class)  
      13. public class SpringServletContainerInitializer implements ServletContainerInitializer {  
      14.         @Override  
      15.     public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)  
      16.             throws ServletException {  
      17.   
      18.         List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>();  
      19.   
      20.         if (webAppInitializerClasses != null) {  
      21.             for (Class<?> waiClass : webAppInitializerClasses) {  
      22.                 // Be defensive: Some servlet containers provide us with invalid classes,  
      23.                 // no matter what @HandlesTypes says...  
      24.                 if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) &&  
      25.                         WebApplicationInitializer.class.isAssignableFrom(waiClass)) {  
      26.                     try {  
      27.                         initializers.add((WebApplicationInitializer) waiClass.newInstance());  
      28.                     }  
      29.                     catch (Throwable ex) {  
      30.                         throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);  
      31.                     }  
      32.                 }  
      33.             }  
      34.         }  
      35.   
      36.         if (initializers.isEmpty()) {  
      37.             servletContext.log("No Spring WebApplicationInitializer types detected on classpath");  
      38.             return;  
      39.         }  
      40.   
      41.         AnnotationAwareOrderComparator.sort(initializers);  
      42.         servletContext.log("Spring WebApplicationInitializers detected on classpath: " + initializers);  
      43.   
      44.         for (WebApplicationInitializer initializer : initializers) {  
      45.             initializer.onStartup(servletContext);  
      46.         }  
      47.     }  
      48.   
      49. }  

       

       從中可以看出,WebApplicationInitializer才是我們需要關心的接口,我們只需要將相應的servlet,filter,listener等硬編碼到該接口的實現(xiàn)類中即可。比如:

       

      xml配置:

       

      Xml代碼  收藏代碼
      1.        <!-- Log4jConfigListener -->  
      2.        <context-param>  
      3.     <param-name>log4jConfigLocation</param-name>  
      4.     <param-value>classpath:config/properties/log4j.properties</param-value>  
      5.        </context-param>  
      6.        <listener>  
      7.     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
      8.        </listener>  
      9.   
      10.        <!-- OpenSessionInViewFilter -->  
      11.        <filter>  
      12.     <filter-name>hibernateFilter</filter-name>  
      13.     <filter-class>  
      14.         org.springframework.orm.hibernate4.support.OpenSessionInViewFilter  
      15.     </filter-class>         
      16.        </filter>  
      17.        <filter-mapping>  
      18.     <filter-name>hibernateFilter</filter-name>  
      19.     <url-pattern>/*</url-pattern>  
      20.        </filter-mapping>  
      21.   
      22.        <!-- DemoServlet -->  
      23.        <servlet>  
      24.     <servlet-name>demoServlet</servlet-name>  
      25.     <servlet-class>web.function.servlet.DemoServlet</servlet-class>  
      26.     <load-on-startup>2</load-on-startup>  
      27.        </servlet>  
      28. <servlet-mapping>  
      29.     <servlet-name>demoServlet</servlet-name>  
      30.     <url-pattern>/demo_servlet</url-pattern>  
      31. </servlet-mapping>  

       編碼配置:

       

       

      Java代碼  收藏代碼
      1. @Order(1)  
      2. public class CommonInitializer implements WebApplicationInitializer{  
      3.   
      4.     @Override  
      5.     public void onStartup(ServletContext servletContext)  
      6.             throws ServletException {  
      7.           
      8.         //Log4jConfigListener  
      9.         servletContext.setInitParameter("log4jConfigLocation""classpath:config/properties/log4j.properties");  
      10.         servletContext.addListener(Log4jConfigListener.class);  
      11.           
      12.           
      13.         //OpenSessionInViewFilter  
      14.         OpenSessionInViewFilter hibernateSessionInViewFilter = new OpenSessionInViewFilter();  
      15.         FilterRegistration.Dynamic filterRegistration = servletContext.addFilter(  
      16.                 "hibernateFilter", hibernateSessionInViewFilter);  
      17.         filterRegistration.addMappingForUrlPatterns(  
      18.                 EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE), false"/");  
      19.           
      20.           
      21.         //DemoServlet  
      22.         DemoServlet demoServlet = new DemoServlet();  
      23.         ServletRegistration.Dynamic dynamic = servletContext.addServlet(  
      24.                 "demoServlet", demoServlet);  
      25.         dynamic.setLoadOnStartup(2);  
      26.         dynamic.addMapping("/demo_servlet");  
      27.                   
      28.           
      29.     }  
      30.   
      31.       
      32. }  

       

      Spring為我們提供了一些WebApplicationInitializer的抽象類,我們只需要繼承并按需修改即可,比如:

      1)org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer : SpringSecurity相關配置

       

      xml配置:

       

      Xml代碼  收藏代碼
      1.        <listener>  
      2.     <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>  
      3. </listener>  
      4.   
      5.        <filter>  
      6.     <filter-name>springSecurityFilterChain</filter-name>  
      7.     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
      8. </filter>  
      9.   
      10.        <filter-mapping>  
      11.     <filter-name>springSecurityFilterChain</filter-name>  
      12.     <url-pattern>/*</url-pattern>  
      13. </filter-mapping>  

       

       

      編碼配置:

       

      Java代碼  收藏代碼
      1. @Order(2)  
      2. public class WebAppSecurityInitializer  extends AbstractSecurityWebApplicationInitializer   
      3. {  
      4.     //servletContext.addListener("org.springframework.security.web.session.HttpSessionEventPublisher");  
      5.     //session監(jiān)聽器  
      6.     @Override  
      7.     protected boolean enableHttpSessionEventPublisher() {  
      8.         return true;  
      9.     }  
      10. }  

       

      2)org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer:MVC相關配置,比如加載spring配置文件,聲明DispatcherServlet等等,參看下面的對比:

      xml配置:

       

      Xml代碼  收藏代碼
      1.        <context-param>  
      2.     <param-name>contextConfigLocation</param-name>  
      3.     <param-value>  
      4.     classpath:config/context/applicationContext-AppConfig.xml,  
      5.     classpath:config/context/applicationContext-SpringSecurityConfig.xml  
      6.         </param-value>  
      7. </context-param>  
      8.   
      9.        <listener>  
      10.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
      11. </listener>  
      12.   
      13.        <filter>  
      14.     <filter-name>Set Character Encoding</filter-name>  
      15.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
      16.     <init-param>  
      17.         <param-name>encoding</param-name>  
      18.         <param-value>UTF-8</param-value>  
      19.     </init-param>  
      20.     <init-param>  
      21.         <param-name>forceEncoding</param-name>  
      22.         <param-value>true</param-value>  
      23.     </init-param>  
      24. </filter>  
      25.   
      26.        <filter-mapping>  
      27.     <filter-name>Set Character Encoding</filter-name>  
      28.     <url-pattern>/*</url-pattern>  
      29. </filter-mapping>  
      30.   
      31.        <servlet>  
      32.     <servlet-name>webmvc</servlet-name>  
      33.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
      34.     <init-param>  
      35.         <param-name>contextConfigLocation</param-name>  
      36.         <param-value>classpath:config/context/applicationContext-MvcConfig.xml</param-value>  
      37.     </init-param>  
      38.     <load-on-startup>1</load-on-startup>  
      39. </servlet>  
      40.   
      41. <servlet-mapping>  
      42.     <servlet-name>webmvc</servlet-name>  
      43.     <url-pattern>/</url-pattern>  
      44. </servlet-mapping>  

      編碼方式:

       

       

      Java代碼  收藏代碼
      1. @Order(3)  
      2. //spring DispatcherServlet的配置,其它servlet和監(jiān)聽器等需要額外聲明,用@Order注解設定啟動順序  
      3. public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {  
      4.     /* 
      5.       * DispatcherServlet的映射路徑 
      6.       */  
      7.     @Override  
      8.     protected String[] getServletMappings() {  
      9.         return new String[]{"/"};  
      10.     }  
      11.    
      12.     /* 
      13.       * 應用上下文,除web部分 
      14.       */  
      15.     @SuppressWarnings({ "unchecked""rawtypes" })  
      16.     @Override  
      17.     protected Class[] getRootConfigClasses() {  
      18.         //加載配置文件類,這里與上面的xml配置是對應的,需要使用@Configuration注解進行標注,稍后介紹  
      19.         return new Class[] {AppConfig.class, SpringSecurityConfig.class};  
      20.     }  
      21.    
      22.     /* 
      23.       * web上下文 
      24.       */  
      25.     @SuppressWarnings({ "unchecked""rawtypes" })  
      26.     @Override  
      27.     protected Class[] getServletConfigClasses() {  
      28.         return new Class[] {MvcConfig.class};  
      29.     }  
      30.    
      31.     /* 
      32.       * 注冊過濾器,映射路徑與DispatcherServlet一致,路徑不一致的過濾器需要注冊到另外的WebApplicationInitializer中 
      33.       */  
      34.     @Override  
      35.     protected Filter[] getServletFilters() {  
      36.         CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();  
      37.         characterEncodingFilter.setEncoding("UTF-8");  
      38.         characterEncodingFilter.setForceEncoding(true);  
      39.         return new Filter[] {characterEncodingFilter};  
      40.     }     
      41.   
      42. }  

       

       

       

      SpringMVC4零配置 :代碼下載

      SpringMVC4零配置--web.xml

      SpringMVC4零配置--應用上下文配置【AppConfig】

      SpringMVC4零配置--SpringSecurity相關配置【SpringSecurityConfig】

      SpringMVC4零配置--Web上下文配置【MvcConfig】


        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 亚洲成人四虎在线播放| 成人亚欧欧美激情在线观看| 亚洲AV无码不卡私人影院| 国产真实伦在线观看视频| 精品无码国产一区二区三区51安| 夜鲁夜鲁很鲁在线视频 视频| 在线涩涩免费观看国产精品| 国产精品点击进入在线影院高清| 另类 亚洲 图片 激情 欧美| 性饥渴少妇AV无码毛片| 亚洲午夜无码久久久久蜜臀AV| 欧美人妻一区二区三区| 亚洲中文久久久精品无码| 国产精品普通话国语对白露脸| 日韩女同在线二区三区| 久久精品国产免费观看三人同眠 | 正在播放国产剧情亂倫| 人妻在卧室被老板疯狂进入| 亚洲国内精品一区二区| 男人狂桶女人高潮嗷嗷| 体验区试看120秒啪啪免费| 无码熟妇人妻av影音先锋| 成人啪精品视频网站午夜| 亚洲乳大丰满中文字幕| 日韩少妇人妻vs中文字幕| 午夜大片爽爽爽免费影院| 亚洲一区二区三区无码久久| 啊轻点灬大JI巴太粗太长了在线| 正在播放国产剧情亂倫| 亚洲成人高清av在线| 在厨房被C到高潮A毛片奶水| 国产一区二区四区不卡| 又爽又黄又无遮挡的视频| 孕妇特级毛片ww无码内射| 午夜性色一区二区三区不卡视频| 韩国免费a级毛片久久| 国产福利一区二区三区在线观看| 377P欧洲日本亚洲大胆| 国产精品毛片在线完整版SAB| 999ZYZ玖玖资源站在线观看| 国产欧美日韩亚洲一区二区三区 |