文章目录
SpringMVC的请求和响应
一、SpringMVC的响应
1、页面跳转
1.1、直接返回字符串
@RequestMapping(value = "/quick", method = RequestMethod.GET, params = {"username"}) //请求映射
public String quickMethod(){
System.out.println("quickMethod running.......");
//return:要跳转的视图
//要加一个/表示当前web目录下
return "quick";
}
1.2、通过ModelAndView对象返回
@RequestMapping(value = "/quick3") //请求映射
public ModelAndView quickMethod3(ModelAndView modelAndView){
//ModelAndView对象作为形参,由SpringMVC框架自行创建
modelAndView.setViewName("quick");
modelAndView.addObject("username", "喜羊羊");
return modelAndView;
}
@RequestMapping(value = "/quick2") //请求映射
public ModelAndView quickMethod2(){
//自己创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("quick");
modelAndView.addObject("username", "小明");
return modelAndView;
}
1.3、其他
@RequestMapping(value = "/quick5") //请求映射
public String quickMethod5(HttpServletRequest request){
request.setAttribute("username", "红太狼");
return "quick";
}
@RequestMapping(value = "/quick4") //请求映射
public String quickMethod4(Model model){
model.addAttribute("username", "灰太狼");
return "quick";
}
2、回写数据
2.1、直接返回字符串
@RequestMapping(value = "/quick6") //请求映射
public void quickMethod6(HttpServletResponse response) throws IOException {
response.getWriter().println("Hello kang");
}
@RequestMapping(value = "/quick8") //请求映射
@ResponseBody
public String quickMethod8() throws IOException {
//回写json
return "{\"username\":\"zhangsan\",\"age\":18}";
}
@RequestMapping(value = "/quick7") //请求映射
@ResponseBody
public String quickMethod7(HttpServletResponse response) throws IOException {
//回写字符串
return "Hello quick7";
}
@RequestMapping(value = "/quick10") //请求映射
@ResponseBody
public String quickMethod10() throws IOException {
User user = new User();
user.setName("lisi");
user.setAge(20);
return JSON.toJSONString(user);
}
@RequestMapping(value = "/quick9") //请求映射
@ResponseBody
public String quickMethod9() throws IOException {
User user = new User();
user.setName("lisi");
user.setAge(20);
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(user);
}
2.2、返回对象或者集合
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.kang.controller">
<!--扫描com.kang.controller包下的Controller注解-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀-->
<property name="prefix" value="/jsp/"></property>
<!--配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
<!--配置处理器映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<!--配置json转换工具-->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</list>
</property>
</bean>
</beans>
@RequestMapping(value = "/quick11") //请求映射
@ResponseBody
public User quickMethod11() throws IOException {
User user = new User();
user.setName("liu");
user.setAge(20);
return user;
}
2.3、提升(重要)
<!--注解驱动-->
<mvc:annotation-driven/>
二、SpringMVC获得请求数据
1、基本类型参数
@RequestMapping(value = "/quick12") //请求映射
@ResponseBody
public void quickMethod12(String username, int age){
System.out.println(username);
System.out.println(age);
}
http://localhost:8080/SpringMVC/quick12?username=zhangsan&age=12
2、POJO类型参数
public class User {
private String name;
private int age;
get/set
}
@RequestMapping(value = "/quick13") //请求映射
@ResponseBody
public void quickMethod13(User user){
System.out.println(user.getName());
System.out.println(user.getAge());
}
http://localhost:8080/SpringMVC/quick13?username=zhangsan&age=12
3、数组类型参数
@RequestMapping(value = "/quick14") //请求映射
@ResponseBody
public void quickMethod14(String[] strs){
System.out.println(Arrays.asList(strs));
}
http://localhost:8080/SpringMVC/quick14?strs=111&strs=222&strs=333
4、集合类型参数
4.1、将集合参数包装到一个POJO类中(了解)
4.2、使用ajax提交
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<script src="js/jquery-3.6.0.js"></script>
<script>
var userList = new Array();
userList.push({name: "zhangsan", age: "20"});
userList.push({name: "lisi", age: "18"});
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/user/quick16",
data: JSON.stringify(userList),
contentType: 'application/json;charset=utf-8'
});
</script>
</body>
</html>
@RequestMapping(value = "/quick16") //请求映射
@ResponseBody
public void quickMethod16(@RequestBody List<User> userList){
System.out.println(userList);
}
5、请求数据乱码问题
<!--配置全局过滤的filter-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!--对任何资源都起作用-->
<url-pattern>/*</url-pattern>
</filter-mapping>
6、参数绑定注解@requestParam
@RequestMapping(value = "/quick17") //请求映射
@ResponseBody
public void quickMethod17(@RequestParam(value = "name", required = false, defaultValue = "kang") String userName){
System.out.println(userName);
}
7、 获得Restful风格的参数(了解)
Restful风格的请求是使用“url+请求方式”来表示一次目的,HTT协议里面四个表示操作方式的动词如下:
- GET:用于获取资源
- POST:用于新建资源
- PUT:用于更新资源
- DELETE:用于删除资源
例如:
- /user/1 GET: 得到id=1的user
- /user/1 DELETE: 删除id=1的user
- /user/1 PUT: 更新id=1的user
- /user POST: 新增user
@RequestMapping(value = "/quick18/{username}") //请求映射
@ResponseBody
public void quickMethod18(@PathVariable(value = "username") String userName){
System.out.println(userName);
}
8、自定义类型转换器
自定义类型转换器的开发步骤:
-
定义转换器类实现Converter接口
package com.kang.converter; import org.springframework.core.convert.converter.Converter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * @ClassName DataConverter * @Description TODO * @Author kang * @Date 2022/2/27 下午 2:18 * @Version 1.0 */ public class DataConverter implements Converter<String, Date> { @Override public Date convert(String s) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = simpleDateFormat.parse(s); } catch (ParseException e) { e.printStackTrace(); } return date; } }
-
在配置文件中声明转换器
<!--配置文件中声明转换器--> <bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="com.kang.converter.DataConverter"></bean> </list> </property> </bean>
-
在< annotation-driven >中引用转换器
<!--注解驱动-->
<mvc:annotation-driven conversion-service="converterService"/>
9、 获得请求头
9.1、 @RequestHeader
@RequestMapping(value = "/quick21") //请求映射
@ResponseBody
public void quickMethod21(@RequestHeader(value = "User-Agent", required = false) String userAgent){
System.out.println(userAgent);
}
9.2、 @CookieValue
@RequestMapping(value = "/quick22") //请求映射
@ResponseBody
public void quickMethod22(@CookieValue(value = "JSESSIONID", required = false) String cookie){
System.out.println(cookie);
}
10、文件上传的实现
10.1、单文件上传步骤
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">
名称<input type="text" name="username"><br>
文件<input type="file" name="uploadFile"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
10.2、多文件上传实现
@RequestMapping(value = "/quick24") //请求映射
@ResponseBody
public void quickMethod24(String name, MultipartFile[] uploadFile) throws IOException {
for (MultipartFile multipartFile : uploadFile) {
//获取文件名
String originalFilename = multipartFile.getOriginalFilename();
//保存文件
multipartFile.transferTo(new File("F:\\笔记记录\\文件上传test\\" + originalFilename));
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/quick24" method="post" enctype="multipart/form-data">
名称<input type="text" name="username"><br>
文件1:<input type="file" name="uploadFile"><br>
文件2:<input type="file" name="uploadFile"><br>
<input type="submit" value="提交">
</form>
</body>
</html>