• springMVC---1


    简介

    SpringMVC 是一种基于 Java 的实现 MVC 设计模型
    的请求驱动类型的轻量级 Web 框架,属于 Spring     
      FrameWork 的后续产品,已经融合在 Spring Web
     Flow 里面。Spring 框架提供了构建 Web 应用程序的
    全功 能 MVC 模块。使用 Spring 可插入的 MVC 架
    构,从而在使用 Spring 进行 WEB 开发时,可以选择
    使用 Spring 的 Spring MVC 框架'

    执行过程

    1、服务器启动,应用被加载。读取到 web.xml 中的配
    置创建 spring 容器并且初始化容器中的对象
    2、浏览器发送请求,被 DispatherServlet 捕获,该 S
    ervlet 并不处理请求,而是把请求转发出去。转发 的
    路径是根据请求 URL,匹配@RequestMapping 中的
    内容。 
    3、匹配到了后,执行对应方法。该方法有一个返回值。 
    4、根据方法的返回值,借助 InternalResourceViewR
    esolver 找到对应的结果视图。 
    5、渲染结果视图,响应浏览器

    spring组成部分

    DispatcherServlet:前端控制器

    用户请求到达前端控制器,它就相当于 mvc 模式中的
     c,dispatcherServlet 是整个流程控制的中心,由 它
    调用其它组件处理用户的请求,dispatcherServlet 的
    存在降低了组件之间的耦合性。 

    springMVC的三大组件

    HandlerMapping:处理器映射器

     HandlerMapping 负责根据用户请求找到 Handler 即
    处理器,SpringMVC 提供了不同的映射器实现不同的
     映射方式,例如:配置文件方式,实现接口方式,注
    解方式等。 

     HandlAdapter:处理器适配器

     通过 HandlerAdapter 对处理器进行执行,这是适配
    器模式的应用,通过扩展适配器可以对更多类型的处理
     器进行执行

    View Resolver:视图解析器 

    View Resolver 负责将处理结果生成 View 视图,View 
    Resolver 首先根据逻辑视图名解析成物理视图名 即具
    体的页面地址,再生成 View 视图对象,最后对 View
     进行渲染将处理结果通过页面展示给用户。

      

    重要注解

    @RequestMapping

    标注在方法上,该方法成为一个请求处理方法
    标注到类所有方法都映射为相对于类级别的请求
    用于建立请求 URL 和处理请求方法之间的对应关系。  
    属性:
    value:用于指定请求的 URL。它和 path 属性的作用是一样的。  
    method:用于指定请求的方式。
    params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和 配置的一模一样。 

    @ RequestParam

     作用:  把请求中指定名称的参数给控制器中的形参赋
    值。 属性:  value:请求参数中的名称。  
    required:请求参数中是否必须提供此参数。默认值:
    true。表示必须提供,如果不提供将报错
    例如
    @RequestMapping("/useRequestParam")
    public String useRequestParam(@RequestParam("name")String username, 

    @RequestBody

    作用:  用于获取请求体内容。直接使用得到是 key=value&key=value...结构的数据。  
    get 请求方式不适用。
     属性:  required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。
    如果取值 为 false,get 请求得到是 null

    @ PathVaribale

     作用:  用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。  
    url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。
     属性:  value:用于指定 url 中占位符名称。 
     required:是否必须提供占位符。 
    例如
    <a href="springmvc/usePathVariable/100">pathVariable 注解</a> 
    @RequestMapping("/usePathVariable/{id}") public String usePathVariable(@PathVariable("id") Integer id){
    ....... 
    }

    @ SessionAttribute(value = "a")

    作用: 用于多次执行控制器方法间的参数共享。
    属性: value:用于指定存入的属性名称
    type:用于指定存入的数据类型。
    例如
    mod.addAttribute("a","相当于request域");
    取出String a = (String) mod.get("a");

     请求参数的绑定

    如果是基本类型或者 String类型:  要求我们的参数名
    称必须和控制器中方法的形参名称保持一致。(严格区
    分大小写) 如果是 POJO类型,或者它的关联对象:  要
    求表单中参数名称和 POJO 类的属性名称保持一致。
    并且控制器方法的参数类型是 POJO 类型。 如果是集
    合类型,有两种方式: 
     第一种:   要求集合类型的请求参数必须在 POJO
     中。在表单中请求参数名称要和 POJO 中集合属性名
    称相同。
       给 List 集合中的元素赋值,使用下标。   给 Map 集
    合中的元素赋值,使用键值对。  第二种:   接收的请
    求参数是 json 格式数据。需要借助一个注解实现。 

    响应数据和结果视图 

    1响应之返回值是String类型

    //存入到请求(request)域对象
    model.addAttribute("user",user);

    2.响应之返回值是void类型--转发

    //转发
    request.getRequestDispatcher("/WEB-INF/pages/succeed.jsp").forward(request,response);

    3.响应之返回值是void类型---重定向

    //3.1重定向(两次请求)
    //response.sendRedirect(request.getContextPath()+"/index.jsp"); //请求不到web-inf下的文件

    4.响应之返回值是void类型---model AND view

    //实例化
    ModelAndView m=new ModelAndView();
    //模拟从数据库拿到数据
    User user=new User();
    user.setUsername("小李2232");
    user.setPassword("121111113");
    m.addObject("a",user);//存入a
    m.setViewName("succeed");//跳转的jsp页面
    return m;

    5.响应之使用 SpringMVC框架提供forward和redirect进行页面跳转

    // return "forward:/WEB-INF/pages/succeed.jsp";
    return "redirect:/index.jsp";

    6.响应json数据之过滤静态资源

    @RequestMapping("/ajaxTests")
    public @ResponseBody Person ajaxTest(@RequestBody Person person){ //RequestBody获取这个请求体的数据
    //客户端发送ajax请求,传输的是json字符窜,后端把json字符串封装到user对象中
    System.out.println(person+"执行了");
    //模拟查询数据库
    person.setUserName("响应");
    person.setPassWord("12333");
    return person;//user;拦截器

    拦截器可以配置多个

    springconfig.xml
    <!--2.配置拦截器-->
    <mvc:interceptors>
    <mvc:interceptor>
    <!-- 哪些方法进行拦截 -->
    <mvc:mapping path="/user/*"/>
    
    <!-- 哪些方法不进行拦截
    <mvc:exclude-mapping path=""/>
    -->
    <!-- 注册拦截器对象 -->
    <bean class="controller.MyInterceptor"/><!--第一个拦截器-->
    </mvc:interceptor>
    </mvc:interceptors>

    HandlerInterceptor 里面有三个实现方法
    preHandle1.预处理方法---拦截1器执行了
    postHandle2.后执行---拦截器1执行了
    afterCompletion3.最后输出---拦截器1执行

    配置文件

    <mvc:mapping path="/**" /><!-- 用于指定对拦截的 url -->  
     <mvc:exclude-mapping path=""/><!-- 用于指定排除的 url--> 

  • 相关阅读:
    关于线程的执行顺序
    常用正则表达式
    @JsonFormat与@DateTimeFormat注解的使用
    Mybatis中 #{} 和 ${} 的区别!
    [Redis]Spring Boot 中 Redis 的使用
    [WebSocket长连接]SpringBoot2.0集成WebSocket,实现后台向前端推送信息
    [springboot] 搭建项目及单元测试
    [AOP拦截 ]SpringBoot+Quartz Aop拦截Job类中的方法
    [vue折线图] 记录SpringBoot+Vue3.0折线图订单信息展示
    SpringBoot解决cors跨域问题
  • 原文地址:https://www.cnblogs.com/july7/p/13261311.html
Copyright © 2020-2023  润新知