SpringMVC基础篇(三)

文章目录

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测试
相关推荐
芊寻(嵌入式)1 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
WaaTong2 分钟前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
m0_743048442 分钟前
初识Java EE和Spring Boot
java·java-ee
AskHarries4 分钟前
Java字节码增强库ByteBuddy
java·后端
一颗松鼠9 分钟前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_11 分钟前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_201317 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑24 分钟前
php 使用qrcode制作二维码图片
开发语言·php
小灰灰__24 分钟前
IDEA加载通义灵码插件及使用指南
java·ide·intellij-idea
夜雨翦春韭28 分钟前
Java中的动态代理
java·开发语言·aop·动态代理