springMvc 注解开发 基于Servlet3.0容器,tomcat需要7以上
- 1 配置DispatcherServlet
/**
*author huangh
*date 2018/9/8 15:07
*description DispatcherServlet
*/
@Component
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//spring根容器 存放Service repositories
protected Class<?>[] getRootConfigClasses() {
//加载写好的Root WebApplicationContext
return new Class[]{RootConfig.class};
}
//springMvc容器 存放controller,viewResolver,handlerMapper
protected Class<?>[] getServletConfigClasses() {
//加载写好的Servlet WebApplicationContext
return new Class[]{ServletConfig.class};
}
//Dispatcher处理静态资源
// "/"拦截所有请求(.css,.js) tomcat会处理
// "/*"拦截所有请求,包括".jsp"
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
- 2 配置好DispatcherServlet后 先看一张架构图
从图中我们看出需要DispatcherServlet需要Servlet WebApplicationContext和 Root WebApplicationContext
Servlet WebApplicationContext: 是servlet容器 里面包含controller,viewResolver,handlerMapping
Root WebApplicationContext: 就是我们熟悉的spring 容器 里面放 service ,repository
- 3 配置Servlet WebApplicationContext
/**
*author huangh
*date 2018/9/8 15:27
*description springMvc 容器
*/
@ComponentScan(value = "com.hh.web",includeFilters = {
//设置包含 controller层
@Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
},useDefaultFilters = false)
//开启spring mvc注解模式
@EnableWebMvc
public class ServletConfig extends WebMvcConfigurerAdapter {
/**视图解析器*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/",".jsp");
}
/**对静态资源 使用servlet容器规定,不使用dispatcherServlet来处理*/
/**如果不指定的话 静态资源无法访问,.png .js .css等*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**拦截器*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new Myinterceptor());
}
}
4 配置Root WebApplicationContext
/**
*author huangh
*date 2018/9/8 15:19
*description spring根容器
*/
@ComponentScan(value = "com.hh.web",includeFilters = {
//需要把controller排除,虽然不排除也ok 但是还是分成开发 解耦合
@Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
})
public class RootConfig {
}
5 配置以及完成,写好controller service 测试
controller
@Controller
public class HeyController {
@Autowired
private HeyService heyService;
@ResponseBody
@RequestMapping("/")
public String sayHello() {
return heyService.say();
}
@GetMapping("/to")
public String toJsp() {
return "success";
}
}
service
@Service
public class HeyService {
public String say() {
return "hello";
}
}
自此入门demo以及完成啦