- springmvc框架
- 一、三层框架
- 持久层:jdbc、mybatis、jdbctemplet
- springmvc代替了之前的servlet
- M:model javabean(实体类) V:view(呈现给前端的页面) jsp C:controller(前端的登录)
- 持久层:jdbc、mybatis、jdbctemplet
- 二、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进行适配
- 视图解析器:返回视图
- 所有的请求都会被dispacherservlet(流程控制中心)拦截到,然后这个dispacherservlet会根据传进来的路径/hello.do进行解析,然后找到对应的controller具体执行的方法,映射到方法的路径一样的,匹配到之后return 字符串,然后带着字符串走视图解析器,拼接上前缀和后缀找到这个路径,最后返回到页面
- 五、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和参数的名称是相同的严格区分大小写
- 表单提交的数据都是k=v格式 username=haha&password=123
- 2.支持的数据类型
- 基本数据类型和字符串
- 实体类型(JavaBean)
- controller中接收的时候参数很多的话,封装实体类来接收(名称和前端的字段一致) 直接用实体类来接收
- 在一个引用数据类型里面有另一个引用数据类型的话,需要映射上
- 想要把account类引入到formvo这个类中 关于表单中的映射
- controller中接收的时候参数很多的话,封装实体类来接收(名称和前端的字段一致) 直接用实体类来接收
- 集合数据类型(list map集合)
- list类型有索引 0是多少 1是多少 在formvo中多加上一个list集合 下面的这个list[0].money说明list存储的是属性 list[0]的话就是里面存储的对象
- list类型有索引 0是多少 1是多少 在formvo中多加上一个list集合 下面的这个list[0].money说明list存储的是属性 list[0]的话就是里面存储的对象
- 1.绑定机制:在页面加上一个form表单
- 十一、配置过滤器
- 在web.xml文件中进行配置
- filter加载
- 然后映射路径 注意是/* servlet的是/
- 十二、日期
- 需要加上一个注解,如果不加的话传入参数的时候只能是2024/8/21的这种默认的形式 但是如果加上这个注解的话只能是2024-8-21之前的默认形式不可以了
- 如果注解的话需要在配置文件中加载转换器
- 需要加上一个注解,如果不加的话传入参数的时候只能是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中
- 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:请求头的名称
- value:请求头的名称
- 5.cookievalue注解
- 用于获取指定cookie的名称的值
- 属性
- value:cookie的名称
- value:cookie的名称
- 拿到cookie的值让指定k获取value即可
- 十五、响应数据和结果视图 7种
- 返回值分类:String(返回页面) 返回void(默认查的jsp没有找到) modelandview model 重定向 请求转发 respondsebody
- 之前的是return"suc" 然后还会进行字符串的拼接之类的,返回为无参的时候,需要进行下面的操作
- modelandview
- 还会走之前的那个逻辑,既有数据还有页面,往回携带参数用modelandview
- 还会走之前的那个逻辑,既有数据还有页面,往回携带参数用modelandview
- 十六、请求转发和重定向
- 1.forward:请求转发
- 2.redirect:重定向
- 十七、responsebody响应json
- 只会return字符串,不会返回数据了
- 十八、文件上传的准备 文件上传是post请求
- 文件上传的jar,一个是文件上传的jar包 一个是io流的 mutipart是文件上传的一个类
- 传统方式文件上传
- 配置一个组件,mvc是组件化的形式
- commonsmultipartresolver文件上传的这么一个类,把这个类配置上交给spring去管理,id名称是固定的不能乱写
- SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同。
- 文件上传的jar,一个是文件上传的jar包 一个是io流的 mutipart是文件上传的一个类
- 十九、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不能再跳转页面了
- 请求转发:传过来的请求是跟着走的 一次请求 携带请求参数
- 重定向:自己去访问 两次请求 不携带请求方式
- 过滤器只能写/
- 拦截器写/*
-