面试题

SpringMVC

一.     简述SpringMVC

    SpringMVC是一个基于java实现MVC设计模式的轻量级框架,也是一个基于请求驱动的web框架。使用前端控制器实现视图层和控制层的参数传递。

二.     SpringMVC的请求处理流程     

  1.           用户发送请求到前端控制器。
  2.           前端控制器根据xml、注解请求处理器映射器查找Handler
  3.           处理器映射器向前端控制器返回Handler
  4.           前端控制器用适配器去执行Handler
  5.           处理器适配器去执行Handler
  6.           Handler执行完成给适配器返回MondelAndView
  7.           处理器适配器向前端控制器返回MondelAndView
  8.           前端控制器请求视图解析器去进行视图解析,解析出真正的视图
  9.           视图解析器向前端控制器返回View
  10.           前端控制器将模型数据填充到视图进行渲染
  11.           前端控制器向用户响应结果

三.     部分组件的作用

     DispatcherServlet:前端控制器

          DispatcherServlet是整个流程控制的中心,是springmvc中最核心的类,在web.xml中配置。降低了各个组件之间的耦合性

     HandlerMapper:处理器映射器

         根据用户请求url找到(Handler)处理器

    HandlerAdapter:适配器

        通过HandlerAdapter对处理器进行执行,这是适配器器模型的应用

    ModelAndView:视图与模型

        一般在Controller层作为结果类型返回,其内部view部分指定返回的页面,model指定返回的参数

四.    SpringMVC优点

  •         灵活的配置功能
  •         提供了大量的控制器接口和实现类
  •         真正做到了与View层实现无关
  •         面向接口编程

五.    注解方式

        若有多个请求时,需要配置多个映射关系,并建立多个Controller来进行多个处理。

         更改spring-mvc.xml基于注解的处理器

1 <!--启用SpringMvc注解-->
2     <mvc:annotation-driven/>
3     <!--对web包中的所有类进行扫描,已完成Bean的创建和自动依赖注入的功能-->
4     <context:component-scan base-package="cn.controller"/>
5     <!--启动SpringMvc的注解功能,完成请求和注解pojo的映射-->
6   

       cn包下controller类    cn.controller类中的各个注释

      @Controller:标注一个普通的JavaBean类成为可以处理请求的控制器

      @HandlerMapper:通过请求URL进行映射

六.     视图解析器

        设置spring-mvc.xml视图解析器

1 <!--视图解析器-->
2     <bean class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver"/>
3     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
4         <property name="prefix" value="/"></property>
5         <property name="suffix" value=".jsp"></property>
6     </bean>

七.     参数传递     

  •        view to Controller   

               在方法参数前加@RequestParam进行入参

    @RequestMapping("/hehe")
    public String a(){
        return "first";
    }
  •        Controller to view  

                添加模型数据 

@RequestMapping("/lala")
    public ModelAndView c(User u){
        System.out.println(u.getName()+"---"+u.getAge());
        ModelAndView mav=new ModelAndView();
        mav.addObject("name","李四");
        mav.setViewName("first");
        return mav;
    }
原文地址:https://www.cnblogs.com/cy7533649/p/14819787.html