生活随笔
收集整理的這篇文章主要介紹了
SpringMVC4零配置--web.xml
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
servlet3.0+規(guī)范后,允許servlet,filter,listener不必聲明在web.xml中,而是以硬編碼的方式存在,實(shí)現(xiàn)容器的零配置。
ServletContainerInitializer:啟動(dòng)容器時(shí)負(fù)責(zé)加載相關(guān)配置
Java代碼 ?
package?javax.servlet;??import?java.util.Set;??public?interface?ServletContainerInitializer?{???public?void?onStartup(Set<Class<?>>?c,?ServletContext?ctx)??????????throws?ServletException;???}?? ?容器啟動(dòng)時(shí)會(huì)自動(dòng)掃描當(dāng)前服務(wù)中ServletContainerInitializer的實(shí)現(xiàn)類,并調(diào)用其onStartup方法,其參數(shù)Set<Class<?>> c,可通過在實(shí)現(xiàn)類上聲明注解javax.servlet.annotation.HandlesTypes(xxx.class)注解自動(dòng)注入,@HandlesTypes會(huì)自動(dòng)掃描項(xiàng)目中所有的xxx.class的實(shí)現(xiàn)類,并將其全部注入Set。
?
Spring為其提供了一個(gè)實(shí)現(xiàn)類:
SpringServletContainerInitializer
?
Java代碼 ?
package?org.springframework.web;??import?java.lang.reflect.Modifier;??import?java.util.LinkedList;??import?java.util.List;??import?java.util.ServiceLoader;??import?java.util.Set;??import?javax.servlet.ServletContainerInitializer;??import?javax.servlet.ServletContext;??import?javax.servlet.ServletException;??import?javax.servlet.annotation.HandlesTypes;??import?org.springframework.core.annotation.AnnotationAwareOrderComparator;??@HandlesTypes(WebApplicationInitializer.class)??public?class?SpringServletContainerInitializer?implements?ServletContainerInitializer?{??????????@Override??????public?void?onStartup(Set<Class<?>>?webAppInitializerClasses,?ServletContext?servletContext)??????????????throws?ServletException?{????????????List<WebApplicationInitializer>?initializers?=?new?LinkedList<WebApplicationInitializer>();????????????if?(webAppInitializerClasses?!=?null)?{??????????????for?(Class<?>?waiClass?:?webAppInitializerClasses)?{??????????????????????????????????????????????????if?(!waiClass.isInterface()?&&?!Modifier.isAbstract(waiClass.getModifiers())?&&??????????????????????????WebApplicationInitializer.class.isAssignableFrom(waiClass))?{??????????????????????try?{??????????????????????????initializers.add((WebApplicationInitializer)?waiClass.newInstance());??????????????????????}??????????????????????catch?(Throwable?ex)?{??????????????????????????throw?new?ServletException("Failed?to?instantiate?WebApplicationInitializer?class",?ex);??????????????????????}??????????????????}??????????????}??????????}????????????if?(initializers.isEmpty())?{??????????????servletContext.log("No?Spring?WebApplicationInitializer?types?detected?on?classpath");??????????????return;??????????}????????????AnnotationAwareOrderComparator.sort(initializers);??????????servletContext.log("Spring?WebApplicationInitializers?detected?on?classpath:?"?+?initializers);????????????for?(WebApplicationInitializer?initializer?:?initializers)?{??????????????initializer.onStartup(servletContext);??????????}??????}????}?? ?
?從中可以看出,WebApplicationInitializer才是我們需要關(guān)心的接口,我們只需要將相應(yīng)的servlet,filter,listener等硬編碼到該接口的實(shí)現(xiàn)類中即可。比如:
?
xml配置:
?
Xml代碼 ?
??????????????<context-param>??????<param-name>log4jConfigLocation</param-name>??????<param-value>classpath:config/properties/log4j.properties</param-value>?????????</context-param>?????????<listener>??????<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>?????????</listener>??????????????????<filter>??????<filter-name>hibernateFilter</filter-name>??????<filter-class>??????????org.springframework.orm.hibernate4.support.OpenSessionInViewFilter??????</filter-class>????????????????</filter>?????????<filter-mapping>??????<filter-name>hibernateFilter</filter-name>??????<url-pattern>/*</url-pattern>?????????</filter-mapping>??????????????????<servlet>??????<servlet-name>demoServlet</servlet-name>??????<servlet-class>web.function.servlet.DemoServlet</servlet-class>??????<load-on-startup>2</load-on-startup>?????????</servlet>??<servlet-mapping>??????<servlet-name>demoServlet</servlet-name>??????<url-pattern>/demo_servlet</url-pattern>??</servlet-mapping>?? ?編碼配置:
?
?
Java代碼 ?
@Order(1)??public?class?CommonInitializer?implements?WebApplicationInitializer{????????@Override??????public?void?onStartup(ServletContext?servletContext)??????????????throws?ServletException?{????????????????????????????servletContext.setInitParameter("log4jConfigLocation",?"classpath:config/properties/log4j.properties");??????????servletContext.addListener(Log4jConfigListener.class);??????????????????????????????????????OpenSessionInViewFilter?hibernateSessionInViewFilter?=?new?OpenSessionInViewFilter();??????????FilterRegistration.Dynamic?filterRegistration?=?servletContext.addFilter(??????????????????"hibernateFilter",?hibernateSessionInViewFilter);??????????filterRegistration.addMappingForUrlPatterns(??????????????????EnumSet.of(DispatcherType.REQUEST,?DispatcherType.FORWARD,?DispatcherType.INCLUDE),?false,?"/");??????????????????????????????????????DemoServlet?demoServlet?=?new?DemoServlet();??????????ServletRegistration.Dynamic?dynamic?=?servletContext.addServlet(??????????????????"demoServlet",?demoServlet);??????????dynamic.setLoadOnStartup(2);??????????dynamic.addMapping("/demo_servlet");??????????????????????????????????}??????????}?? ?
Spring為我們提供了一些WebApplicationInitializer的抽象類,我們只需要繼承并按需修改即可,比如:
1)org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer : SpringSecurity相關(guān)配置
?
xml配置:
?
Xml代碼 ?
???????<listener>??????<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>??</listener>???????????<filter>??????<filter-name>springSecurityFilterChain</filter-name>??????<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>??</filter>???????????<filter-mapping>??????<filter-name>springSecurityFilterChain</filter-name>??????<url-pattern>/*</url-pattern>??</filter-mapping>?? ?
?
編碼配置:
?
Java代碼 ?
@Order(2)??public?class?WebAppSecurityInitializer??extends?AbstractSecurityWebApplicationInitializer???{??????????????@Override??????protected?boolean?enableHttpSessionEventPublisher()?{??????????return?true;??????}??}?? ?
2)org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer:MVC相關(guān)配置,比如加載spring配置文件,聲明DispatcherServlet等等,參看下面的對(duì)比:
xml配置:
?
Xml代碼 ?
???????<context-param>??????<param-name>contextConfigLocation</param-name>??????<param-value>??????classpath:config/context/applicationContext-AppConfig.xml,??????classpath:config/context/applicationContext-SpringSecurityConfig.xml??????????</param-value>??</context-param>???????????<listener>??????<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>??</listener>???????????<filter>??????<filter-name>Set?Character?Encoding</filter-name>??????<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>??????<init-param>??????????<param-name>encoding</param-name>??????????<param-value>UTF-8</param-value>??????</init-param>??????<init-param>??????????<param-name>forceEncoding</param-name>??????????<param-value>true</param-value>??????</init-param>??</filter>???????????<filter-mapping>??????<filter-name>Set?Character?Encoding</filter-name>??????<url-pattern>/*</url-pattern>??</filter-mapping>???????????<servlet>??????<servlet-name>webmvc</servlet-name>??????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>??????<init-param>??????????<param-name>contextConfigLocation</param-name>??????????<param-value>classpath:config/context/applicationContext-MvcConfig.xml</param-value>??????</init-param>??????<load-on-startup>1</load-on-startup>??</servlet>????<servlet-mapping>??????<servlet-name>webmvc</servlet-name>??????<url-pattern>/</url-pattern>??</servlet-mapping>?? 編碼方式:
?
?
Java代碼 ?
@Order(3)??public?class?WebInitializer?extends?AbstractAnnotationConfigDispatcherServletInitializer?{??????????@Override??????protected?String[]?getServletMappings()?{??????????return?new?String[]{"/"};??????}?????????????@SuppressWarnings({?"unchecked",?"rawtypes"?})??????@Override??????protected?Class[]?getRootConfigClasses()?{??????????????????return?new?Class[]?{AppConfig.class,?SpringSecurityConfig.class};??????}?????????????@SuppressWarnings({?"unchecked",?"rawtypes"?})??????@Override??????protected?Class[]?getServletConfigClasses()?{??????????return?new?Class[]?{MvcConfig.class};??????}?????????????@Override??????protected?Filter[]?getServletFilters()?{??????????CharacterEncodingFilter?characterEncodingFilter?=?new?CharacterEncodingFilter();??????????characterEncodingFilter.setEncoding("UTF-8");??????????characterEncodingFilter.setForceEncoding(true);??????????return?new?Filter[]?{characterEncodingFilter};??????}???????}?? ?
?
?
SpringMVC4零配置?:代碼下載
SpringMVC4零配置--web.xml
SpringMVC4零配置--應(yīng)用上下文配置【AppConfig】
SpringMVC4零配置--SpringSecurity相關(guān)配置【SpringSecurityConfig】
SpringMVC4零配置--Web上下文配置【MvcConfig】
?
轉(zhuǎn)載于:https://www.cnblogs.com/hyl8218/p/6128191.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC4零配置--web.xml的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。