响应数据和结果视图
字符串
controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
@RequestMapping中指定是逻辑视图名通过视图解析器,解析为物理路径
void
servlet原生API可以作为控制器方法的参数
1 使用request转向页面
2 使用response进行重定向
3 还可以使用response指定相应结果,例如相应json数据
ModelAndView
ModelAndView 是SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值
转发和重定向
转发
当指定控制器方法的返回值类型是String时默认就为转发
重定向
当指定控制器方法的返回值类型是String时,需要在返回值中使用redirect:
@ResponseBody注解相应json数据
使用@ResponseBody 注解实现将controller 方法返回对象转换为json 响应给客户端
Springmvc 默认用MappingJacksonHttpMessageConverter 对json 数据进行转换,需要加入jackson 的包。
SpringMVC 实现文件上传
文件上传的必要前提
1 form表单的enctype必须是multipart/form-data(默认为application/x-www-form-urlencoded),enctype属性是指定form表单正文的类型。
2 method为post
3 提供一个文件选择域<input type="file"/>
文件上传原理分析
1 当entype不是默认类型时,request.getParamter()方法失效。
2 当entype是默认类型时,form的正文内容是key=value的键值对形式。
3 当entype为multipart/form-data时,form内容是MIME类型。(分界符,协议头,协议正文,协议类型)
传统方式的文件上传(文件和应用在同一服务器)
1 将文件上传的jar包放在lib目录下
2 编写上传文件的jsp页面
3 编写controller类
三个参数:文件名,文件,HttpServletRequest
1 获取原始文件名 2获得文件后缀名 3获取一个随机数 4 文件名+随机数+"."+后缀 组成上传文件的文件名
5 获取文件上传路径 6 解决一个文件夹下文件过多的问题:通过将当前日期加在上传路径上来得到一个子目录 7 上传文件:文件.transferTo(目录,新文件名)
4 在springmvc.xml中配置文件解析器CommonsMultipartResolver,解析器的名字必须是multipartResolver,并设置属性如文件上传的最大尺寸5MB
springmvc 跨服务器方式的文件上传
1 确保接收文件的服务器接收写入操作
2 导入jar包,多了jersey jar包
3 编写controller类
两个参数:文件名 文件
通过一个常量写明上传文件的目的服务器路径
通过sun公司提供的jersey的client对象实现文件上传
4 编写上传文件的jsp界面
5 在springmvc.xml中配置上传文件解析器
SpringMVC 中的异常处理
异常包括两类:预期异常和运行时异常 前者通过捕获异常而获得异常信息,后者主要通过规范编码,测试来减少异常
dao.service.controller出现异常都向上抛出,通过springmvc的前端控制器交由异常处理器来处理异常
1 编写异常类
2 自定义异常处理器 implements HandlerExceptionResolver
3 编写还回的异常jsp界面
4 将自定义的异常处理器在springmvc中进行配置
SpringMVC 中的拦截器
AOP思想的具体应用
springmvc的拦截器类似于servlet的filter,对处理器进行一些预处理和后处理
两则区别:是否所有java web均可用,拦截的内容
1 自定义springmvc连接器必须实现HandlerInterceptor接口,覆盖三个方法
preHandle 一开始调用
postHandle 在处理器完成,DispatcherHandler向客户端返回响应前调用。可以在该方法中对用户请求request进行处理
afterCompletion 在DispatcherHandler完全处理完请求后被调用。可以在此方法中做一些资源清理工作
2 在springmvc中配置拦截器,并指定拦截的文件路径