springmvc是表现层 和客户端进行数据的交互 底层是servlet

  • springmvc框架

  • 一、三层框架
    • 持久层:jdbc、mybatis、jdbctemplet

    • springmvc代替了之前的servlet
    • M:model javabean(实体类) V:view(呈现给前端的页面) jsp C:controller(前端的登录)
  • 二、springmvc的概述
    • 基于Java实现的mvc设计模型
  • 三、流程
    • 因为涉及到和前端页面的交互了,所以写的是javaweb项目
    • 1.创建maven的web项目,导入开发的坐标
    • 2.编写index.jsp和suc.jsp (直接访问前端页面)
    • 3.编写controller类(控制器类),方法就可以去执行
    • 4.配置前端控制器(servlet类,springmvc框架提供的)
    • 5.编写springmvc.xml配置文件
    • 6.启动tomcat测试
    • web项目是打的war包
    • <!-- 版本锁定 -->
    • <properties>
    • <spring.version>5.0.2.RELEASE</spring.version>
    • </properties>
    • <dependencies>
    • <dependency>
    • <groupId>org.springframework</groupId>
    • <artifactId>spring-context</artifactId>
    • <version>${spring.version}</version>
    • </dependency>
    • <dependency>
    • <groupId>org.springframework</groupId>
    • <artifactId>spring-web</artifactId>
    • <version>${spring.version}</version>
    • </dependency>
    • <dependency>
    • <groupId>org.springframework</groupId>
    • <artifactId>spring-webmvc</artifactId>
    • <version>${spring.version}</version>
    • </dependency>
    • <dependency>
    • <groupId>javax.servlet</groupId>
    • <artifactId>servlet-api</artifactId>
    • <version>2.5</version>
    • <scope>provided</scope>
    • </dependency>
    • <dependency>
    • <groupId>javax.servlet.jsp</groupId>
    • <artifactId>jsp-api</artifactId>
    • <version>2.0</version>
    • <scope>provided</scope>
    • </dependency>
    • </dependencies>
    • href=访问的地址 需要加上协议,不加协议的话访问的是本地文件所以访问百度的地址要加上协议 https://www.baidu.com
  • 在写controller的时候,需要加上@controller,这里是告知是该类由spring管理
  • requestmapping:springmvc的注解(映射路径)
    • 一级映射和二级映射就是这个写的
  • 放在web-inf里面的页面无法在前端写地址的时候进行访问,
  • springmvc.xml是springmvc的核心 里面的bean约束是核心 ,没有bean的话就无法识别这个是springmvc
  • spingmvc是spring的产品,需要把包交给springmvc.xml去管理
  • 还有一个视图解析器: 有了视图解析器就可以访问在web-inf里面的页面了 这个解析器是spring框架提供的,整合web提供的一个类,在controller中如果访问的是字符串,上面也没有加除了requestmapping额外的注解的,就会走视图解析器,访问前缀/web-inf/pages然后拼接上controller中返回字符串,就可以找到suc.jsp 有一个遗漏的重点:需要在web.xml中加上一个加载springmvc.xml的配置文件

  • web.xml文件是在tomcat一启动就会加载,然后dispatcherservlet就生效了,然后dispatcherservlet读取springmvc.xml,然后springmvc里面的配置文件也就生效了 dispatcherservlet会拦截所有的请求是中央转发器把所有的请求转发到对应的文件

  • 四、springboot框架基于组件式开发流程 前端请求到后端处理
    • 所有的请求都会被dispacherservlet(流程控制中心)拦截到,然后这个dispacherservlet会根据传进来的路径/hello.do进行解析,然后找到对应的controller具体执行的方法,映射到方法的路径一样的,匹配到之后return 字符串,然后带着字符串走视图解析器,拼接上前缀和后缀找到这个路径,最后返回到页面

    • 处理器映射器(handler):找到对应的url
    • 处理器适配器(handladapter):找到对应的controller进行适配
    • 视图解析器:返回视图
  • 五、requestmapping注解
    • requestmapping注解的作用是建立请求url和处理方法之间的对应关系
    • 作用在方法和类上面
      • 第一级的访问目录作用在类上面
      • 第二级的访问目录作用在方法上面
      • 细节:路径可以不编写"/"表示应用的根目录开始,可以不写/
    • requestmapping的属性
      • path:指定请求的路径url
      • value:value属性和path属性是一样的
      • method:指定该方式的请求参数 超链接是get请求

      • params:指定限制请求参数的条件
  • 六、常见的请求错误/正确
    • 500是服务端内部代码错误
    • 404路径找不到或者是资源找不到,写的有问题
    • 400请求接收参数异常
    • 405请求参数有问题 get /post
    • 200正常
  • 七、常用的请求方式
    • post:新增,需要传参
    • get:获取
    • delete:删除
    • put:修改
  • 八、常见的注解
    • requestmapping是一个通用的注解
    • getmapping:
    • putmapping:
    • postmapping:
    • deletemapping:
      • 分开写的这种注解的方式和请求方式就进行了交互,就相当于写了请求方式
  • 九、解决请求参数中文乱码的问题
    • 配置过滤器,解决中文乱码的问题

  • 十、请求参数的绑定
    • 1.绑定机制:在页面加上一个form表单
      • 表单提交的数据都是k=v格式 username=haha&password=123

      • 要求提交的表单的name和参数的名称是相同的严格区分大小写
    • 2.支持的数据类型
      • 基本数据类型和字符串
      • 实体类型(JavaBean)
        • controller中接收的时候参数很多的话,封装实体类来接收(名称和前端的字段一致) 直接用实体类来接收

        • 在一个引用数据类型里面有另一个引用数据类型的话,需要映射上
        • 想要把account类引入到formvo这个类中 关于表单中的映射

      • 集合数据类型(list map集合)
        • list类型有索引 0是多少 1是多少 在formvo中多加上一个list集合 下面的这个list[0].money说明list存储的是属性 list[0]的话就是里面存储的对象

  • 十一、配置过滤器
    • 在web.xml文件中进行配置
    • filter加载
    • 然后映射路径 注意是/* servlet的是/

  • 十二、日期
    • 需要加上一个注解,如果不加的话传入参数的时候只能是2024/8/21的这种默认的形式 但是如果加上这个注解的话只能是2024-8-21之前的默认形式不可以了

    • 如果注解的话需要在配置文件中加载转换器

  • 十三、自定义类型转换器
  • 十四、常用的注解 5个
    • restcontroller:返回json数据
    • 1.requestparam注解
      • 把请求中的指定名称的参数传递给控制器中的形参赋值
      • 属性:
        • 1.value:请求参数中的名称
        • 2.required:请求参数中是否必须提供此参数,默认值是true,必须提供

        • 为什么要用requestparam注解
          • 默认参数的key名称是方法里的参数名称,但通过@requestparam可以自定义另一个,因为在某些条件下,方法名称固定下来不可以修改了,但是请求的参数又需要通过另外一个参数key名称来传递,这样name和username都可以作为参数名称来传递,相当于resultmap的功能在name里面传值username就有值了
    • 2.requestbody注解返回json数据
      • 一般用于post请求/表单,用于获取请求体的内容 get方法不可以
      • 属性
        • 1.required:是否必须有请求体,默认值是true 意思就是如果是表单,会把表单中所有的内容封装在body中

      • 在使用@request mapping后,返回值通常解析为跳转路径,加上@request mapping后返回结果不会被解析跳转路径,而是写入http response body中,比如获取json数据,加上@request mapping会直接返回json数据
    • 3.pathvaribale 一般和requestmapping(method=requestmethod.get)一起使用
      • 拥有绑定url中的占位符 例如:url中有/delete/{id},{id}是占位符
      • 属性:
        • value:指定url中占位符名称
      • restful风格的url 占位符的方式进行增删改查直接
        • 请求路径一样,可以根据不同的请求方式去执行后台不同的方法
        • restful风格的url优点
          • 结构清晰
          • 符合标砖
          • 易于理解
          • 扩展方便
      • 不明白

      • 将requestmapping写成具体的get/post/delete/put这样的形式然后对应的增删改查就会自动的找到,根据请求路径和请求方式找到对应的方法,就算请求路径仍然可以根据请求方式找到对应的方法
    • 4.requestheader注解
      • 获取指定请求头的值
      • 属性
        • value:请求头的名称

    • 5.cookievalue注解
      • 用于获取指定cookie的名称的值
      • 属性
        • value:cookie的名称

      • 拿到cookie的值让指定k获取value即可
  • 十五、响应数据和结果视图 7种
    • 返回值分类:String(返回页面) 返回void(默认查的jsp没有找到) modelandview model 重定向 请求转发 respondsebody
    • 之前的是return"suc" 然后还会进行字符串的拼接之类的,返回为无参的时候,需要进行下面的操作

    • modelandview
      • 还会走之前的那个逻辑,既有数据还有页面,往回携带参数用modelandview

  • 十六、请求转发和重定向
    • 1.forward:请求转发
    • 2.redirect:重定向

  • 十七、responsebody响应json
    • 只会return字符串,不会返回数据了
  • 十八、文件上传的准备 文件上传是post请求
    • 文件上传的jar,一个是文件上传的jar包 一个是io流的 mutipart是文件上传的一个类

    • 传统方式文件上传
      • 配置一个组件,mvc是组件化的形式
      • commonsmultipartresolver文件上传的这么一个类,把这个类配置上交给spring去管理,id名称是固定的不能乱写

      • SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同。
  • 十九、springmvc的异常处理
    • 1. 异常处理思路
    • Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。
  • 二十、springmvc框架中的拦截器
    • 1. 拦截器的概述springmvc提供的 过滤器是tomcat提供的
    • SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。
    • 可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。
    • 拦截器和过滤器的功能比较类似,有区别
      • 过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。
      • 拦截器是SpringMVC框架独有的。
      • 过滤器配置了/*,可以拦截任何资源。
      • 拦截器只会对控制器中的方法进行拦截。
    • 拦截器也是AOP思想的一种实现方式
    • 想要自定义拦截器,需要实现HandlerInterceptor接口。
    • 3. HandlerInterceptor接口中的方法
    • preHandle方法是controller方法执行前拦截的方法
      • 可以使用request或者response跳转到指定的页面
      • return true放行,执行下一个拦截器,如果没有拦截器,执行controller中的方法。
      • return false不放行,不会执行controller中的方法。
    • postHandle是controller方法执行后执行的方法,在JSP视图执行前。
      • 可以使用request或者response跳转到指定的页面
      • 如果指定了跳转的页面,那么controller方法跳转的页面将不会显示。
    • postHandle方法是在JSP执行后执行
      • request或者response不能再跳转页面了
  • 请求转发:传过来的请求是跟着走的 一次请求 携带请求参数
  • 重定向:自己去访问 两次请求 不携带请求方式
  • 过滤器只能写/
  • 拦截器写/*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值