注解名 | 作用 |
---|
@EnableWebMvc | 开启SpringMVC定制配置功能 等用于 mvc:annotations-driven/ |
MyWebAppInitializer
package com.test;
import com.test.config.AppConfig;
import com.test.config.RootConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
//web容器启动的时候创建对象;调用方法来初始化容器以前前端控制器
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
//获取根容器的配置类:(spring的配置文件) 父容器
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
//获取子容器的配置类:(springMVC的配置文件) 子容器
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{AppConfig.class};
}
//获取DispatcherServlet的映射信息
// /:拦截所有请求(包括js,png等),但不包括jsp文件
// /*:拦截所有请求,包括jsp jsp:jsp页面是Tomcat的Jsp引擎解析的
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
AppConfig
package com.test.config;
import com.test.controller.MyFirstInterceptor;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.*;
//springMVC不扫描Controller
@ComponentScan(value = "com.test",includeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
},useDefaultFilters = false)
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
//视图解析器
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
//默认所有页面都从("/WEB-INF/", ".jsp");
//registry.jsp();
registry.jsp("/WEB-INF/views/",".jsp");
}
//静态资源访问 相当于<mvc:default-servlet-handler/>
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
//拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyFirstInterceptor()).addPathPatterns("/**");
}
//等等更多
}
RootConfig
package com.test.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
//spring只扫描Controller
@ComponentScan(value = "com.test",excludeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
})
public class RootConfig {
}
HelloService
package com.test.service;
import org.springframework.stereotype.Service;
@Service
public class HelloService {
public String sayHello(String name){
return "hello"+name;
}
}
MyFirstInterceptor
package com.test.controller;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//自定义拦截器
public class MyFirstInterceptor implements HandlerInterceptor {
//目标方法之前执行
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.printf("preHandle");
return true;
}
目标方法之后执行
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.printf("postHandle");
}
//响应到页面以后执行
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.printf("afterCompletion");
}
}
HelloController
package com.test.controller;
import com.test.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@Autowired
HelloService service;
@ResponseBody
@RequestMapping("/hello")
public String hello(){
String s = service.sayHello("张三");
return s;
}
@RequestMapping("/success")
public String success(){
return "success";
}
}
jsp页面就不放了