基於java配置的springMvc

使用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/項目名/ 就可以看到結果了










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章