# 内容
1. 响应数据和结果视图
* 返回值的分类
* ResponseBody响应数据
2. SpringMVC实现文件上传
3. SpringMVC的异常处理
4. SpringMVC框架的拦截器
## 响应数据和结果视图
1. 返回值分类
1. 字符串:Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。
2. void:使用request或response响应结果
1. 使用 request 转向页面
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
2. 使用 response 页面重定向
response.sendRedirect("testRetrunString")
3. 使用 response 指定响应结果,例如响应 json 数据
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");
3. ModelAndView:
* ModelAndView 是 SpringMVC 为我们提供的一个对象,可以用来调整具体的JSP视图
* ModeAndView 对象的两个方法如下:
//作用:添加模型到该对象中
public ModelAndView addObject(String attributeName,Object attributeValue){
getModelMap().addAttribute(attributeName,attributeValue);
//我们可以在页面上使用EL表达式获取attribute的值,${attributeName}
return this;
}
//作用:用于设置逻辑视图名称,视图解析器会根据名称前往指定的视图
public void setViewName(@Nullable String viewNaem){
this.view=viewName;
}
2. SpringMVC框架提供的重定向和转发
1. forward转发
* 使用请求转发,既可以转发到jsp,也可以转发到其他的控制器方法。
* controller方法在提供了 String 类型的返回值之后,默认就是请求转发。
* 注意:如果用了 forward:则路径必须写成实际视图 url,不能写逻辑视图。
如:return "success" = return "forward:/WEB-INF/pages/success.jsp";
2. Redirect重定向
* 注意:如果是重定向到 jsp 页面,则 jsp 页面不能写在 WEB-INF 目录中,否则无法找到。
3. ResponseBody响应json数据
1. 设置静态资源(img,css,js不被DispatcherServlet拦截,在SpringMVC配置文件中作如下配置
* location元素表示webapp目录下的static包下的所有文件;
* mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b;
* 该配置的作用是:DispatcherServlet不会拦截以/static开头的所有请求路径,并当作静态资源交由Servlet处理。
代码如下:
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript --!>
2. 使用@RequestBody获取请求体数据
jsp代码:
$(function(){
// 绑定点击事件
$("#btn").click(function(){
$.ajax({
url:"user/testJson",
contentType:"application/json;charset=UTF-8",
data:'{"addressName":"aa","addressNum":100}',
dataType:"json",
type:"post",
success:function(data){
alert(data);
alert(data.addressName);
}
});
});
});
控制器中的代码:
@RequestMapping("/testJson")
public void testJson(@RequestBody String body) {
System.out.println(body);
}
3. json字符串与JavaBean对象的转换,需要加入jackson的依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
4. 使用@RequestBody注解把json的字符串转换成JavaBean的对象
* 在控制器的方法的形参中使用@RequestBody,将请求的json对象转换为JavaBean对象
$(function(){
// 绑定点击事件
$("#btn").click(function(){
$.ajax({
url:"user