SpringMVC笔记(2)
一、SpringMVC的数据响应
1.1 数据响应方式
1.1.1 页面跳转
-
直接返回字符串
将返回的字符串与内部资源视图解析器的前后缀拼接 进行访问(默认为转发)
-
通过ModelAndView对象返回
<%@ page isELIgnored="false" %>
@RequestMapping("/save2")
//注入思想由Spring提供参数的创建
public ModelAndView save2(ModelAndView modelAndView){
//设置视图名称
modelAndView.setViewName("success");
//添加模型数据,相当于存储于域中
modelAndView.addObject("username","gyb");
System.out.println("ModelAndView..");
return modelAndView;
}
1.1.2 回写数据
- 直接返回字符串
-
通过写形参注入Response对象,然后调用getWriter.print()
-
加入@ResponseBody,告诉Spring是直接返回字符串(消息体)
-
/** * 返回字符串 */ @RequestMapping("/save3") @ResponseBody public String save3(){ return "saving.."; }
-
返回json格式字符串,导入坐标,
-
<!-- json--> <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>
-
添加mvc注解驱动
<!--mvc注解驱动--> <mvc:annotation-driven/>
/** * 返回json格式 */ @RequestMapping("/save4") @ResponseBody public User save4(){ User user = new User(); user.setUsername("gyb"); user.setPassword("123"); //返回json格式的字符串 return user; }
-
- 返回对象或集合
二、SpringMVC的请求
2.1 请求参数类型
-
基本类型参数
Controller中业务方法中的参数名与请求参数名字一致,参数会自动映射匹配
/** * 获取基本请求参数 */ @RequestMapping("/save5") @ResponseBody public void save5(String username, String age){ System.out.println(username); System.out.println(age); }
-
POJO类型参数
Controller中业务方法中的POJO参数的属性名与请求参数名字一致,参数会自动映射匹配
/** * 获取POJO类型参数 */ @RequestMapping("/save6") @ResponseBody public void save6(User user){ System.out.println(user); }
-
数组类型参数
/** * 获取数组类型参数 */ @RequestMapping("/save7") @ResponseBody public void save7(String str[]){ System.out.println(Arrays.asList(str)); }
-
集合类型参数
请求体的数据是json格式的,并且为application/json,才可以进行自动映射封装
/**
* 集合类型参数
*/
@RequestMapping("save8")
@ResponseBody
//在参数前添加请求体注解
public void save8(@RequestBody List<User> userList){
System.out.println(userList);
}
2.2 参数绑定注解@requestParam
-
value:与客户端的请求参数名相同即可接受任意请求参数
-
required:次在指定的请求参数是否必须存在,默认为true
-
defaultValue:客户端没有请求参数时,默认值
/** * 参数绑定注解 */ @RequestMapping("save9") @ResponseBody //注解中的username为请求参数名,与前台对应 public void save9(@RequestParam(value = "username" ,defaultValue = "123") String name){ System.out.println(name); }
2.3 Restful风格的参数获取
在Restful风格中,现有规定如下:
- GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。
- POST(CREATE):在服务器新建一个资源,调用insert操作。
- PUT(UPDATE):在服务器更新资源,调用update操作。
- DELETE(DELETE):从服务器删除资源,调用delete语句
2.4 获取请求信息
获取请求头的参数和cookie的参数
/**
* 获取请求信息
* 获取请求头信息(userAgent)
*/
@RequestMapping("save10")
@ResponseBody
public void save10(@RequestHeader("User-Agent") String userAgent){
System.out.println(userAgent);
}
/**
* 获取请求信息
* 获取cookie的JSESSIONID
*/
@RequestMapping("save11")
@ResponseBody
public void save11(@CookieValue ("JSESSIONID") String JSESSIONID){
System.out.println(JSESSIONID);
}
2.5 文件上传
2.5.1 文件上传客户端三要素
- 表单项 type="file"
- 表单的提交方式是 post
- 表单的enctype属性是多部分表单形式,及enctype="multipart/form-date"
2.5.2 单文件上传步骤
- 导入fileupload和io坐标
<!-- fileupload-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- io-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
- 配置文件上传解析器
<!-- 配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="500000"/>
</bean>
- 编写文件上传代码
/**
* 文件上传
*/
@RequestMapping("fileUpload")
@ResponseBody
public void fileUpload(String username, MultipartFile uploadFile){
System.out.println(username);
System.out.println(uploadFile);
}
2.6 注意:
静态资源无法找到映射,需要配置spring-mvc.xml
<!-- 开放资源访问-->
<!-- 1.交给默认处理-->
<mvc:default-servlet-handler/>
<!-- 2.开放js资源-->
<mvc:resources mapping="/js/**" location="/js/"/>
el表达式在jsp中放行
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>