springMVC总结
关于三层架构和MVC
1.1.1. 三层架构
我们的开发架构一般都是基于两种形式。一种是C/S架构,也就是客户端/服务器;另一种是 B/S架构,也就是浏览器/服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,所以我们课程中的案例也都是基于三层架构设计的。
三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:
MVC模型
MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式。 MVC 中每个部分各司其职:
springmvc是什么
springmvc 是一种基于 MVC 设计模型的请求驱动类型的轻量级 Web 框架, 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。
spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 spring 可插入的 MVC 架构,从而在使用 spring 进行 WEB 开发时,可以选择使用 spring的 spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用), Struts2 等。
springmvc 已经成为目前最主流的 MVC 框架之一, 从 Spring3.0 的发布, 就已全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful 编程风格的请求。
springmvc在三层架构中的位置
springmvc优点
一、springmvc基本概念
1.关于三层架构和MVC
表现层:请求和响应
业务层:业务逻辑
持久层:操作数据库
MVC:Model(模型)-View(视图)-Control(控制器)。它是表现层的一个设计模型
2.springmvc框架是什么
springmvc框架是spring框架的一个模块,是基于mvc的的表现层框架,用于web项目的开发
3.springmvc框架在项目三层架构的位置:表现层
二、springmvc入门案例
1.入门案例实现步骤:
第一步:创建maven web项目
第二步:配置pom.xml,导入jar包
spring的IOC模块包
spring-webmvc包
第三步:编写配置文件
springmvc.xml:springmvc框架主配置文件
web.xml
第四步:
编写jsp页面
第五步:
编写一个controller,处理请求和响应
第六步:
发布项目到tomcat运行
三、springmvc三大组件
处理器映射器(HandlerMapping)
处理器适配器(HanelrAdapter)
视图解析器(ViewResolver)
处理器映射器:
作用:根据请求的url,找到处理器方法
处理器适配器:
作用:负责统一执行处理器方法
细节:
注解驱动方式配置处理器映射器和处理器适配器
视图解析器:
作用:
把逻辑视图(在controller方法中设置的视图名称)解析成物理视图(在浏览器实际看到的页面)。
细节:配置视图解析器
四、springmvc框架原理
一、springmvc基本概念
1.关于三层架构和MVC
表现层:请求和响应
业务层:业务逻辑
持久层:操作数据库
MVC:Model(模型)-View(视图)-Control(控制器)。它是表现层的一个设计模型
2.springmvc框架是什么
springmvc框架是spring框架的一个模块,是基于mvc的的表现层框架,用于web项目的开发
3.springmvc框架在项目三层架构的位置:表现层
二、springmvc入门案例
1.入门案例实现步骤:
第一步:创建maven web项目
第二步:配置pom.xml,导入jar包
spring的IOC模块包
spring-webmvc包
第三步:编写配置文件
springmvc.xml:springmvc框架主配置文件
web.xml
第四步:编写jsp页面
第五步:编写一个controller,处理请求和响应
第六步:发布项目到tomcat运行
三、springmvc三大组件
处理器映射器(HandlerMapping)
处理器适配器(HanelrAdapter)
视图解析器(ViewResolver)
处理器映射器:
作用:根据请求的url,找到处理器方法
处理器适配器:
作用:负责统一执行处理器方法
细节:注解驱动方式配置处理器映射器和处理器适配器
视图解析器:
作用:把逻辑视图(在controller方法中设置的视图名称)解析成物理视图(在浏览器实际看到的页面)。
细节:配置视图解析器
四、springmvc框架原理
五、@RequestMapping注解
作用一:在方法上面使用,配置请求的url
细节:"/"和".do"可以省略
作用二:在方法上面使用,限制http请求方法
作用三:在类上面使用,对请求的url进行分类管理(窄化请求)
六、springmvc参数绑定
1.参数绑定的定义:通过处理器方法的形参,接收到请求的url或者(表单中的)参数数据。
2.参数绑定案例演示:
案例需求:模拟根据商品id查询商品数据
http://127.0.0.1:8080/param/queryItemById.do?id=1
案例实现:
第一步:创建项目
第二步:配置pom.xml,导入依赖包
jsp的API
servlet的API
第三步:编写商品列表和编辑页面
第四步:编写商品controller
第五步:在商品controller中增加根据商品id查询商品的方法【重点】
3.参数绑定类型:
默认支持的参数类型
java简单参数类型
细节:
1.简单类型参数绑定,推荐使用包装类型
2.@RequestPara注解【了解】
pojo参数类型
需求:修改商品数据
http://127.0.0.1:8080/param/updateItem.do
需求实现:
编写商品实体类
在controller增加修改商品的方法
细节:
中文参数出现乱码。乱码的原因是tomcat默认的字符集编码是多ISO-8859-1。
不支持中文导致的。
pojo包装参数类型
pojo包装类型,就是在pojo中包含了其它的pojo。通常应用接收综合查询条件。
需求:
使用pojo包装类型,接收商品综合查询条件。
需求实现:
编写pojo包装类型
在商品controller的list方法中,增加pojo包装类型形参
自定义参数类型:
第一步:自定义日期类型的参数转换器
说明:springmvc框架提供了转换器的接口(Converter)
第二步:配置自定义日期的类型的转换器
细节:同一个类型的转换器,只能配置一个
七、请求消息头相关的两个注解
1.@RequestHeader注解:
2.@CookieValue注解:
五、@RequestMapping注解
作用一:在方法上面使用,配置请求的url
细节:"/"和".do"可以省略
作用二:
在方法上面使用,限制http请求方法
作用三:
在类上面使用,对请求的url进行分类管理(窄化请求)
六、springmvc参数绑定
1.参数绑定的定义:
通过处理器方法的形参,接收到请求的url或者(表单中的)参数数据。
2.参数绑定案例演示:
案例需求:模拟根据商品id查询商品数据
http://127.0.0.1:8080/param/queryItemById.do?id=1
案例实现:
第一步:创建项目
第二步:配置pom.xml,导入依赖包
jsp的API
servlet的API
第三步:编写商品列表和编辑页面
第四步:编写商品controller
第五步:在商品controller中增加根据商品id查询商品的方法【重点】
3.参数绑定类型:
默认支持的参数类型(HttpServletRequest HttpServletResonpse)
java简单参数类型
细节:
1.简单类型参数绑定,推荐使用包装类型
2.@RequestParam注解【了解】
pojo参数类型
需求:修改商品数据
http://127.0.0.1:8080/param/updateItem.do
需求实现:
编写商品实体类
在controller增加修改商品的方法
细节:
中文参数出现乱码。乱码的原因是tomcat默认的字符集编码是多ISO-8859-1。
不支持中文导致的。
pojo包装参数类型
pojo包装类型,就是在pojo中包含了其它的pojo。通常应用接收综合查询条件。
需求:
使用pojo包装类型,接收商品综合查询条件。
需求实现:
编写pojo包装类型
在商品controller的list方法中,增加pojo包装类型形参
自定义参数类型:
第一步:自定义日期类型的参数转换器
说明:springmvc框架提供了转换器的接口(Converter)
第二步:配置自定义日期的类型的转换器
细节:同一个类型的转换器,只能配置一个
七、请求消息头相关的两个注解
1.@RequestHeader注解:
2.@CookieValue注解:
一、高级参数绑定
1.数组参数类型
2.list参数类型
细节:使用list参数类型绑定,list需要作为pojo的属性,不能直接在方法的形参中使用list,否则不能完成绑定。
二、controller方法返回值
1.返回值类型:
ModelAndView,void,String
1.1.返回ModelAndView <=>(Sting+Model)
1.2.返回void
说明:返回void,request转发,response重定向
request转发:
response重定向:
response响应数据:
1.3.返回String:
三、json数据交互
1.配置pom.xml,导入jackson jar包
2.配置相关:
2.1.使用注解驱动方式配置处理器映射器和处理器适配器(<mvc:annotation-driven/)。默认就支持jackson数据的转换。
2.2.@RequestBody注解:
在处理器方法形参上使用,把请求的json格式的数据,转换成java对象
2.3.@RsponseBody注解:
在处理器方法返回值上,或者方法上使用,把响应的java对象,转换成json格式的数据
四、restful支持
1.总结三句话:
1.1.restful只是一种软件设计的风格
1.2.restful指的是表现层资源的状态转换,根据http请求的方法:post/get/put/delete,
对应资源的:新增/查询/修改/删除操作
1.3.使用restful风格的优点:结构清晰,易于理解,扩展方便,更加简洁
POST/GET/PUT/DELETE,定义了资源的操作方法:新增/查询/修改/删除。
restful风格url示例:
/item/1 HTTP GET : 查询 id = 1 的 Item
/item/1 HTTP DELETE: 删除 id = 1 的 Item
/item/1 HTTP PUT: 修改 id = 1 的 Item
/item HTTP POST: 新增 Item
作用:
由于浏览器 form 表单只支持 POST 与 GET 请求,不支持PUT、 DELETE请求。 Spring3.0 添加了一个过滤器,将浏览器请求改为指定的请求方式,发送给我们的控制器(controller)方法,使得完整支持 POST、GET、 PUT、 DELETE 请求。
使用细节:
第一步:在 web.xml 中配置该过滤器
第二步:请求方式必须使用 post 请求
第三步:按照要求提供_method 请求参数,该参数的取值就是我们需要的http请求方法:POST/GET/PUT/DELETE
2.案例需求:
使用restful风格,实现商品的增删改查操作。
3.需求实现:
第一步:配置web.xml中前端控制器的配置,支持restful
第二步:在web.xml配置http请求方法转换过滤器(HiddenHttpMethodFilter)
第三步:编写一个jsp页面
第四步:编写restful的controller
五、文件上传
1.文件上传的三个前提:
表单提交方式:post
enctype取值:multipart/form-data
表单中必须要有一个组件:<input type="file"/>
控制器用MultipartFile pictureFile来进行接收
2.需求:
实现商品图片的上传
3.需求实现:
3.1.配置虚拟目录(搭建一台图片服务器)
3.2.文件上传的实现:
第一步:配置pom.xml,导入文件上传组件包
commons-fileupload.jar
commons-io.jar
commons-codec.jar
第二步:配置文件上传解析器
说明:spring框架提供了文件上传的解析器接口(MultipartResolver)
第三步:修改商品编辑页面的表单,支持文件上传
第四步:contorller中的代码编写
六、统一异常处理
1.异常处理思路:
请求流程:客户端(浏览器)->前端控制器(DispatcherServlet)->表现层(controller)->业务层(service)->持久层(dao)
处理思路:
从dao层开始,每一层发生异常都向上一层抛出,一直抛到前端控制器,前端控制器不能
再往上抛出,前端控制器需要调用异常处理器的组件,包装异常。提供一个友好的异常提示页面。
2.异常案例演示:
第一步:自定义异常
第二步:自定义异常处理器
第三步:配置异常处理器
第四步:测试
七、@ModelAttribute注解和@SessionAttributes注解
1.@ModelAttribute注解:
在方法上表示每次调用方法之前都会先调用他所标注的该方法
2.@SessionAttributes注解: