MvcConfig
@EnableWebMvc //handlerMapping handlerAdapter json转换器
@Configuration
@ComponentScan(basePackages = "com.atguigu")
public class MvcConfig implements WebMvcConfigurer {
//视图解析器,指定前后缀
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// registry可以快速添加前后缀
registry.jsp("/WEB-INF/views/", ".jsp");
}
}
SpringMvcInit
public class SpringMvcInit
extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{MvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
JspController
/**
* 返回jsp模板页面
*/
@Controller
@RequestMapping("/jsp")
public class JspController {
/**
* 快速查找视图
* 1. 返回值类型是字符串
* 2. 不能添加ResponseBody 直接返回给浏览器不找视图
* 3. 通过返回值填写对应的视图名称即可
*/
@RequestMapping("index")
public String index(HttpServletRequest req){
req.setAttribute("data","this is data");
System.out.println("index");
return "index";
}
}
在return前添加关键字
forward转发 :只能访问项目内的路径
redirect重定向:可以访问项目外的路径
/**
* 转发(只能是项目下的资源)
* 1. 方法返回值为字符串
* 2. 不能添加responseBody注解
* 3. 返回字符串前添加 forward: /转发地址 字符串
*/
@RequestMapping("/forward")
public String forward(HttpServletRequest req){
return "forward:/jsp/index";
}
/**
* 重定向(可以是项目外的资源)
* 1. 方法返回值为字符串类型
* 2. 不能添加ResponseBody注解
* 3. 返回字符串前添加redirect:/转发地址 字符串
*/
@RequestMapping("/redirect")
public String redirect(HttpServletRequest req){
return "redirect:/jsp/index";
}
@Controller
@RequestMapping("/json")
@ResponseBody //返回json的注解,可以添加到类上,也可以添加在方法、接口上
@RestController // 它是 Controller + ResponseBody的结合体
public class JsonController {
/**
* @ResponseBody 会将数据直接放入响应体中,也不会再走视图解析器
* 快速查找视图和 转发重定向都不生效了!
*/
@RequestMapping("data")
@ResponseBody
public User data(){
User user = new User();
user.setName("twoDog");
user.setAge(3);
return user; //user ---> handlerAdapter --->Json --->@responseBody--->Json返回【前后端分离模式】
}
@RequestMapping("data1")
@ResponseBody
public List<User> data1(){
List<User> users=new ArrayList<>();
users.add(new User("erya",6));
users.add(new User("ergouzi",18));
return users; //user ---> handlerAdapter --->Json --->@responseBody--->Json返回【前后端分离模式】
}
}
在配置类中开启 configureDefaultServletHandling,
DefaultServletHandler是作为handlerMapping的补充使用,
因为静态资源不会加RequestMapping映射,会报404,DefaultServletHandler就会去直接找文件的真实路径,如果还没有才会报404.
只要在MvcConfig中配置 实现一个方法就好了
@EnableWebMvc //handlerMapping handlerAdapter json转换器
@Configuration
@ComponentScan(basePackages = "com.atguigu")
public class MvcConfig implements WebMvcConfigurer {
//视图解析器,指定前后缀
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// registry可以快速添加前后缀
registry.jsp("/WEB-INF/views/", ".jsp");
}
//开启静态资源查找
//dispatcherServlet -> handlerMapping 找有没有对应的handler再去找静态资源 ->有没有静态资源
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
推荐阅读: