springmvc 总结

Spring MVC介绍

**什么是spring mvc**
	是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级web框架
	是目前最主流的mvc框架之一
	它通过一套注解,让一个简单的Java类成为处理请求的控制器,无须实现任何接口,同时还支持restful编程风格的请求
**spring mvc的优势**
	清晰的角色划分
		前端控制器(DispatcherServlet)
		映射处理器(HandlerMapping)
		处理器适配器(HandlerAdapter)
		视图解析器(ViewResolver)
		处理器或页面控制器(Controller)
		验证器(Validator)
		命令对象(Command请求参数绑定到的对象就叫命令对象)
		表单对象(form object提供给表单展示和提交到的对象就叫表单对象)
	分工明确
		与spring其他框架无缝集成
		功能强大的数据验证,格式化,绑定机制
		强大的jsp标签库,使jsp编写更容易
		支持restful风格
		支持国际化和文件上传等功能
**spring mvc和struts2的优劣分析**
	共同点
		它们都是表现层框架,都是基于MVC模型编写的
		它们的底层都离不开元素ServletAPI
		它们处理请求的机制都是一个核心控制器
	区别
		Spring MVC的入口是Servlet,而Struts2是Filter
		Spring MVC是基于方法设计的,而Struts2是基于类,Struts2每次执行都会创建一个动作类,所以SpringMVC会稍微比Struts2快些
		Spring MVC使用更加简洁,支持JSP303
		Strus2的OGNL表达式使页面的开发效率相比Spring MVC更高些,但执行效率并没比JSTL提升,尤其使Struts2的表单标签,远没有html执行效率高

Spring MVC入门

**Spring MVC的组件**
	DispatcherServlet:前端控制器
		用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet使整个流程控制的中心,由它调用其它组件处理用户请求,dispatcherServlet的存在降低了组件之间的耦合性
	HandlerMapping:处理器映射器
		负责根据用户请求找到Handler即处理器,SpringMVC提供了不同的映射器实现不同的映射方式,配置文件方式,实现接口方式,注解方式等
	Handler:处理器
		它就是我们开发中要编写的具体业务控制器,有dispatherServlet把用户请求转发到Handler,由Handler对具体的用户请求进行处理
	HandleAdapte处理器适配器
		通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多的类型的处理
	VIew Resolver:视图解析器
		负责将处理结果生成view视图,view resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,在生成view视图对象,最后对view进行渲染将处理结果通过页面展示给用户
	view视图
		Stringmvc框架提供了很多的view视图类型的支持,包括:jstlView,freemarkerView,pdfView等,我们最常用的视图就是jsp
		一般情况下需要通过页面标签或页面模板技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面
**Spring MVC的注解**
	@Controller
		表明当前类是一个控制器
	@RequestMapping
		介绍
			指示spring用哪个类或者方法来处理请求动作,可以用于类或方法
			用于建立请求URL和处理请求方法之间的对应关系
		属性
			value:用来映射一个请求和一个方法,使默认属性
			method:处理HTTP请求的处理方式
			consumes:指定处理请求提交内容的类型
			produces:指定返回的内容类型,必须使请求头(accept)中包含的类型
			params:指明request中必须包含哪些参数
			headers:指明request中必须包含某些header值,

请求参数的绑定

**请求参数的绑定说明**
	绑定机制
		表单提交的数据都是k-v格式的
		SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
		提交表单的名称必须和参数的名称相同
	支持的数据类型
		基本数据类型和字符串类型
		实体类型(JavaBean)
		集合数据类型
		说明:SpringMVC绑定请求参数是自动实现的,但是要想使用,必须遵循使用要求
	使用要求
		基本类型或String类型:参数名称必须和控制器中的形参名称保存一致,严格区分大小写
		POJO类型:表单中的参数名称和POJO类的属性名保持一致
		集合类型,两种方式
			1.集合类型的请求参数必须在POJO中,在表单中请求参数名称要和POJO中的集合属性名称相同
			接收请求参数是json格式,就需要借助一个注解实现
		可以实现一些数据类型自动转换
**请求参数乱码问题**
	post请求方式
		在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8
	get请求方式,两种方法
		1.修改tomcat配置文件添加编码与工程编码一致
		另外一种方法对参数进行重新编码
**自动类型转换器**
	介绍
		表单提交的任何数据类型全部都是字符串类型,都是后台定义Integer类型,数据也可以封装上,说明String框架内部会默认进行数据类型转换
		如果想自定义数据类型转换,可以实现Converter接口
**使用ServletAPI对象作为方法参数**
	spring mvc支持使用原始servletAPI对象作为控制器方法的参数。支持原始Servlet API对象有
		HttpServletRequest
		HttpServletResponse
		HttpSession
		java.security.Principal
		Locale
		InputStream
		OutputStream
		Reader
		Writer
	ServletAPI对象可以直接写在控制方法的形参中

常用注解

**RequestParam**
	作用
		把请求中指定名称的参数给控制器中的形参赋值
	属性
		value:请求参数中的名称
		required:请求参数中释放必须提供此参数,默认值为true,不提供则报错
**RequestBody**
	作用
		获取请求体内容,直接使用得到的是k=v结构的数据
		get请求方式不适用
	属性
		required:是否必须有请求体,默认值是true,get请求方式会报错;如果取值为false,get请求得到null
**PathVarible**
	作用
		用于绑定url中的占位符。例如:请求url中/del/{id}就是url占位符
		url:支持占位符是spring3.0之后加入的,是spring mvc支持rest风格URL的一个重要标志
	属性
		vlaue:用于指定url中占位符名称
		request:是否必须提供占位符
**HiddenHttpMethodFilter过滤器**
	作用
		浏览器form表单支持GET与POST请求,但不支持DELETE,PUT等method,该过滤器将浏览器的请求改为指定的请求方式,发送给我们的控制器方法,从而支持这4个请求方式
	使用方法
		第一,在web.xml中配置该过滤器
		第二,请求方式必须适用post请求
		第三,按照要求提供method请求参数,该参数的取值就是我们需要的请求方式
	案例
**RequestHeader**
	作用
		用于获取请求消息头
	属性
		value:提供消息头
		required:是否必须有此消息头
	说明
		在实际开发中一般不怎么用
**CookieValue**
	作用:
		用于把指定cookie名称的值传入控制器方法参数
	属性:
		value:指定cookie的名称
		required:是否必须有此cookie
	示例
**ModelAttribute**
	作用
		该注解是SpringMVC4.3版本以后新加入的,它可以用于修饰方法和参数赋值
		在方法上,表示当前方法会在控制器的方法执行之前,先执行,它可以用于修饰方法和参数赋值
		出现在参数上,获取指定的数据给参数赋值
	属性
		value用于获取数据的key,key可以是pojo属性名称,也也可是map结构的key
	应用场景
		当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段适用数据库对象原来的数据
**SessionAttribute**
	作用
		用于多次执行控制器方法间的 参数
	属性
		value:用于指定存入的属性名称
		type:用于指定存入的数据类型

响应数据和结构视图

**返回值分类**
	返回字符串
		Controller方法返回值可以指定逻辑视图名称,根据视图解析器为物理视图的地址
	返回值是void
		如果控制器的方法返回值编写成void,执行程序包404的异常,默认查找JSP页面没有找到
			默认会跳转到@RequestMapping(value="/initUpdate")initUPdate页面
			可以使用请求转发或重定向跳转到指定页面
	返回值是ModelAndView对象
		1.ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图
**SpringMVC框架提供的转发和重定向**
	forward请求转发
		controller方法返回String类型,想进行请求转发也可以编写return ”forward:/user/findAll"
		注意:路径必须写成实际视图url,不能写逻辑视图
	redirect重定向
		controller方法返回String类型,想进行重定向也可以编写成return "redirect:/user/findAll"
		注意:如果是重定向到jsp页面,则jsp页面就不能写在WEB-INF目录中,否则无法找到
**ResponseBody响应json数据**
	作用
		将Controller的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据,如:json,xml等,通过Response响应给客户端
DspatcherServlet会拦截静态资源(img.css.js)怎么办
	解决
		在springmvc.xml配置文件中添加配置<mvc:resources>标签
**视图**
	什么是视图解析器
		SpringMVC用于处理视图最重要的两个接口是ViewResolver和View
		ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver指示把逻辑视图名称解析为对象的View对象
		VIew接口的主要作用是用于处理视图,然后返回给客户端
	View
		视图的作用是渲染模型数据,将模型里面的数据以某种形式呈现给客户
		为了实现视图模型和具体实现技术的解耦,Spring定义了一个View接口
		视图对象有视图解析器负责实例化,由于视图时无状态的,所以它们不会有线程安全问题
	常用的视图实现类
		InternalResouroceView
		jstlView
		AbstraactExcelView
		AbstractPdfView
		.........
	ViewResolver
		介绍
			Spring mvc为逻辑视图名的解析提供了不同的策略,可以在spring web上下文中配置一种或者多种解析策略,并指定他们之间的先后顺序。每一种策略对应一个具体视图解析器的实现类
			视图解析器的作用比较单一,将逻辑视图解析为一个具体的视图对象
			所有的视图解析器都必须实现ViewResolver接口
		常用的视图解析器实现类
			BeanNameVIewResolver
			InternalResourceViewResolver
			JasperReportsViewResolver
			.......
			说明
				程序员可以选择以各种视图解析器或混用多视图解析器
				每个视图解析器都实现了Ordered接口并开发出了一个order属性,可以通过order属性设置解析器的优先级,order越小,优先级越高
				Spring MVC会按视图解析器顺序的优先级对逻辑视图名进行解析直到解析成功并返回是视图对象,否则会抛出ServletException异常
	InternalResourceVIewResolver
		介绍
			jsp是最常用的视图技术,可以使用InternalResourceView作为视图解析器
			配置Spring mVC视图解析器
				prefix:视图路径前缀
				suffix:视图路径后缀
		案例
	jstlView
		介绍
			只要项目引用了jstl标签,则Spring mvc会自动把视图有InternalReourceView转为jstlView
			jstlView是InternalResourceView的子类
	自定义视图
		添加一个自定义视图,实现View接口
		通过BeanNameViewResolver定义名称视图解析器
		设置order属性定义视图解析器的优先级,数值越小优先级越高
		在spring配置文件中将自定义视图的包添加到自动扫描路径中
		在控制器方法上返回自定义的视图名称

SpringMVC的表单标签

**说明**
	通过SpringMVC表单标签可以实现将模型数据中的属性和HTML表单元素进行绑定,以实现表单数据更便携编辑和回显
	导入springmvc的表单标签:<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
**form标签**
	作用
		会自动绑定Model中的属性值当前form对象的实体对象,默认是command属性
		支持在提交表单时使用除了get和post之外的其它提交方式
**form绑定问题**
	form默认自动绑定model的command属性值,如果form对象对应的属性名称不是command的时候怎么办?
		使用commandName属性指定MOdel中的哪个属性作为form需要绑定的command对象
		也可以指定modelAttribute属性
**表单标签**
	form:input
	form:password
	form:hidden
	form:textarea
	form:checkbox
	form:radiobutton
**表单标签的属性值**
	path:表单字段,对应HTML中的name属性,支持级联属性
	htmlEscape:是否对表单的HTML特殊字符进行转换,默认为true
	cssClass:对应的css样式
	cssErrorClass:发生错误时,对应的是css样式
**支持数据绑定的表单标签**
	支持绑定集合数据的标签
		checkboxes:多选列表
		radiobuttons:单选列表
			form:radiobuttons:单选框组标签,用于构造多个单选框
				path:(必填)名称,要绑定的属性
				items:(必填)可以是一个list,String[]和Map
				itemValue:指定radio的value值,可以是集合中bean的一个属性值
				itemLabel:指定radio的label值
				delimiter:多个单选框可以通过delimiter指定分隔符
			radiobuttons数据绑定
				radiobuttons可以绑定数组,集合和Map
		select:下拉列表
			option/options:select中的元素
**Errors标签**
	form:errors:显示表单组件或数据校验所对应的错误
**URI:统一资源标识符(uniform resource identifier)**
	定义
		一个用于表示某一互联网资源名称的字符串,该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义
	组成
		主机名:域名标志就是服务器主机名
		访问的文件夹位置
		访问的文件名称
		标志符
			有的URI指向一个资源的内部。这种URL以“#"结束,并跟着一个anchor标志符(称为片段标志符)
**URL:统一资源定位符(uniform resource locator)**
	介绍
		URL是一个具体的URI,它不仅唯一标识资源,还提供定位该资源的信息
	组成
		协议(服务方式)
		主机IP地址(有时包括端口号)
		主机资源的具体地址(目录和文件名)
**rest**
	介绍
		representational state transfer(资源)表现层状态传递
		一种软件架构风格
	优点
		客户端服务器分离
		无状态
		缓存
		分层系统
		统一接口
		支持按需代码
**HTTP的请求的四种状态**
	rest规定HTTP协议中4个操作方式
		get:获取资源
		post:新建资源
		put:更新资源
		delete删除资源
**js资源文件引用问题**
	在springmvc的配置文件中添加
	或者在web.xml中添加

数据类型转换和数据校验

**自定义类型转换器**
	当页面无法类型转换时,springmvc就会抛出异常异常信息可以使用BindingResult来进行获取
**spring支持的转换器**
	Spring定义了3中类型转换器接口,实现任意一个都可作为自定义转换器注册到ConversionServiceFactoryBean中
		Converter<S,T>将S类型转换成T类型
		ConverterFactory
		GenericConverter
**JSR303**
	介绍
		是Java为bean数据合法性校验提供的标志框架,已经包含在Javaee.6.0中
		通过在Bean属性上标注类似@NotNull,@Max等标准的注解指定验证规则,并通过标准的验证接口对Bean进行验证
**Hibernate Validator扩展注解**
	介绍
		是JSR3.0的一个扩展组件
	注解
**Spring MVC数据校验步骤**
	导入Hibernate-validator包
	添加<mvc:annotation-driven/>配置信息
	在实体类上添加验证注解
	在目标方法Bean类型的前面添加@Valid注解

拦截器及异常处理

**拦截器**
	介绍
		类似于Servlet开发中的过滤器Filter,用于对处理器 进行预处理和后处理
		是AOP思想的具体应用
	与过滤器的区别
		过滤器是Servlet规范中的一部分,任何JavaWeb工程都可以使用
		拦截器是SpringMVC框架自带的,只有使用SpringMVC框架的工程才能用
		过滤器在url-pattern中配置/*后,可以对所有要访问的资源拦截
		拦截器它只会拦截方法的控制器方法,jsp,html,css,image,js是不会进行拦截的
**自定义拦截器的步骤**
	编写一个普通类实现HandlerInterceptor接口
		perHandle():方法在业务处理器处理请求之前被调用
		psotHandle()方法在业务处理完请求后调用
		afterCompletion()方法在前端DispatcherServlet完成处理请求后被调用,做一些资源清理的操作
	配置拦截器
	拦截器的放行
		如果有下一个拦截器就执行下一个,如果该拦截器处于拦截器链的最后一个,则执行控制器中的方法
		preHandle方法中的返回值返回true的时候,程序才能继续执行
**异常**
	SpringMVC异常处理的三种方式
		使用SimpleMappiingExceptionResolver实现异常处理
			获取异常信息
		实现HandlerExcptionResolver接口自定义异常处理器
			获取导致异常的对象
		使用@ExceptionHandler注解实现异常处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值