1. 程式人生 > >SpringMVC 通過java類配置(不通過web.xml和xml 配置檔案方式)

SpringMVC 通過java類配置(不通過web.xml和xml 配置檔案方式)

介紹:

springMVC 常用的配置方式是在web.xml 中配置dispatcherservlet 和 ContextConfigLocation 和一些攔截器,然後或是配置applicationContext-mvc.xml 然後在controller 等類中加上註解的方式來啟動

其實不一定非要用web.xml 來進行配置,在servlet3.0 標準中就沒有web.xml 配置檔案了,springMVC 同樣也可以不需要依賴web.xml檔案,而是通過建立類的方式配置

步驟

1.需要建立一個類繼承自AbstractAnnotationConfigDispatcherServletInitializer,這個類的作用相當於DispathcerServlet

package before.springmvc;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * SpringMVC 非web.xml 配置方式
 * 
 * 傳統  DispatcherServlet 配置在 web.xml 的初始化方式
 * 
 * 而 servlet 3.0 則是
 * 1. 配置 DispatcherServlet 需要建立一個web 初始化類,繼承自 AbstractAnnotationConfigDispathcerServletInitializer
 * 
 * @author Administrator
 *
 */
public class OurWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class<?>[] { RootConfig.class };
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { WebConfig.class };        //指定Web配置類
	}

	@Override
	protected String[] getServletMappings() {//將 DispatcherServlet 對映到 "/" 路徑
		return new String[] { "/" };
	}

}

2建立一個RootConfig類,指定掃描包位置

此類類似於application.xml ,事務,資料庫等bean 配置,需要配置到本類, 類似於applicationContext 上下文

package before.springmvc;

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;

/**
 * 3. 配置
 * @author Administrator
 *
 */

@Configuration
//配置註解掃描的包路徑
@ComponentScan( basePackages={"com.game"}, 
                 excludeFilters = { @Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)}
               )
public class RootConfig {

}

3.建立一個類繼承WebMvcConfigurerAdapter 類,相當於檢視解析器的作用,同時配置掃描controller 的路徑

類似於application-mvc.xml 檔案,此檔案的配置大部分都可在此類中配置

package before.springmvc;

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;

/**
 * 配置 SpringMVC 檢視解析類WebConfig ,需要繼承自 WebMvcConfigureAdapter
 * @author Administrator
 *
 */

@Configuration
@EnableWebMvc //啟動 springMVC
@ComponentScan(value = {"com.game.controller"})	//配置元件掃描
public class WebConfig extends WebMvcConfigurerAdapter{
	
	//配置jsp 檢視解析器
	@Bean
	public ViewResolver viewResolver(){
		InternalResourceViewResolver resolver = new InternalResourceViewResolver();
		resolver.setPrefix("/view");//設定預載入路徑/目錄
		resolver.setSuffix(".jsp");  //設定允許字尾
		resolver.setExposeContextBeansAsAttributes(true);
		return resolver;
	}
	
	//配置靜態資源的處理
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();//對靜態資源的請求轉發到容器預設的servlet,而不使用 DispatcherServlet
	}

}

完成這三個步驟就可以在具體類中使用controller 註解和servlet註解等,無需web.xml 檔案和 application-mvc.xml檔案就可以啟動專案