SpringMVC系列五: SpringMVC映射请求数据

SpringMVC映射请求数据

上一讲, 我们学习的是SpringMVC系列四: Rest-优雅的url请求风格

现在打开springmvc项目

💞获取参数值

说明

开发中, 如何获取到http://ip:port/url?参数名=参数值&参数名=参数值

应用实例

1.com.zzw.web.requestParam新建VoteHandler

java 复制代码
@RequestMapping("/vote")
@Controller
public class VoteHandler {

    /**
     * 解读
     * 1.获取到超链接传递的数据 请求 http://localhost:8080/springmvc/vote/vote01?name=xx
     * 2.@RequestParam 表示会接收提交的参数
     * 3,value="name" 表示提交的参数名是name
     * 4.required=false 表示该参数可以没有; 默认是true, 表示必须有这个参数
     * 5.当我们使用了 @RequestParam(value="name", required=false)后 请求的参数名和方法的形参名可以不一致
     */
    @RequestMapping(value = "/vote01")
    public String test01(@RequestParam(value = "name", required = false) String username) {
        System.out.println("得到username=" + username);
        return "success";
    }
}

2.web路径下新建request_parameter.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试 request parameter</title>
</head>
<body>
<h2>获取到超链接参数值</h2>
<hr>
<a href="vote/vote01?name=zzw">获取超链接的参数</a>
</body>
</html>

3.Postman测试

get方式提交
post方式提交

💞获取http请求消息头

●说明

1.在开发中, 如何获取到http请求的消息头信息

2.使用较少

案例

1.修改VoteHandler.java, 增加方法 test02

java 复制代码
@RequestMapping("/vote")
@Controller
public class VoteHandler {
    /**
     * 需求: 获取http请求头信息, 获取到Accept-Encoding 和 Host
     * [涉及到知识点 http协议]
     * @param a1
     * @param a2
     * @return
     */
    @RequestMapping(value = "/vote02")
    public String test02(@RequestHeader("Accept-Encoding") String a1, @RequestHeader("Host") String a2) {
        System.out.println("Accept-Encoding=" + a1);
        System.out.println("Host=" + a2);
        //返回一个结果
        return "success";
    }
}

2.修改request_parameter.jsp

html 复制代码
<h2>获取到消息头</h2>
<a href="vote/vote02">获取到Http消息头信息</a>

3.Postman测试

💞获取JavaBean对象

使用场景说明

开发中, 如何获取到javabean对象, 就是以前的entity/pojo对象数据

应用实例

1.com.zzw.web.requestParam.entity包下新建Pet

java 复制代码
public class Pet {
    private Integer id;
    private String name;

	//setter, getter, toString方法
}

2.同包下新建Master

java 复制代码
public class Master {
    private Integer id;
    private String name;
    private Pet pet;//对象的属性是另外一个对象[涉及到属性级联]
    
	//setter, getter, toString方法
}

3.修改VoteHandler.java, 增加方法 test03

java 复制代码
public class VoteHandler {
    /**
     * 演示如何获取到提交数据->封装成java对象
     * 说明
     * 1.方法的形参用对应的类型来指定即可, SpringMVC会自动的进行封装
     * 2.如果要自动地完成封装, 要求提交的数据, 参数名和对象的字段名保持一致
     * 3.如果属性是对象, 这里仍然是通过 字段名.字段名 比如Master [pet]
     *   , 即提交的数据 参数名 是 pet.id pet.name, 这就是级联操作
     * 4.如果提交的数据 的参数名和对象的字段名不匹配, 则对象的属性值就是null
     * @return
     */
    @RequestMapping(value = "/vote03")
    public String test03(Master master) {
        System.out.println("master=" + master);
        //返回结果
        return "success";
    }
}

4.修改request_parameter.jsp

html 复制代码
<%--解读
1.这是一个表单, 表单的数据对应Master对象
2.提交的数据参数名和对象的字段名一致即可
--%>
<h1>添加主人信息</h1>
<form action="vote/vote03" method="post">
    主人:<input type="text" name="id"/><br/>
    主人:<input type="text" name="name"/><br/>
    宠物名:<input type="text" name="pet.id"/><br/>
    宠物名:<input type="text" name="pet.name"/><br/>
    <input type="submit" value="添加主人和动物"/>
</form>

5.Postman测试

get方式提交
post方式提交

注意事项和细节

1.支持级联数据获取

2.表单的控件名称name需要和javabean对象名称呼应, 否则就是null

💞获取servlet api

说明

1.开发中, 我们可以需要使用到原生的servlet api

2.使用servlet api, 需要引入tomcat/lib下的servlet-api.jar

应用实例

1.修改VoteHandler.java, 增加方法 test04

java 复制代码
@RequestMapping("/vote")
@Controller
public class VoteHandler {
    /**
     * 使用servlet api, 来获取提交的数据
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/vote04")
    public String test04(HttpServletRequest request,
                         HttpServletResponse response) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username=" + username);
        System.out.println("password=" + password);
        //返回结果
        return "success";
    }
}

2.修改request_parameter.jsp

html 复制代码
<h1>演示 servlet api的使用</h1>
<form action="vote/vote04" method="post">
    用户名:<input type="text" name="username"/><br/>
    密 码:<input type="password" name="password"/><br/>
    <input type="submit" value="提交"/>
</form>

3.Postman测试

post方式提交

注意事项和细节

1.除了HttpServletRequest, HttpServletResponse其它对象还可以以这样的方式获取

2.HttpSession, java.security.Principal, InputStream, OutputStream, Reader, Writer

3.其中一些对象也可以通过 HttpServletRequest / HttpServletResponse对象获取, 比如Session对象, 既可以通过参数传入, 也可以通过request.getSession()获取, 效果一样, 推荐使用参数形式传入, 更加简单明了

java 复制代码
@RequestMapping("/vote")
@Controller
public class VoteHandler {
    /**
     * 使用servlet api, 来获取提交的数据
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/vote04")
    public String test04(HttpServletRequest request,
                         HttpServletResponse response,
                         HttpSession session2) {
        //获取到session
        //servlet的原生的方式
        HttpSession session = request.getSession();
        System.out.println("session=" + session);
        //注意: 通过参数传入的 session2 和 通过request.getSession()得到的 session对象是同一个
        System.out.println("session2=" + session2);
        //返回结果
        return "success";
    }
}

下一讲, 我们学习 SpringMVC系列六: 视图和视图解析器

相关推荐
没有bug.的程序员6 分钟前
Async Profiler:最精准的火焰图工具
java·jvm·spring·对象分配·async profiler
7哥♡ۣۖᝰꫛꫀꪝۣℋ18 分钟前
Spring WebMVC及常用注释
java·数据库·spring
谷哥的小弟1 小时前
Spring Framework源码解析——AnnotationAwareOrderComparator
java·后端·spring·源码
谷哥的小弟1 小时前
Spring Framework源码解析——StringUtils
java·后端·spring·源码
Java天梯之路1 小时前
Spring IOC 核心源码解析
java·spring·源码
雨中飘荡的记忆1 小时前
Spring Data JPA详解
java·spring
雨中飘荡的记忆1 小时前
Spring Security详解
java·spring
坐不住的爱码1 小时前
静态资源映射-spring整合
java·spring·状态模式
大佐不会说日语~2 小时前
基于Spring AI Alibaba的AI聊天系统中,流式输出暂停时出现重复插入问题的分析与解决
java·人工智能·spring
0和1的舞者2 小时前
API交互:前后端分离开发实战指南
java·spring·tomcat·web3·maven·springmvc·springweb