最原始搭建web開發環境,即是使用web.xml配置文件,咱們能夠在web.xml中配置Servlet,Filter,Listener等等。搭建Spring開發環境也是很是的簡單。html
web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 配置加載類路徑的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 配置監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 前端控制器(加載classpath:springmvc.xml 服務器啓動建立servlet) --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置初始化參數,建立完DispatcherServlet對象,加載springmvc.xml配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <!-- 服務器啓動的時候,讓DispatcherServlet對象建立 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
在web.xml中配置ContextLoaderListener偵聽器。配置前端控制器,用於處理請求。設置contextConfigLocation變量,它的值等於spring,springmvc配置文件的路徑。
可能還有一個疑問,若是說,我使用了web.xml文件,可是個人全部Spring,SpringMvc的配置文件均是Java配置的。這時候該怎麼辦?前端
解決辦法java
web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <context-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </context-param> <!-- 配置加載類路徑的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>配置文件全類名(包名.類名)</param-value> </context-param> <!-- 配置監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 前端控制器(加載classpath:springmvc.xml 服務器啓動建立servlet) --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </init-param> <!-- 配置初始化參數,建立完DispatcherServlet對象,加載springmvc.xml配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>配置文件全類名</param-value> </init-param> <!-- 服務器啓動的時候,讓DispatcherServlet對象建立 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
跟前面的差異就是:將原來的xml文件路徑改爲Java配置文件的全類名,配置了contextClass參數。 web
在此次的搭建中,看上去會以爲更加高大上一些。
文件的目錄結構以下:
spring
這裏面沒有webapp目錄,更沒有web.xml文件。模板引擎咱們使用的是thymeleaf。
咱們應該明白一點,凡是實現WebApplicationInitializer接口的類,均可以自動加載。spring-mvc
1.先來看一個很重要的類服務器
public class WebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext = new AnnotationConfigWebApplicationContext(); annotationConfigWebApplicationContext.setServletContext(servletContext); servletContext.addListener(new ContextLoaderListener(annotationConfigWebApplicationContext)); annotationConfigWebApplicationContext.register(AppConfig.class, WebConfig.class); annotationConfigWebApplicationContext.refresh(); DispatcherServlet servlet = new DispatcherServlet(annotationConfigWebApplicationContext); ServletRegistration.Dynamic registration = servletContext.addServlet("DispatcherServlet", servlet); registration.setLoadOnStartup(1); registration.addMapping("/"); } }
解釋:其中AnnotationConfigWebApplicationContext 是用於生成spring容器用的。
AppConfig和WebConfig分別是Spring,SprienngMvc的配置文件。
實現WebApplicationInitializer的類能夠有多個,並且實現WebApplicationInitializer類能夠用於添加Servle,過濾器,監聽器等等,每一個都是自動加載的,因此咱們能夠寫多個這樣的類用於不一樣的目的。mvc
2.下面這個是java的配置類,能夠根據須要進行具體配置app
@Configuration @ComponentScan public class AppConfig { }
3.下面是SoringMvc配置文件webapp
@Configuration @ComponentScan @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } @Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setPrefix("classpath:/templates/"); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode("HTML"); templateResolver.setCharacterEncoding("UTF-8"); return templateResolver; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); return templateEngine; } @Bean public ViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine()); viewResolver.setOrder(1); return viewResolver; } }
SpringMvc的配置類實現了WebMvcConfigurer 接口,配置了視圖解析器,實現這個接口,能夠重載方法作springmvc的配置,如添加攔截器等