闲来无事,初学SpringMVC多看了下基于java的开发
package javaConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
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//注明配置类
@EnableAspectJAutoProxy//开启切面代理,可以不要可以要
@EnableWebMvc//开启mvc配置
@ComponentScan(basePackages={"Action"})//扫描配置包
//mvc静态资源
public class mvcConfig extends WebMvcConfigurerAdapter{
//配置视图
@Bean("viewResolver")
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver inResolver = new InternalResourceViewResolver();
inResolver.setPrefix("/");
inResolver.setSuffix(".jsp");
return inResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
// TODO Auto-generated method stub
configurer.enable();//处理静态资源
}
}
在servlet3.0后,serlvet会寻找ServletContainerInitializer的实现作为servlet的配置类,其次才会在web.xml进行配置
SpringServletContainerInitializer--ServletContainerInitializer
ServletContainerInitializer找到SpringServletContainerInitializer后,观察源码可以知道,SpringServletContainerInitializer他会寻找实现WebApplicationInitializer的类,刨根究底最后就是找AbstractAnnotationConfigDispatcherServletInitializer的子类,继承了这个抽象类,实现里面的方法,相当于配置了SpringMVC的核心DispatcherServlet
比如我自己的:
package javaConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
//servlet3.0容器下会默认查找一个servlet初始化的一个类,然后才去查找web.xml
public class initServlet extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class
[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[]{myConfig.class};
}
@Override
protected Class
[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[]{mvcConfig.class};
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[]{"/"};
}
}
如果还需要配置其他的filter或者servlet,方法有3种。
1.直接在web.xml里面配置,或者通过java注解配置如@WebServlet
2.在AbstractAnnotationConfigDispatcherServletInitializer还可以通过重载相应的方法进行注册(只能注册filter)
3.在其他实现了WebApplicationInitializer的子类里进行注册(实现onStartup方法)
对DispatcherServlet进行额外的配置:
在AbstractAnnotationConfigDispatcherServletInitializer的实现类中重载
@Override
protected void customizeRegistration(Dynamic registration) {
// TODO Auto-generated method stub
super.customizeRegistration(registration);
}
参考文献(Spring in action)