一. SpringMVC的数据响应方式
1. 页面跳转
1.1 返回字符串形式
重定向:表示客户端再次请求
<!--配置内部资源视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- /jsp/success.jsp -->
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
1.2 返回ModelAndView对象
Model:模型 作用封装数据
View:视图 作用展示数据
package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/user")
public class UserController {
// 请求地址 http://localhost:8080/user/quick
@RequestMapping(value="/quick",method = RequestMethod.GET,params = {"username"})
public String save(){
System.out.println("Controller save running....");
return "success";
}
@RequestMapping(value="/quick2")
public ModelAndView save2(){
ModelAndView modelAndView = new ModelAndView();
//设置模型数据
modelAndView.addObject("username","pudding");
//设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping(value="/quick3")
public ModelAndView save3(ModelAndView modelAndView){
//设置模型数据
modelAndView.addObject("username","pudding");
//设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping(value="/quick4")
public String save4(Model model){
model.addAttribute("username","阿强");
return "success";
}
@RequestMapping(value="/quick5")
public String save5(HttpServletRequest request){
request.setAttribute("username","阿飞");
return "success";
}
}
1.3 向request域存储数据
2. 回写数据
2.1. 直接返回字符串
@ResponseBody //告知SpringMVC框架 不进行视图跳转 直接进行数据响应
上述方式手动拼接json格式字符串的方式很麻烦,开发中往往要将复杂的java对象转换成json格式的字符串,我们可以使用web阶段学习过的json转换工具jackson进行转换,导入jackson坐标。
<!--jackson-->
<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-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
@RequestMapping(value="/quick9")
@ResponseBody
public String save9() throws IOException {
User user = new User();
user.setUsername("lisi");
user.setAge(30);
//使用json的转换工具将对象转换成json格式字符串在返回
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
return json;
}
2.2. 返回对象或集合
<!--配置处理器映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
@RequestMapping(value="/quick10")
@ResponseBody
//期望SpringMVC自动将User转换成json格式的字符串
public User save10() throws IOException {
User user = new User();
user.setUsername("lisi2");
user.setAge(32);
return user;
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--mvc的注解驱动-->
<mvc:annotation-driven conversion-service="conversionService"/>
</beans>
二. SpringMVC 获得请求数据
1. 获得请求参数
1.1 获得基本类型参数
1.2 获得POJO类型参数
底层通过反射调用set方法进行匹配
1.3 获得数组类型参数
1.4 获得集合类型参数
如果不写上面这句话,springmvc进行虚拟路径匹配,会把jquer也当成一个requestMapping进行匹配,而匹配不上。我们进行开放资源,让客户端直接能够访问到。
或者使用如下方法:交给原始容器Tomcat帮我们找静态资源
2. 请求数据乱码问题
3. 参数绑定注解@requestParam
@RequestMapping(value="/quick16")
@ResponseBody
//@RequestParam将name映射到username
public void save16(@RequestParam(value="name",required = false,defaultValue = "itcast") String username) throws IOException {
System.out.println(username);
}
4. 获得Restful风格的参数
三. 自定义类型转换器
1. 定义转换器类实现Converter接口
@RequestMapping(value="/quick18")
@ResponseBody
public void save18(Date date) throws IOException {
System.out.println(date);
}
2. 在配置文件中声明转换器
<bean id="converterService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.itheima.converter.DateConverter"/>
</list>
</property>
</bean>
3. 在< annotation-driven >中引用转换器
<mvc:annotation-driven conversion-service="converterService"/>
四. 获得Servlet相关API
五. 获得请求头
1. @RequestHeader
2. @CookieValue
六. 文件上传
1. 文件上传客户端三要素
2. 文件上传原理
3. 单文件上传步骤
3.1 导入fileupload和io坐标
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
3.2 配置文件上传解析器
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上传文件总大小-->
<property name="maxUploadSize" value="5242800"/>
<!--上传单个文件的大小-->
<property name="maxUploadSizePerFile" value="5242800"/>
<!--上传文件的编码类型-->
<property name="defaultEncoding" value="UTF-8"/>
</bean>
3.3 编写文件上传代码
@RequestMapping("/quick20")
@ResponseBody
public void quickMethod20(String name,MultipartFile uploadFile) throws IOException {
//获得文件名称
String originalFilename = uploadFile.getOriginalFilename();
//保存文件
uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));
}
4. 多文件上传实现