第1章 SpringMVC 的基本概念
1.1 三层架构
表现层:
也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web 层,web 需要接收 http 请求,完成 http 响应。
表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系)
业务层:
也就是我们常说的 service 层。它负责业务逻辑处理,业务层在业务处理时可能会依赖持久层。
持久层:
也就是我们是常说的 dao 层。持久层就是和数据库交互,对数据库表进行曾删改查的。
1.2 SpringMVC 概述
1.2.1 SpringMVC框架概述
SpringMVC框架是三层开发模式中web层的框架,其中包含了MVC设计模式中的View和Controller两个模块。View其实就是页面,实现技术现在比较热门的有Jsp,Ios,安卓,php,h5。Controller就是一个控制器,负责分发View层发送的指令。
1.2.2 SpringMVC和Struts2框架优劣势分析
共同点:
(1)它们都是表现层框架,都是基于 MVC 模型编写的。
(2)它们的底层都离不开原始 ServletAPI。
(3)它们处理请求的机制都是一个核心控制器
区别:
(1)Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
(2)SpringMVC是方法级别的,表示一个方法就是一个独立的控制器,不能有私有属性,用单例就行了。而Struts2是类级别的,一个类才是一个控制器,类中可以有私有属性,该对象必须是多例的。
(3)Struts2里面解析页面参数等用的OGNL表达式,开发简单,效率会稍差一点。当然Struts2也可以选择JSTL。SpringMVC用的JSTL,开发稍微复杂,但是效率高。
第2章 SpringMVC 的入门
2.1案例的执行过程
2.2 springMVC中的组件
2.2.1 前端控制器
其实就是刚才在web.xml中配置的核心servlet。
2.2.2 Springmvc三大组件
处理器映射器
处理器适配器
视图解析器
其中处理器映射器和处理器适配器只用配置一个开启springmvc注解支持即可。
使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping(处理映射器) 和RequestMappingHandlerAdapter( 处理适配器)
视图解析器就是下面的配置
处理器
其实就是我们controller中的方法
视图
其实就是页面,可以是jsp,安卓,ios,php,h5等技术
2.3 RequestMapping 注解
(1)作用:用于建立请求 URL 和处理请求方法之间的对应关系
(2)出现位置:
【1】类上:请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理:知道是哪个类的那个方法。
【2】方法上:请求 URL 的第二级访问目录。
value:用于指定请求的 URL。它和 path 属性的作用是一样的。
method:用于指定请求的方式。
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和
配置的一模一样。
例如:
params = {"accountName"},表示请求参数必须有 accountName
params = {"moeny!100"},表示请求参数中 money 不能是 100。
headers:用于指定限制请求消息头的条件。
注意:
以上四个属性只要出现 2 个或以上时,他们的关系是与的关系
2.4处理器如何接收参数(参数绑定)
2.4.1 接收简单类型和String类型的参数
注意:传值的name必须和处理器中的参数名保持一致
<a href="${pageContext.request.contextPath }/test">初始化案例HelloMvC</a>
路径:http://localhost:8080/test?age=35&name=dfs
页面
后台
2.4.2接收对象类型的参数
编写一个User对象
页面
后台
2.5请求参数乱码问题
post 请求方式:
在 web.xml 中配置一个过滤器
tomacat 对 GET 和 POST 请求处理方式是不同的,GET 请求的编码问题,要改 tomcat 的 server.xml
配置文件
第三章 常用注解
(1)RequestParam的使用
作用:把请求中指定名称的参数给控制器中的形参赋值。
属性:
value:请求参数中的名称。
required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。
页面
后台
说明:如果配置了@RequestParam,默认情况下必须给该属性赋值,否则报错。当然可以指定required=false时,不赋值也不错。
(2)RequestBody的使用
作用:
用于获取请求体内容。直接使用得到是 key=value&key=value...结构的数据。
get 请求方式不适用。
属性:
required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值
为 false,get 请求得到是 null。
页面
后台
说明:get方式不能使用此注解,post得到请求体中所有的参数。