springMVC理解

springMVC是一种思想,将软件划分为,模型Model,视图View,控制器Controller。

MVC的工作原理:用户通过前端视图页面,发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕返回到Controller,再根据请求处理的结果找到对应的视图,经过渲染数据后响应给浏览器。

springMVC基于servlet,封装了servlet的操作,构造了DispatcherServlet前端管理器,对请求和响应统一进行管理。

一、准备工作

1.使用

        创建maven项目,并添加web模块,定义打包方式为war包,在pom文件引入对应依赖坐标。

2. 配置web.xml

        注册前端管理器DispatcherServlet:定义<servlet>和<servlet-mapping>

                <url-pattern>定义了路径模型,当请求符合该路径,就会被DispatcherServlet进行处理

        这里使用     "   /   "  意思是除了jsp页面以外的所有请求,都会被拦截处理

        而jsp页面需要被tomcat的默认servlet来处理,前端控制器无法处理,所以使用"  /  "

<init-param>是上下文配置路径,也就是加载spring MVC配置文件的路径

<;oad-on-startup>默认是第一次访问时进行初始化servlet,将该值设置为1,表示在服务器启动时就开始初始化DispatcherServlet

3. 创建请求控制器

        请求控制器就是一个个普通的pojo类,但需要@Controller声明为控制层组件bean,交给ioc容器,SpringMVC才识别的到。

4. 创建SpringMVC的配置文件,配置好web服务器后就可以了

        springMVC的配置文件默认处于WEB-INF目录下,但我们都会放到resources目录,

且名字是<servlet-name>-servlet.xml

        在配置文件中,定义组件扫描component-scan来扫描控制层组件

        然后配置thymeleaf的视图解析器,通过逻辑视图来实现页面的重定向和转发。这里使用其他的也可以

二、自定义控制层Controller

        1.在控制层定义方法,通过注解@RequestMapping定义请求路径参数,或者按照Resuful风格,定义注解@GetMapping,@PostMapping,@DeleteMapping,@PutMapping,用法类似

        2.@RequestMapping标识的位置

        可以标识在类上,表示设置请求路径的基础信息,即抽取出相同的请求路径,这样方法中就不用再写出了

        可以标识在单个方法上标识,表示设置请求路径的具体信息。

           @RequestMapping的属性

                value:数组类型,意思是可以设置多个请求路径,也就是一个控制器方法可以处理若干个请求

                method:规定控制器方法在请求路径匹配的情况下,继续匹配请求方式get,post等等

                params:

                headers:

        3.ant风格的请求路径

使用         ?        表示任意的单个字符,除了它本身

使用         *        表示当前目录任意的0个或多个字符  

使用         **       表示任意层数的任意目录

        

        4.springMVC中获取请求参数的方式

               4.1 通过原生servletAPI:定义HttpServlet的形参,调用getParameter方法等等。

                4.2 在springMVC中,只要控制器方法的参数列表和请求的参数保持一致,就可以自动完成接收。

注意参数名称不一致的话,可以使用注解@RequestParam,表示给形参起别名,从而完成映射。

还有两个类似的注解:@RequestHeader用来将请求头的信息和控制器方法的形参绑定@CookieValue:将cookie数据和控制器方法的形参绑定。

                4.3 通过pojo类型获取参数,实际上和5.2一样,定义的pojo类,其中的属性名称必须和请求参数保持一致。

                4.4 接收PathVariable 路径参数

在路径中使用占位符 {} 动态表示,在控制器方法的参数列表用加上@PathVariable注解的形参进行接收,注意保持名称一致

                4.5 接收数组集合参数

                4.6 接收日期参数

                4.7 接收JSon数据

        5. springMVC的响应参数

                5.1 @ResponseBody

                5.2 统一响应结果

        定义一个Result类,该类的对象将来会转为json格式的字符串,作为响应结果返回给前端-- 

        6. 向请求域中共享数据

                6.1 使用原生servlet的setAttribute方法

                6.2 使用ModelAndView类进行共享,使用Model的功能向请求域共享数据,再使用View的视图功能设置逻辑视图,并且控制器方法一定要返回ModelAndView的对象作为返回值。

                6.3 使用Model,ModelMap,Map

        Model:Model是接口类型,addAttribute和上面的addObject用法一样,定义一个属性名称和属性的值

        ModelMap:

        Map:使用键值对的方式把属性名称和属性值存到map集合

        7. springMVC实现文件的上传和下载

文件上传:

文件下载:

        8.拦截器interceptor

自定义拦截器类,实现HandlerInterceptor接口,重写里面的三个抽象方法,添加业务逻辑

preHandle:在控制器方法执行前执行,返回值为是否放行,false代表拦截,true为放行

postHandle:在控制器方法执行后执行

afterCompletion:在控制器方法执行后,且视图渲染完毕后执行

然后把拦截器类上交ioc容器管理,作为bean组件

在springmvc的配置文件注册拦截器(记得包扫描):

        1.通过注解成为bean之后可以直接使用默认的bean名称注册

        2.不使用@component,则在xml重新定义一个bean来指定

        3.也可以使用,<mvc:interceptor>子标签,里面添加排除拦截的路径和拦截路径

相关推荐

  1. SpringMVC理解

    2024-04-20 10:14:09       28 阅读
  2. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-04-20 10:14:09      42 阅读
  3. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-04-20 10:14:09      34 阅读
  4. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-04-20 10:14:09      35 阅读
  5. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-04-20 10:14:09      35 阅读
  6. <span style='color:red;'>springMVC</span>

    springMVC

    2024-04-20 10:14:09      27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 10:14:09       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 10:14:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 10:14:09       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 10:14:09       20 阅读

热门阅读

  1. SpringMVC中,/和/*和/**分别表示什么

    2024-04-20 10:14:09       15 阅读
  2. rknn3588 rstp

    2024-04-20 10:14:09       14 阅读
  3. 每天学习一个Linux命令之chroot

    2024-04-20 10:14:09       14 阅读
  4. 文心一言 vs GPT-4 —— 全面横向比较

    2024-04-20 10:14:09       14 阅读
  5. php 笔记 01

    2024-04-20 10:14:09       14 阅读
  6. GateWay基本配置

    2024-04-20 10:14:09       14 阅读
  7. Linux环境部署MySQL

    2024-04-20 10:14:09       13 阅读
  8. idea常用的快捷键

    2024-04-20 10:14:09       16 阅读
  9. 掌握ChatGPT:写作论文的利器

    2024-04-20 10:14:09       14 阅读
  10. 在IntelliJIDEA中如何将依赖包打入项目中?

    2024-04-20 10:14:09       15 阅读