使用Java配置需要把項目部署在Tomcat 7或更高版本。
創建spring 的maven項目
配置spring的依賴包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
</dependencies>
配置DispatcherServlet
繼承自AbstractAnnotationConfigDispatcherServletInitializer的任意類都會自動的配置DispatcherServlet和Spring應用上下文,Spring的應用上下文會位於應用程序的Servlet上下文中。
DispatcherServlet和ContextLoaderListener(Servlet 監聽器)的關係:
當DispatcherServlet啓動的時候會創建Spring應用上下文,並加載配置文件或配置類中聲明的bean。下面代碼的getServletConfigClasses() 方法中會使DispatcherServlet加載應用上下文的時候,使用定義在WebConfig配置類中的bean。
但是在Spring Web應用中,通常還會有另外一個應用上下文。另外的這個應用上下文是由ContextLoaderListener創建的。我們希望DispatcherServlet加載包含Web組件的bean,如控制器、視圖解析器以及處理器映射,而ContextLoaderListener要加載應用中的其他bean。這些bean通常是驅動應用後端的中間層和數據層組件。
實際上,AbstractAnnotationConfigDispatcherServletInitializer會同時創建DispatcherServlet和ContextLoaderListener。GetServlet-ConfigClasses()方法返回的帶有@Configuration註解的類將會用來定義DispatcherServlet應用上下文中的bean。getRootConfigClasses()方法返回的帶有@Configuration註解的類將會用來配置ContextLoaderListener創建的應用上下文中的bean。
package spittr.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* 該類會自動的配置DispatcherServlet和spring應用上下文,spring的應用上下文會位於應用程序的Servlet上下文之中
*/
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
//返回帶有@Configuration註解的類將會用來定義DispatcherServlet應用上下文中的bean
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] { WebConfig.class };
}
//返回的帶有@Configuration註解的類將會用來配置ContextLoaderListener創建的應用上下文中的bean
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { RootConfig.class };
}
//將DispatcherServlet映射到"/",處理所有的請求
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
最小但可用的Spring MVC配置
package 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.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc //啓用springMvc
@ComponentScan("spittr.web")//自動掃描包spittr.web下的所有控制器
public class WebConfig extends WebMvcConfigurerAdapter {
//配置jsp視圖解析器
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
//配置靜態資源的處理
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer){
configurer.enable();
}
}
Web相關的配置通過DispatcherServlet創建的應用上下文都已經配置好了,因此現在的RootConfig相對很簡單:
package 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={"spittr"}, excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)})
public class RootConfig {
}
編寫基本的控制器package spittr.web;
import static org.springframework.web.bind.annotation.RequestMethod.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value="/")
public class HomeController {
@RequestMapping(method=GET)
public String home(){
return "home";
}
}
創建WEB-IN/views/home.jsp
這裏只是測試界面
<html>
<body>
<h2>I am here!</h2>
</body>
</html>
配置tomcat,啓動項目,訪問localhost:8080/項目名/ 就可以看到結果了