2024.3.8 Friday
接上文 【WEEK2】 【DAY4】数据处理及跳转之结果跳转方式【中文版】
目录
5.2. 数据处理
5.2.1. 提交处理数据
5.2.1.1.提交的域名称和处理方法的参数名一致
假设提交的数据为:http://localhost:8080/hello?name=zhangsan
处理方法:
@RequestMapping("/hello")
public String hello(String name){
System.out.println(name);
return "hello";
}
后台输出:zhangsan
5.2.1.2.提交的域名称和处理方法的参数名不一致
假设提交的数据为:http://localhost:8080/hello?username=zhangsan
处理方法:
//@RequestParam("username") : username提交的域的名称 .
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name){
System.out.println(name);
return "hello";
}
后台输出:zhangsan
5.2.1.3.实例:新建文件
1. UserController.java
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
// localhost:8080/user/ti?name=...
@GetMapping("/t1")
public String test1(String name, Model model){
//1.接收前端参数(通过name)
System.out.println("接受到前端的参数为:" + name);
//2.将返回的结果传递到前端:Model
model.addAttribute("msg",name);
//3.视图跳转
return "test";
}
}
2. 运行
http://localhost:8080/springmvc_04_controller_war_exploded/user/t1
http://localhost:8080/springmvc_04_controller_war_exploded/user/t1?name=zhangsan
3. 修改UserController.java(添加@RequestParam(“username”))
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/user")
public class UserController {
// localhost:8080/user/t1?name=...
@GetMapping("/t1")
//一般都写上@RequestParam("username")用于前端接收,此时url改为localhost:8080/username/t1?name=...
public String test1(@RequestParam("username") String name, Model model){
//1.接收前端参数(通过name)
System.out.println("接受到前端的参数为:" + name);
//2.将返回的结果传递到前端:Model
model.addAttribute("msg",name);
//3.视图跳转
return "test";
}
}
4. 运行结果的变化:输入为空时不会返回null,而是显示错误
http://localhost:8080/springmvc_04_controller_war_exploded/user/t1
有传入参数时则相同
http://localhost:8080/springmvc_04_controller_war_exploded/user/t1?username=zhangsan
5.2.1.4.提交的是一个对象
要求提交的表单域和对象属性一致,参数使用对象即可
1. 实体类:user.java
package com.kuang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data //在lombok中包含很多便携包,可以省去很多底层操作
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private int age;
/* @Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}*/
}
2. UserController.java
package com.kuang.controller;
import com.kuang.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/t1") //localhost:8080/user/t1?name=...
public String test1(@RequestParam("username") String name, Model model){
//一般都写上@RequestParam("username")用于前端接收,此时url改为localhost:8080/username/t1?name=...
//1.接收前端参数(通过name)
System.out.println("接受到前端的参数为:" + name);
//2.将返回的结果传递到前端:Model
model.addAttribute("msg",name);
//3.视图跳转
return "test";
}
/*
1.接收前端用户传递的参数,判断参数的名字,假设名字直接写在方法上,可以直接使用
2.假设传递的是一个对象User,匹配User对象中的字段名,仅当名字相同时能够匹配成功
*/
//前端接收的是一个对象:id,name,age
@GetMapping("/t5")
public String test2(User user,Model model){
System.out.println(user);
System.out.println("000000"+user.toString());
model.addAttribute("msg",user);
return "test";
}
}
3. 修改pom.xml
- 添加依赖
修改SpringMVC_try1\SpringMVC_try1\springmvc-04-controller\pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kuang</groupId>
<artifactId>SpringMVC_try1</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>springmvc-01-servlet</module>
<module>springmvc-02-hello</module>
<module>springmvc-03-hello-annotation</module>
<module>springmvc-04-controller</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--导入依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<!-- 导入lombok库 -->
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>
</project>
lombok的作用和常用注解_lombok注解-CSDN博客
- 修改镜像下载地址
【阿里云镜像】配置阿里云Maven 镜像
按照第四部分的步骤进行修改
4. 运行
http://localhost:8080/springmvc_04_controller_war_exploded/user/t5?id=20&name=zhangsan&age=99
5.2.2. 数据显示到前端
5.2.2.1.第一种 : 通过ModelAndView
public class ControllerTest1 implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//返回一个模型视图对象
ModelAndView mv = new ModelAndView();
mv.addObject("msg","ControllerTest1");
mv.setViewName("test");
return mv;
}
}
5.2.2.2.第二种 : 通过ModelMap
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name, ModelMap model){
//封装要显示到视图中的数据
//相当于req.setAttribute("name",name);
model.addAttribute("name",name);
System.out.println(name);
return "hello";
}
5.2.2.3.第三种 : 通过Model
@RequestMapping("/ct2/hello")
public String hello(@RequestParam("username") String name, Model model){
//封装要显示到视图中的数据
//相当于req.setAttribute("name",name);
model.addAttribute("msg",name);
System.out.println(name);
return "test";
}
5.2.2.4.对比
就对于新手而言简单来说使用区别就是:
- Model只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;
- ModelMap继承了LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap的方法和特性;
- ModelAndView可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。
当然更多的以后开发考虑的更多的是性能和优化,就不能单单仅限于此的了解。
老师给的建议:请使用80%的时间打好扎实的基础,剩下18%的时间研究框架,2%的时间学英文,框架的官方文档永远是最好的教程。
标签:5.2,name,org,user,跳转,数据处理,import,WEEK2,String From: https://blog.csdn.net/2401_83329143/article/details/136605607