Spring MVC的學習筆記
基於註解形式配置Spring MVC
一、註冊並初始化DispatcherServlet,由Servlet容器自動檢測並啟動
註解形式
public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletCxt) { // Load Spring web application configuration AnnotationConfigWebApplicationContext ac = newAnnotationConfigWebApplicationContext(); ac.register(AppConfig.class); ac.setServletContext(servletCxt); ac.refresh(); // Create and register the DispatcherServlet DispatcherServlet servlet = new DispatcherServlet(ac); ServletRegistration.Dynamic registration= servletCxt.addServlet("app", servlet); registration.setLoadOnStartup(1); registration.addMapping("/app/*"); } }
XML形式
<web-app> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/app-context.xml</param-value> </context-param> <servlet> <servlet-name>app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping> </web-app>
2.WebApplicationContext
層次結構配置SpringMVC
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { RootConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { App1Config.class }; } @Override protected String[] getServletMappings() { return new String[] { "/app1/*" }; } }
等同於XML配置
<web-app> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/root-context.xml</param-value> </context-param> <servlet> <servlet-name>app1</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/app1-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app1</servlet-name> <url-pattern>/app1/*</url-pattern> </servlet-mapping> </web-app>
如果不需要應用程式上下文層次結構,則應用程式可以僅配置“根”上下文,並將contextConfigLocation
Servlet引數保留為空。
3.特殊Bean類
|
將請求對映到處理程式以及用於預處理和後處理的攔截器列表 。對映基於某些標準,其細節因 兩個主要 |
|
|
解決異常的策略,可能將它們對映到處理程式,HTML錯誤檢視或其他目標。請參閱例外。 |
|
解決 |
|
解決Web應用程式可以使用的主題 - 例如,提供個性化佈局。見主題。 |
|
在一些多部分解析庫的幫助下,解析多部分請求(例如,瀏覽器表單檔案上載)的抽象。請參閱Multipart Resolver。 |
|
儲存和檢索“輸入”和“輸出” |
說明:應用程式可以宣告 處理請求所需的特殊Bean型別中列出的基礎結構bean 。該DispatcherServlet
檢查 WebApplicationContext
對每個特殊的豆。如果沒有匹配的bean型別,它將回退到列出的預設型別 DispatcherServlet.properties
。
4.註冊SpringMVC與XML檔案組合進行配置
import org.springframework.web.WebApplicationInitializer; public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { XmlWebApplicationContext appContext = new XmlWebApplicationContext(); appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml"); ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext)); registration.setLoadOnStartup(1); registration.addMapping("/"); } }
5.基於Java類進行配置SpringMVC
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return null; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { MyWebConfig.class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
6.基於XML的Spring配置
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer { @Override protected WebApplicationContext createRootApplicationContext() { return null; } @Override protected WebApplicationContext createServletApplicationContext() { XmlWebApplicationContext cxt = new XmlWebApplicationContext(); cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml"); return cxt; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
也可以重寫並註冊多個Filter過濾器
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer { /** * 每個過濾器都會根據其具體型別新增一個預設名稱,並自動對映到 * DispatcherServlet */ @Override protected Filter[] getServletFilters() { return new Filter[] { new HiddenHttpMethodFilter(), new CharacterEncodingFilter() }; } }