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系列六: 视图和视图解析器

相关推荐
计算机毕设指导628 分钟前
基于Springboot华强北商城二手手机管理系统【附源码】
java·开发语言·spring boot·后端·mysql·spring·intellij idea
岁月变迁呀2 小时前
长轮询DeferredResult原理
java·spring
一只大马猴呀4 小时前
Spring IOC 和 AOP的学习笔记
笔记·学习·spring
AI人H哥会Java12 小时前
【Spring】Spring的模块架构与生态圈—数据访问与集成(JDBC、ORM、Transactions)
java·开发语言·后端·spring
计算机毕设指导618 小时前
基于Springboot林业产品推荐系统【附源码】
java·开发语言·spring boot·后端·mysql·spring·intellij-idea
nie666888820 小时前
springmvc的拦截器,全局异常处理和文件上传
spring·mvc
zfoo-framework1 天前
【SpringBoot中SpringMVC服务之处理post请求】
java·spring boot·spring
ThetaarSofVenice1 天前
【Spring框架 三】
java·后端·spring
武子康1 天前
大数据-255 离线数仓 - Atlas 数据仓库元数据管理 数据血缘关系 元数据
大数据·数据仓库·hive·hadoop·spring
柔弱女子爱java1 天前
spring专题笔记(五):依赖注入--p命名空间注入、c命名空间注入、util命名空间
java·笔记·后端·spring·架构·系统架构