spring boot 学习3 web MVC核心与视图

内容:理解、认识、简化

servlet

特点:请求响应式(Request/Response)、屏蔽网络通讯细节、有完整的生命周期

职责:处理请求(handler等)、资源管理(连接数据库、redis)、视图渲染(html等)

 

spring boot 学习3 web MVC核心与视图_第1张图片

核心组件:

处理器管理

  • 映射:HandlerMapping
  • 适配器:HandlerAdapter
  • 执行:HandlerExecutionChain
  • 视图解析:ViewResolver
  • 国际化:LocaleResolver、LocaleContextResolver
  • 个性化:ThemeResolver
  • 异常处理:HandlerExceptionResolver

 

 核心主键bean

组件 Bean 类型 说明
HandlerMapping 映射请求(Request)到处理器(Handler)加上其关联的拦截(HandlerInterceptor)列表。(就是url映射目录和拦截器)
HandlerAdapter 调用请求处理器(Handler)无需关注其中实际的调用细节。调用注解实现的 Controller 。(适配器)
HandlerExceptionResolver 解析异常,可能策略是将异常处理映射到其他处理(Handlers) 、或到某个 HTML错误页面
ViewResolver  从处理器(Handler)返回字符类型的逻辑视图名称解析出实际的 View 对象
LocaleResolver,LocaleContextResolver 实现国际化视图
MultipartResolver  解析多部分请求(如 Web 浏览器文件上传)的抽象实现

 

 

 

 

 

 

 

 

 

xml方式实现mvc

web.xml(webapp.WEB-INF.web.xml) 配置DispatcherServlet,指定xml扫描路径


    
        app
        org.springframework.web.servlet.DispatcherServlet
        1
        
            contextConfigLocation
            /WEB-INF/app-context.xml
        
    

    
        app
        /
    

 配置 Web MVC 组件(指定扫描范围,设置:HandlerMapping,HandlerAdapter,ViewResolver 




    

    

    

    
        
        
        
    

添加controller

@Controller
public class HelloWorldController {

    @RequestMapping("")
    public String index(@RequestParam int value, Model model) {
        return "index";
    }

}

Web MVC 注解驱动

        
            javax.servlet
            javax.servlet-api
            provided
        

        
            javax.servlet
            jstl
        

        
        
            org.springframework
            spring-webmvc
        

老式非 spring boot 没有内嵌tomcat 需要放入tomcat才能使用。

注解驱动:

@EnableWebMvc 默认配置了HandlerMapping,HandlerAdapter的bean

实现WebMvcConfigurer 自定义url拦截器

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("拦截中...");
                return true;
            }
        });
    }
}

常用注解

@ModelAttribute 注册模型属性(可以在jsp页面读取这些属性)
@RequestHeader 读取请求头
@CookieValue 读取 Cookie
@Valid 、 @Validated 校验参数
@ExceptionHandler 注解处理,异常时处理
 @ControllerAdvice 切面通知(通过代理模式添加通知数据)

 

 

 

 

 

 

 

//代理的HelloWorldController这个类里的通知
@ControllerAdvice(assignableTypes = HelloWorldController.class)
public class HelloWorldControllerAdvice {

    @ModelAttribute("acceptLanguage")
    public String acceptLanguage(@RequestHeader("Accept-Language") String acceptLanguage){
        return acceptLanguage;
    }

    @ModelAttribute("jsessionId")
    public String jsessionId(@CookieValue("JSESSIONID") String jsessionId){
        return jsessionId;
    }

    @ModelAttribute("message")
    public String message(){
        return "Hello,World";
    }

    @ExceptionHandler(Throwable.class)
    public ResponseEntity onException(Throwable throwable) {
        return ResponseEntity.ok(throwable.getMessage());
    }

}
@Controller
public class HelloWorldController {
    
    @RequestMapping("")
    public String index(@RequestParam int value, Model model) {
//        model.addAttribute("acceptLanguage",acceptLanguage);
//        model.addAttribute("jsessionId",jsessionId);
//        model.addAttribute("message","Hello,World");
        return "index";
    }
}

    
        ${message}
        ${acceptLanguage}
        ${jsessionId}
    

spring boot 自动装配

Spring Boot JSP 依赖

        
            org.apache.tomcat.embed
            tomcat-embed-jasper
        

 application.properties

spring.mvc.view.prefix = /WEB-INF/jsp/
spring.mvc.view.suffix = .jsp
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("拦截中...");
                return true;
            }
        });
    }
}

 启动类

@SpringBootApplication(scanBasePackages = "com.imooc.web")
public class SpringBootWebMvcBootstrap {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootWebMvcBootstrap.class, args);
    }

}
@Controller
public class HelloWorldController {

    @RequestMapping("")
    public String index(@RequestParam int value, Model model) {
        return "index";
    }

}

 

 

 

你可能感兴趣的:(spring,boot,spring,boot,web,mvc)