文章目录
本节大纲
- MVC三层架构,MVC的一个设计的模型
- mvc这框架它是什么?有些什么优势?
- mvc这个框架的一个入门程序,步骤通用
- MVC具体的功能,请求参数的绑定,非常多的注解
解释
项目地址:https://github.com/Jonekaka/javaweb-springMVC-54
1.MVC三层架构,MVC的一个设计的模型
承接请求,封装数据,显示
-
三层架构
-
开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序
-
使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构
-
三层架构
-
表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型
-
业务层:处理公司具体的业务逻辑的
-
持久层:用来操作数据库的
-
MVC模型
-
MVC全名是Model View Controller 模型视图控制器,每个部分各司其职。
-
Model:数据模型,JavaBean的类,用来进行数据封装。
-
View:指JSP、HTML用来展示数据给用户
-
Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等。
2. mvc这框架它是什么?有些什么优势?
1. SpringMVC的概述
- 是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。(—解释—:)【||||<既然遵循mvc设计理念,便具有mvc特性,可接受请求参数 数据的封装 转发到什么JSP>||||||||<轻量级WEB框架::–>>想做web开发,那么你可以选择spring mvc这个框架||||】
- Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供
了构建 Web 应用程序的全功能 MVC 模块。 - 使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的
SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。【最终spring都可以帮助做框架集成】
编程更容易,比如请求必须继承接口httpservelet,才能实现,而springmvc提供了类封装,只需要一个注解就能实现,
它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持
RESTful 编程风格的请求。
整合了mvc思想,实现了mvc所要求的功能;和spring兼容性更好,满足了性能要求,配置更简单;可以集成其他框架
用户请求-mvc交给业务层-持久层
持久层-业务层-mvc-视图-用户
2. SpringMVC在三层架构中的位置
- 表现层框架
3. SpringMVC的优势
1、清晰的角色划分:
前端控制器(DispatcherServlet)
请求到处理器映射(HandlerMapping)
(—解释—:)【请求后台哪个方法】
处理器适配器(HandlerAdapter)
视图解析器(ViewResolver)
(—解释—:)【决定望哪个界面跳转】
处理器或页面控制器(Controller)
验证器( Validator)
命令对象(Command 请求参数绑定到的对象就叫命令对象)
表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
(—解释—:)【逐级赋能,更加模块化可替代,清晰的角色划分导致扩展灵活,层次清晰】
2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。
3、由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。
4、和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的。
5、可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。
6、可定制性,HandlerMapping、ViewResolver 等能够非常简单的定制。
7、功能强大的数据验证、格式化、绑定机制。
8、利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。
9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
10、强大的 JSP 标签库,使 JSP 编写更容易。
………………还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配
置支持等等。
4. SpringMVC和Struts2框架的对比
共同点:
它们都是表现层框架,都是基于 MVC 模型编写的。
它们的底层都离不开原始 ServletAPI。
它们处理请求的机制都是一个核心控制器。
(—解释—:)【都是基于前端控制器开发的, 虽然都是核心控制器,但是Spring MVC 的是 Servlet, 而 Struts2 是 Filter::–》过滤器,即是Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter】
区别:
Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
Spring MVC 是基于方法设计的,而 Struts2 是基于类,Struts2 每次执行都会创建一个动作类。所
以 Spring MVC 会稍微比 Struts2 快些。
(—解释—:)【Struts2 是多例的,每发送一个请求都会生成一个struct2框架,来处理请求;springmvc单例,来个请求处理,稍微快一点,没有创建对象的过程,】
Spring MVC 使用更加简洁,同时还支持 JSR303, 处理 ajax 的请求更方便
(JSR303 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注
解加在我们 JavaBean 的属性上面,就可以在需要校验的时候进行校验了。)
Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些,但执行效率并没有比 JSTL 提
升,尤其是 struts2 的表单标签,远没有 html 执行效率高。
入门程序
需求
搭建环境,开发项目
springmvc_day01_01_start
maven环境
file-new-moudle-maven——》选择jdk——》Create from archetype——》org.apache.maven-archettype-webapp,这是因为需要放到服务器。运行。——》Groupld Artifactld Version域名一般公司名称。项目可以具体到日期以及项目具体的功能。标记1234等容易区分。——》User settings file Local repository: 本地的仓库以及配置文件。属性配置如下问题。因为一些需要的包需要从网上下载,创建的过程将会非常反感。可以使用添加键值对的方式进行解决。archetypeCatalog—-internal
——》Module name: Content root: Module file location模型,项目想要存储的位置?
——》完成以后。项目就会迅速加载创建。但是他的目录是并不全面的。
还需要对这两个文件夹属性化
右键
资料的根目录。代码的根目录。
——》 导入项目,所以赖的。文件。加入坐标。
这里需要注意的是有一个概念叫做版本锁定。等你定义了一个版本好以后下面的文件。相关的可以使用同一个版本。这样的话,等去改版本的时候,只需要改上面的版本坐标就可以了。
在这一步导入所需要的全部坐标,以便于后期的调用。
——》如果想使用web前端,前端控制器。其实就是serverlet
web.xml
控制哪一个页面?以及如何进行跳转。
——》spring也许要一个配置文件放在资源文件夹下。
——》接下来配置服务器。
——》将项目部署到服务器上。添加访问项目的目录
——》开始写界面以及控制器。这个控制器是一个Java文件。可以进行逻辑判断输出以及计算。
在这里需要注意的是类变成对象。以方便进行管理。是用loc。也就是说,使用spring配置文件,模块化分割开。
接下来介绍。配置文件的书写。
——》spring.xml需要导入。配置文件的。管理文件规范。
——》拥有了配置以后。接下来就是注解使用问题。
目的就是这是一个入门程序。当我点击超链接的时候。交给这个对象。来进行处理。
在这个类的方法上,加上注解的请求映射就可以让超链接链接到这个方法上面。
将这个类交给ioc控制器进行管理。
这里事实上存在一个问题。让配置文件进行加载,才能进行扫描。
在web.xml的配置文件里进行加载
那么底下的那个一是什么意思呢?
一般来讲servert是第一次发送请求的时候创建这个对象。
那么一就是启动服务器。就立即创建这个对象。
serverlet创建,加载spring.xml扫描,注解生效,类生效
因此这里由前端控制器加载配置文件。
——》那么,既然执行了方法,如何去执行JSP文件呢,换句话来说就是该如何进行跳转呢??
springmvc有一个默认的规则,返回success就默认jsp文件的名字,因此相应的可以提供一个sucess.jsp的文件
index.jsp
sucess.jsp
相对路径,索引
为了方便文件的查着,应该讲通类文件放到同一个文件夹中。便于索引。
——》页面虽然生成了,但是还不够。还需要配置一个视图解析器。可以让他跳转
需要参数,目录
名字
spring.xml
当然还需要开启注解支持
——》输出的现象就是跳转到入门成功的界面并且控制台输出哈喽!
也就是说跳转了界面,执行了out
入门结束了
——》总结
前端控制器。这里有一行特别特殊?本来应该是第一次发链接的时候对象创建,然而变成了服务器启动的时候,这个对象就开始创建。
spring.xml加载,执行注解扫描,从而将对象添加到ioc控制器,类也被创建成对象,默认单例
视图解析器也变成了对象,谁调用就可以帮助完成跳转页面的功能
然后开启了mvc框架注解支持,后面的注解映射也会生效,从而方法可以被对象索引,即是路径
也就是说在启动服务器的过程中,对象已经创建。注解已经生效。
客户端超链接产生请求》》被前端控制器,servelt拦截》》解析后跳转》》《《跳转后数据返回前端控制器
前端控制器》》调用视图解析器。。。
最后前端控制器处理完成后反馈给》》客户端
组件
DispatcherServlet :前端控制器
用户请求到达前端控制器,它就相当于 mvc 模式中的 c,dispatcherServlet 是整个流程控制的中心,由
它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。
HandlerMapping :处理器映射器
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的
映射方式,例如:配置文件方式,实现接口方式,注解方式等。
Handler :处理器
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由
Handler 对具体的用户请求进行处理。
HandlAdapter :处理器适配器
通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理
器进行执行。
View Resolver :视图解析器
View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名
即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
View :视图
SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView
等。我们最常用的视图就是 jsp。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开
发具体的页面。
在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。
当开启他的时候
处理器,处理适配器默认配置
使 用 mvc:annotation-driven 自 动加载 RequestMappingHandlerMapping (处理映射器) 和
RequestMappingHandlerAdapter ( 处 理 适 配 器 ) , 可 用 在 SpringMVC.xml 配 置 文 件 中 使 用
mvc:annotation-driven替代注解处理器和适配器的配置。
因此在之前的spring.xml中只需要再配置视图解析器就完成了
我们只需要编写处理具体业务的控制器以及视图。
注解
RequestMapping 注解
用于建立请求 URL 和处理请求方法之间的对应关系。
/xxxf——》xxx()
按住ctrl看源码
可以非常方便的注解类和方法。这意味着对于一些非常长的路径。可以进行拆分成以及一级目录二级目录。
具体的应用场景可以进行分类。表达更加清晰。
属性
value,path
作用相同,都指的是映射路径
method 属性
决定请求方式
如果不按照指定方法请求
params:
用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和
配置的一模一样。
例如:
params = {“accountName”},表示请求参数必须有 accountName
params = {“moeny!100”},表示请求参数中 money 不能是 100。
要求必须的参数
headers:
用于指定限制请求消息头的条件
请求参数的绑定
拿到请求的数据
按照既定的方式直接填充
类
jsp
如果是零散的数据可以采用这种方式,如果数据比较多,那就是javabean方式
javabean完成数据封装
类文件
注意jsp提交的属性名要一致
但是有特殊情况,引用类型,User user,?
如果是集合类型?
java
jsp
存入list的0位置,存入key-value,的key one
请求参数中文乱码的解决
在post请求下出现中文乱码问题,get无
发送任何请求,过滤器都会拦截,因此在这里解决
web.xml
自定义类型转换器
页面提交的类型都是字符串类型。然而框架会自动转化一部分常用类型
有些还是自己写比较保险
比如
而如果换一种写法
数据没有正常封装
因此需要自己写个方法去转换
- 表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,说明
Spring框架内部会默认进行数据类型转换。 - 如果想自定义数据类型转换,可以实现Converter的接口
前端控制器会调用类型转换器解码
实现 Converter 接口,该接口有两个泛型。
写好以后还需要配置,以便让服务器知道
需要把自己写的类也给注册一下,这样就包括系统的和自己的
spring.xml
让处理器,适配器生效,同时也让类型转换器生效
获得serverlet原生api
在控制器中使用原生的ServletAPI对象
- 只需要在控制器的方法参数定义HttpServletRequest和HttpServletResponse对象
假如在控制器中就想获得原生的接口而非封装过的
想要获得谁,就在请求的方法上加上参数
jsp
java
得到了获得的各种对象的地址,可以根据地址获得具体信息
常用注解
requestparam
javabean存在的问题是如果名字不统一就会封装不上数据,因此这个工具可以给名字起别名
如果是required,默认值是true,必须写name,username也不行
RequestBody注解
异步使用json数据时需要用到此
使用请求体注释,得到多条数据
jsp
PathVaribale
REST 风格 URL
并非规范,可以不用,但是有很多优点
restful 的优点
它结构清晰、符合标准、易于理解、扩展方便
请求路径都是一个,缓存就存在一个文件中了,易于管理,
根据不同的请求方式跳到不同的地址,
同请求方式可以根据占位符宣布不同
java
jsp
基于 HiddentHttpMethodFilter 的示例
有些请求方式需要模拟才能发出来,直接不能使用,reset风格配合使用
但是想要实现其他请求方式的方法不止这一个,这个很麻烦,写了还要配置
有其他更简单的方式,
比如WebClient类,学webservice时接触,可以用静态方法,模拟各种请求方式
可以浏览器安装插件模拟
都比这个过滤器更有用
如果非要用这个,可以先web.xml配置
然后
RequestHeader
java
获得请求的accept头信息
CookieValue
ModelAttribute
java
会优先执行加了modleattribute的方法
预先接受数据,然后填充格式化,预处理
如果没有返回对象,就将数据封装到一个集合中,然后需要的读取集合就行
去处对象数据
对比
SessionAttribute
需求:点击超链接将数值传输进去,然后再成功界面再取出
map集合,存键值对,如果存数据会存入model的request的域对象中
jsp
不忽略页面表达式
关键在于只能作用于类上
既然数据已经在session中共享,其他方法也是可以获取的
,
清除数据
这里介绍一下idea常用的快捷键。
idea常用的快捷键
Alt+回车 导入包,自动修正
Ctrl+N 查找类
Ctrl+Shift+N 查找文件
Ctrl+Alt+L 格式化代码
Ctrl+Alt+O 优化导入的类和包
Alt+Insert 生成代码(如get,set方法,构造函数等)
Ctrl+E或者Alt+Shift+C 最近更改的代码
Ctrl+R 替换文本
Ctrl+F 查找文本
Ctrl+Shift+Space 自动补全代码
Ctrl+空格 代码提示
Ctrl+Alt+Space 类名或接口名提示
Ctrl+P 方法参数提示
Ctrl+Shift+Alt+N 查找类中的方法或变量
Alt+Shift+C 对比最近修改的代码
Shift+F6 重构-重命名
Ctrl+Shift+先上键
Ctrl+X 删除行
Ctrl+D 复制行
Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/…/ )
Ctrl+J 自动代码
Ctrl+E 最近打开的文件
Ctrl+H 显示类结构图
Ctrl+Q 显示注释文档
Alt+F1 查找代码所在位置
Alt+1 快速打开或隐藏工程面板
Ctrl+Alt+ left/right 返回至上次浏览的位置
Alt+ left/right 切换代码视图
Alt+ Up/Down 在方法间快速移动定位
Ctrl+Shift+Up/Down 代码向上/下移动。
F2 或Shift+F2 高亮错误或警告快速定位
代码标签输入完成后,按Tab,生成代码。
选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。
Ctrl+W 选中代码,连续按会有其他效果
选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。
Ctrl+Up/Down 光标跳转到第一行或最后一行下
Ctrl+B 快速打开光标处的类或方法
Intellij IDEA最常用快捷键
1.Ctrl+E,可以显示最近编辑的文件列表
2.Shift+Click可以关闭文件
3.Ctrl+[或]可以跳到大括号的开头结尾
4.Ctrl+Shift+Backspace可以跳转到上次编辑的地方
5.Ctrl+F12,可以显示当前文件的结构
6.Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择
7.Ctrl+N,可以快速打开类
8.Ctrl+Shift+N,可以快速打开文件
9.Alt+Q可以看到当前方法的声明
10.Ctrl+W可以选择单词继而语句继而行继而函数
11.Alt+F1可以将正在编辑的元素在各个面板中定位
12.Ctrl+P,可以显示参数信息
13.Ctrl+Shift+Insert可以选择剪贴板内容并插入
14.Alt+Insert可以生成构造器/Getter/Setter等
15.Ctrl+Alt+V 可以引入变量。例如把括号内的SQL赋成一个变量
16.Ctrl+Alt+T可以把代码包在一块内,例如try/catch
17.Alt+Up and Alt+Down可在方法间快速移动
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100241.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...