一 、背景
1.其实之前对这一块也是比较含糊不清晰的,之前也总结了一下,但是忘了,现在联系着后端返回前端的方式一块总结了吧,每一种情况我都会列举出一个小例子供大家参考学习,同时也希望能帮到大家进一步理解,同时也希望大家能批评指正我的错误,共勉!!!
二、后端接收前端的方式
1.通过@RequestParam注解接收请求参数;
1.1.测试类
@RestController
public class test01 {
@RequestMapping(value = "/testRequestParam")
public String testRequestParams(@RequestParam(value = "userName") String userName){
System.out.println("userName is " + userName);
return "success";
}
}
1.2.测试结果
2.通过Bean封装,接收多个请求参数
2.1.实体类
public class Person {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
2.2.测试类
@RestController
public class test01 {
@RequestMapping(value = "/testRequestParam")
public String testRequestParams(Person person){
JSONObject json = new JSONObject();
return json.toJSONString(person);
}
}
2.3.测试结果
3.通过@ModelAttribute绑定接收前端表单数据
3.1.测试类
@RestController
public class test01 {
@RequestMapping(value = "/testRequestParam")
public String testRequestParams(@ModelAttribute("person") Person person){
JSONObject json = new JSONObject();
return json.toJSONString(person);
}
}
3.2.测试结果
4.通过@PathVariable获取URL中某段可变值;
4.1.测试类
@RestController
public class test01 {
@RequestMapping(value="/testRequestParam/{userName}",method = RequestMethod.GET)
public String getProduct(@PathVariable("userName") String userName){
System.out.println("userName : " + userName);
return userName;
}
}
4.2.测试结果
5.通过@RequestBody接收请求体中的数据
5.1.测试类
@RestController
public class test01 {
@RequestMapping(value="/testRequestParam")
public String getProduct(@RequestBody Person person){
return person.toString();
}
}
5.2.测试结果
6.通过@RequestHeader获取请求头中的数据
6.1.页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/testRequestHeader">test RequestHeader</a>
</body>
</html>
6.2.测试类
@RestController
public class test02 {
@RequestMapping(value = "/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept-Language") String contentLanguage){
System.out.println("Content Language is " + contentLanguage);
return "success";
}
}
6.3.测试结果
后台打印结果:
7.通过MultipartFile接收前端上传的文件
这个暂时还没接触过,就不整理了,后期如果接触了,就再去进行整理了。
8.还可以通过原生的HttpServletRequest取值
8.1.测试类
@RestController
public class test02 {
@RequestMapping(value = "/testRequestHeader")
public String testRequestHeader(HttpServletRequest request){
HttpSession session = request.getSession();
session.setAttribute("111","cmx");
System.out.println(request.getSession().getAttribute("111"));
System.out.println(request.getHeader("Accept-Language"));
return "success";
}
}
8.2.测试结果
三、后端返回前端的方式
1.采用HttpServletRequest:
1.1.测试(我采用的是springboot+web.xml的方式进行测试的),文章的最后我会把代码贴出来供大家学习。
@Controller
public class test02 {
@RequestMapping("/testRequestHeader")
public String index(HttpServletRequest request){
request.setAttribute("name", "张三");
return "index";
}
}
1.2.jsp页面(后面几个测试我都用这个进行测试了)
<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title></title>
</head>
<body>
<h1>添加用户信息4</h1>
<form action="/testRequestHeader" method="post">
<input type="submit" value="提交">
</form>
${name}
</body>
</html>
1.3.测试结果(访问localhost:8090 出现页面此时还没有张三,然后点击提交,结果张三出来了)
2.采用ModelAndView方式:
采用这种的时候具体方法的返回值要为ModelAndView。
2.1.测试类
@Controller
public class test02 {
@RequestMapping("/testRequestHeader")
public ModelAndView add(){
ModelAndView mav = new ModelAndView("index");
mav.addObject("name","cmx");
return mav;
}
}
2.2.测试结果(同上访问)
3.采用Model方式:
3.1.测试类
@Controller
public class test02 {
@RequestMapping("/testRequestHeader")
public String add(Model model){
model.addAttribute("name", "cmx");
return "index";
}
}
3.2.测试结果
4.采用Map的方式:
4.1.测试类
@Controller
public class test02 {
@RequestMapping("/testRequestHeader")
public String add(Map map){
map.put("name", "cmx");
return "index";
}
}
4.2.测试结果
5.采用ModelMap的方式:
5.1.测试类
@Controller
public class test02 {
@RequestMapping("/testRequestHeader")
public String add(ModelMap modelmap){
modelmap.put("name", "cmx");
return "index";
}
}
5.2.测试结果
四、下面说下springboot与jsp的整合(默认是不支持的)
1.项目目录结构
2.web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.application.properties(端口号你么可以指定,也可以不用指定默认8080,我的电脑不知道哪一个程序起端口冲突了,所以我写的是8090端口)
server.port=8090
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
4.pom.xml
<!-- servlet 依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat 的支持.-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
5.index.jsp(jsp目录下的)
<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title></title>
</head>
<body>
<h1>添加用户信息4</h1>
<form action="/testRequestHeader" method="post">
<input type="submit" value="提交">
</form>
${name}
</body>
</html>
5.然后你就可以开心的测试了
五、结束
终于搞定了,希望能帮助到你们,欢迎批评指正我的错误。谢谢。共勉
Always keep the faith!!!