文章目录
1.SpringMVC映射请求数据
1.获取请求头信息
1.VoterHandler.java
java
复制代码
package com.sun.web.requetstparam;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author 孙显圣
* @version 1.0
*/
@RequestMapping("/request")
@Controller
public class VoterHandler {
//获取请求头信息
@RequestMapping("/getheader")
public String getHeader(@RequestHeader("Accept-Encoding") String ae, @RequestHeader("Host") String host) {
System.out.println("Accept-Encoding:" + ae);
System.out.println("host:" + host);
return "/success";
}
}
2.request_parameter.jsp
jsp
复制代码
<%--
Date: 2024/2/25
Time: 21:04
User: 孙显圣
Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><a href="request/getheader">点击获取请求头信息</a></h3>
</body>
</html>
3.结果展示
2.自动封装javabean
1.需求分析
2.应用实例
1.Master.java
java
复制代码
package com.sun.web.entity;
/**
* @author 孙显圣
* @version 1.0
*/
public class Master {
private Integer id;
private String name;
private Pet pet; //属性中包含一个对象
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;
}
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
@Override
public String toString() {
return "Master{" +
"id=" + id +
", name='" + name + '\'' +
", pet=" + pet +
'}';
}
}
2.Pet.java
java
复制代码
package com.sun.web.entity;
import javafx.geometry.Orientation;
/**
* @author 孙显圣
* @version 1.0
*/
public class Pet {
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 "Pet{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
3.后端接口
java
复制代码
/**
* 将请求信息自动封装到master中
* 1.如果是普通属性,则名称必须与其对应
* 2.如果是对象属性,则使用对象属性.属性的形式来封装
* @param master
* @return
*/
@RequestMapping("/setmaster")
public String setMaster(Master master) {
System.out.println(master);
return "success";
}
4.结果展示
3.底层机制
- Spring MVC直到要将参数封装到Master中,则反射创建Master对象
- 基本属性封装
- 读取请求信息,得到id和name两个属性的值
- 调用Master对象的setter方法为其赋值
- 嵌套属性封装
- 读取请求信息,得到pet.id和pet.name这两个值
- 首先检测刚才反射创建的Master实例中是否有Pet实例,如果没有,则反射创建一个Pet实例
- 调用Pet的setter方法先封装id
- 再次检测Master实例中是否有Pet实例,发现已经存在,则直接调用setName方法封装name
- 最后掉用setPet的方法封装到Master实例中
3.调用servlet-api
1.基本说明
2.代码实例
1.接口
java
复制代码
@RequestMapping("/servlet")
public String servlet(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:" + username + " password:" + password) ;
return "success";
}
2.结果展示
3.注意事项
案例演示
java
复制代码
@RequestMapping("/session")
public String session(HttpServletRequest request, HttpSession session) {
//使用传入参数形式获取的session和使用request获取的session是同一个session
System.out.println(session);
HttpSession session1 = request.getSession();
System.out.println(session1);
return "success";
}
2.模型数据(放入request)
1.需求分析
2.模型数据---默认机制
1.接口
java
复制代码
/**
* 模型数据的默认机制:得到请求之后,自动将请求的内容封装到master中,名字是类型名首字母小写
* 将"getmaster"封装到request请求中
* 将"getmaster"请求转发给getmaster.jsp文件
* @param master
* @return
*/
@RequestMapping("/m01")
public String master01(Master master) {
return "getmaster";
}
2.getmaster.jsp
jsp
复制代码
<%@ page import="org.springframework.web.context.request.RequestScope" %><%--
Date: 2024/2/26
Time: 11:56
User: 孙显圣
Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
id:${requestScope.master.id}<br>
name:${requestScope.master.name}<br>
pet.id:${requestScope.master.pet.id}<br>
pet.name:${requestScope.master.pet.name}
</body>
</html>
3.postman测试
3.模型数据---HttpServletRequest API
1.接口
java
复制代码
/**
* 使用原生的servlet api来进行操作,将请求转发到getmaster页面
*
* @param master
* @param request
* @return
*/
@RequestMapping("/m02")
public String master02(Master master, HttpServletRequest request) {
request.setAttribute("master", master);
return "getmaster";
}
2.postman测试
4.模型数据---Map<String, Object>
1.接口
java
复制代码
/**
* 使用Map<String, Object> map来将信息放到request域中
* 原理分析:在将信息封装到master之后,先将master放到request域中,然后扫描map,将这里面的信息也放到request域中
* 请求转发
* @param master
* @param map
* @return
*/
@RequestMapping("/m03")
public String master03(Master master, Map<String, Object> map) {
map.put("address", "127.0.0.1"); //给map赋值
return "getmaster";
}
2.getmaster.jsp
jsp
复制代码
<%@ page import="org.springframework.web.context.request.RequestScope" %><%--
Date: 2024/2/26
Time: 11:56
User: 孙显圣
Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
address:${requestScope.address}
id:${requestScope.master.id}<br>
name:${requestScope.master.name}<br>
pet.id:${requestScope.master.pet.id}<br>
pet.name:${requestScope.master.pet.name}
</body>
</html>
3.postman测试
4.注意事项
5.模型数据---ModelAndView
1.接口
java
复制代码
/**
* 使用ModelAndView来将信息封装到request域中,并且返回ModelAndView对象,到视图解析器
* 原理分析:
* 1.首先将请求的信息封装到master中
* 2.然后将这个master放到request域中
* 3.扫描modelandview,将信息也封装到request域中
* 4.返回modelandview并请求转发给视图解析器
* @param master
* @return
*/
@RequestMapping("/m04")
public ModelAndView modelandview(Master master) {
ModelAndView modelAndView = new ModelAndView();
//添加对象
modelAndView.addObject("address", "127.0.0.1");
//设置视图名字
modelAndView.setViewName("getmaster");
return modelAndView;
}
2.postman测试
3.注意事项
6.模型数据(放入session)
1.接口
java
复制代码
@RequestMapping("/m05")
public String getsession(Master master, HttpSession session){
session.setAttribute("address", "122222");
session.setAttribute("name", "sun");
return "getsession";
}
2.getsession.jsp
jsp
复制代码
<%--
Date: 2024/2/26
Time: 13:38
User: 孙显圣
Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
name:${sessionScope.name}<br>
address:${sessionScope.address}
</body>
</html>
3.postman测试
7.@ModelAttribute注解配置所有方法前置通知
1.代码
java
复制代码
//配置所有方法的前置通知
@ModelAttribute
public void prepareModel() {
System.out.println("准备工作完毕");
}
2.postman测试