一、簡單使用
1、搭建Spring MVC
1.1 配置DispatcherServlet並讓Servlet容器發現他
(1)說明
DispatcherServlet是Spring MVC的核心。在這裏請求request第一次接觸到框架,它要負責將請求路由到其他的組件之中
(2)配置方式
1)方式一(傳統方式):配置在web.xml文件中,這個文件會放到應用的WAR包裏面。
2)方式二(Servlet 3規範和Spring 3.1的功能增強):使用Java將DispatcherServlet配置在Servlet容器中,不會再使用web.xml文件
如果按照方式二配置DispatcherServlet,而不是使用web.xml的話,那唯一問題在於它只能部署到支持Servlet 3.0的服務器中才能正常工作,如Tomcat 7或更高版本;
本文主要介紹方式二,具體做法是自定義一個類,繼承自AbstractAnnotationConfigDispatcherServletInitializer
方式二原理:
|
AbstractAnnotationConfigDispatcherServletInitializer抽象類中有三個需要實現的方法(這三個方法就是圍繞上面的原理中流程需要而定義的):
方法一:getServletMappings()
@Override
protected String[] getServletMappings() {
return new String[]{"/"};//將DispatcherServlet映射到“/”
}
方法二:getServletConfigClasses()
getServletConfigClasses()方法返回的帶有@Configuration註解的類將會用來定義DispatcherServlet負責創建的Spring應用上下文中的bean。
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
WebConfig.java見下文
方法三:getRootConfigClasses()
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
RootConfig.java見下文
1.2 啓用Spring MVC
1.2.1 配置getServletConfigClasses()中的WebConfig.java
方式一:使用spring配置文件方式啓動:可以使用<mvc:annotation-driven>啓用註解驅動的Spring MVC
方式二:使用JavaConfig配置方式啓動:使用@EnableWebMvc註解修飾一個JavaConfig類(已經使用@Configuration註解的類)
本文主要介紹方式二:
步驟1:啓用Spring MVC
步驟2:選擇是否啓動組件掃描
步驟3:配置視圖解析器
如果沒有配置,spring將使用默認的視圖解析器,行爲是:默認會使用BeanNameViewResolver,這個視圖解析器會查找ID與視圖名稱匹配的bean,並且查找的bean要實現View接口,它以這樣的方式來解析視圖
package com.mzj.springmvc.spittr.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc//啓用Spring MVC
@ComponentScan("com.mzj.springmvc.spittr.webbean")//指定組件掃描範圍,可以掃描到帶有@Controller註解的bean(spring mvc中的Controller)
public class WebConfig extends WebMvcConfigurerAdapter {
/**
* 添加視圖解析器bean
*
* 本實現:
*
* 會查找.JSP文件,在查找的時候,它會在視圖名稱上加一個特定的前綴和後綴(例如,名爲home的視圖將會解析爲/WEB-INF/views/home.jsp)。
*
* @return
*/
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
/**
* 通過繼承WebMvcConfigurerAdapter
* 複寫configureDefaultServletHandling
* 調用 configurer.enable();
* 達到的效果是:要求DispatcherServlet將對靜態資源的請求轉發到Servlet容 器中默認的Servlet上,而不是使用DispatcherServlet本身來處理 此類請求。
* @param configurer
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
1.2.2 配置getRootConfigClasses()中的RootConfig.java
com.mzj.springmvc.spittr
這樣的話,我們會將很多組件(非Web的組件)來應用到RootConfig中,來充實完善RootConfig。
package com.mzj.springmvc.spittr.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan(basePackages={"com.mzj.springmvc.spittr"},
excludeFilters={
@Filter(type=FilterType.ANNOTATION, value= EnableWebMvc.class)
})
public class RootConfig {
}