SpringMVC详解如何映射请求数据

目录
  • 1.获取参数值
    • 1.说明
    • 2.应用实例
    • 3.获取http请求消息头
  • 2.获取 javabean 形式的数据
    • 1.使用场景说明
    • 2.应用实例
    • 3.使用注意事项
  • 3.获取Servlet API
    • 1.应用实例
    • 2.使用注意事项

1.获取参数值

1.说明

  • 开发中,如何获取到 http://xxx/url?参数名=参数值&参数名=参数值
  • 这个使用的非常广泛,我们看一个案例

2.应用实例

1.创建\web\requestparam\VoteHandler.java

@Controller
@RequestMapping(value = "/vote")
public class VoteHandler {
     /**
     *  @RequestParam(value="name", required=false)
     * 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")String userName){
        System.out.println("userName = "+userName);
        return "success";
    }
}

2.创建\web\request_parameter.jsp

<h2>获取到超链接参数值</h2>
<hr/>
<a href="vote/vote01?name=hsp">获取超链接的参数</a>

3.获取http请求消息头

说明:

  • 开发中,如何获取到 http 请求的消息头信息
  • 使用较少

应用实例

修改 VoteHandler.java, 增加方法

@RequestMapping(value = "/vote02")
public String test02(@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, 增加代码

<h1>获取到消息头</h1>
<hr>
<a href="vote/vote02">获取http消息头信息</a>

2.获取 javabean 形式的数据

1.使用场景说明

开发中,如何获取到 javabean/entity/pojo 对象数据

2.应用实例

1.创建Pet.java

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 + '\'' +
                '}';
    }
}

2.创建Master.java

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 +
                '}';
    }
}

3.修改VoteHandler.java

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

3.使用注意事项

  • 支持级联数据获取
  • 表单的控件名称 name 需要和 javabean 对象字段对应, 否则就是 null
  • SpringMVC接收参数中文乱码解决方案

修改web.xml

<!--在使用springmvc过程中接收客户端的请求参数时有时会出现中文乱码,这是因为springmvc并没有对象请求参数进行编码控制,如果需要控制需要自行指定-->
<filter>
    <filter-name>charset</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
</init-param>
</filter>

3.获取Servlet API

1.应用实例

说明

  • 开发中, 我们可能需要使用到原生的 servlet api ,看看如何获取
  • 使用 servlet api , 需要引入 tomcat/lib 下的 servlet-api.jar
/**
 * 使用servlet api, 来获取提交的数据
 *
 * @return
 */
@RequestMapping(value = "/vote04")
public String test04(HttpServletRequest request,
                     HttpServletResponse response,
                     HttpSession hs) {
    //获取到session
    //servlet原生的方式
    HttpSession session = request.getSession();
    System.out.println("session=" + session);
    //注意:通过参数传入的 hs 和 通request.getSession() 得到的对象是
    //同一个
    System.out.println("hs= " + hs);
    String username = request.getParameter("username");
    String pwd = request.getParameter("pwd");
    System.out.println("username= " + username);
    System.out.println("pwd= " + pwd);
    //返回结果
    return "success";
}
<hr>
<h1>演示 servlet api的使用 </h1>
<form action="vote/vote04" method="post">
    用户名:<input type="text" name="username"><br>
    密 码:<input type="password" name="pwd"><br>
    <input type="submit" value="添加用户">
</form>

2.使用注意事项

  • 除了 HttpServletRequest, HttpServletResponse 还可以其它对象也可以这样的形式获取
  • HttpSession、java.security.Principal,InputStream,OutputStream,Reader,Writer
  • 其中一些对象也可以通过 HttpServletRequest / HttpServletResponse 对象获取,比如 Session 对象 ,既可以通过参数传入,也以通过 request.getSession() 获取,效果一样,推 荐使用参数形式传入,更加简单明了

到此这篇关于SpringMVC详解如何映射请求数据的文章就介绍到这了,更多相关SpringMVC映射内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 浅谈SpringMVC请求映射handler源码解读

    请求映射源码 首先看一张请求完整流转图(这里感谢博客园上这位大神的图,博客地址我忘记了): 前台发送给后台的访问请求是如何找到对应的控制器映射并执行后续的后台操作呢,其核心为DispatcherServlet.java与HandlerMapper.在spring boot初始化的时候,将会加载所有的请求与对应的处理器映射为HandlerMapper组件.我们可以在springMVC的自动配置类中找到对应的Bean. @Bean @Primary @Override public RequestM

  • springmvc path请求映射到bean 方法的流程

    一.加载注册流程 1.在dispatch-servlet.xml中配置< mvc:annotation-driven/>,在控制器的方法上加入@RequestMapping注解即可. 2.mvc:annotation-driven的解析流程 会调用到自定义元素解析器的AnnotationDrivenBeanDefinitionParser.parse方法. 3.org.springframework.web.servlet.mvc.method.annotation.RequestMappin

  • 一文带你揭秘SpringMvc参数值映射

    目录 前言 一.处理过程的抽象 二.常见传参类型 1.自定义对象类型 2.@RequestParam注解参数 3.@RequestBody注解参数 4.简单类型,无@RequestParam注解 总结 前言 我们平时开发的接口参数类型,有简单类型例如Long,String,也有JSON格式的,还有自定义对象类型.想一想,如果让我们自己开发一套参数值映射代码,还是挺复杂,一是需要处理的参数类型比较多,还有就是会有一些复杂的场景,比如对象的多层嵌套.今天我将从处理过程的抽象,常见传参类型两个大的方面

  • Springmvc异常映射2种实现方法

    请求出现 想要跳转到错误页面 就需要对springmvc进行配置 方法1:基于xml的配置 springmvc.xml配置类 <!--配置基于xml的异常映射--> <bean id="simpleMappingExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!--配置异常和对应页面的映

  • springmvc url处理映射的三种方式集合

    目录 一.SpringMVC简介 二.工作流程与介绍 三.代码截图 以下组件通常使用框架提供实现: 1.DispatcherServlet:前端控制器 2.HandlerMapping:处理器映射器 3.Handler:处理器 4.HandlAdapter:处理器适配器 5. ViewResolver:视图解析器 6.View:视图 四.适配器作用 一.SpringMVC简介 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模

  • springmvc—handlermapping三种映射方式

    目录 springmvc-handlermapping三种映射 1.BeanNameUrlHandlerMapping(默认) 2.SimplerUrlHandlerMapping 3.contraollerClassNameHandlerMapping 对handlermapping的理解 例如 springmvc-handlermapping三种映射 handlermapping负责映射中央处理器转发给controller的映射策略,简单说就是控制中央处理器的请求触发哪一个controlle

  • SpringMVC详解如何映射请求数据

    目录 1.获取参数值 1.说明 2.应用实例 3.获取http请求消息头 2.获取 javabean 形式的数据 1.使用场景说明 2.应用实例 3.使用注意事项 3.获取Servlet API 1.应用实例 2.使用注意事项 1.获取参数值 1.说明 开发中,如何获取到 http://xxx/url?参数名=参数值&参数名=参数值 这个使用的非常广泛,我们看一个案例 2.应用实例 1.创建\web\requestparam\VoteHandler.java @Controller @Reque

  • 详解pandas映射与数据转换

    在 pandas 中提供了利用映射关系来实现某些操作的函数,具体如下: replace() 函数:替换元素: map() 函数:新建一列: rename() 函数:替换索引. 一.replace() 用映射替换元素 在数据处理时,经常会遇到需要将数据结构中原来的元素根据实际需求替换成新元素的情况.要想用新元素替换原来元素,就需要定义一组映射关系.在映射关系中,将旧元素作为键,新元素作为值. 例如,创建字典 fruits 用于指明水果标识和水果名称的映射关系. fruits={101:'orang

  • 详解Golang实现请求限流的几种办法

    简单的并发控制 利用 channel 的缓冲设定,我们就可以来实现并发的限制.我们只要在执行并发的同时,往一个带有缓冲的 channel 里写入点东西(随便写啥,内容不重要).让并发的 goroutine在执行完成后把这个 channel 里的东西给读走.这样整个并发的数量就讲控制在这个 channel的缓冲区大小上. 比如我们可以用一个 bool 类型的带缓冲 channel 作为并发限制的计数器. chLimit := make(chan bool, 1) 然后在并发执行的地方,每创建一个新

  • 详解Java中JSON数据的生成与解析

    一.什么是JSON JSON: JavaScript Object Notation JS对象简谱,是一种类似于XML的语言.相比于XML,它更小.更快.更易解析.主要用于项目前端和Server的网络数据传输. 二.JSON的语法 对象 一个对象,由一个大括号表示{},{}中通过一个个的键值对来描述对象的属性 注意: 键与值之间使用冒号连接,多个键值对之间使用逗号分隔. 键值对的键,应使用引号引住(通常Java解析时,键不使用引号会报错,而JS能正确解析):键值对的值,可以是JS中的任意数据类型

  • 详解Mysql如何实现数据同步到Elasticsearch

    目录 一.同步原理 二.logstash-input-jdbc 三.go-mysql-elasticsearch 四.elasticsearch-jdbc 五.logstash-input-jdbc实现同步 六.go-mysql-elasticsearch实现同步 七.elasticsearch-jdbc实现同步 一.同步原理 基于Mysql的binlog日志订阅:binlog日志是Mysql用来记录数据实时的变化 Mysql数据同步到ES中分为两种,分别是全量同步和增量同步 全量同步表示第一次

  • 详解Swoole TCP流数据边界问题解决方案

    目录 1. 数据发送过程 2. 什么是数据边界 2.1 代码演示 3.EOF 解决方案 3.1 open_eof_check 3.2 open_eof_split 3.3 open_eof_check 和 open_eof_split 差异 4. 固定包头 + 包体解决方案 5. 总结 6. 扩展知识 6.1 字节序 1. 数据发送过程 首先由客户端将数据发往缓冲区 (服务端并不是直接收到的), 对于客户端来说,这次的数据即是发送成功了, 对于服务端是否真正的收到他是不知道的, 然后再由服务端从

  • 微信小程序 详解Page中data数据操作和函数调用

    微信小程序 详解Page中data数据操作和函数调用 Page() 函数用来注册一个页面.接受一个 object 参数,其指定页面的初始数据.生命周期函数.事件处理函数等. //index.js <pre code_snippet_id="2049407" snippet_file_name="blog_20161214_1_1145312" name="code" class="javascript">Page(

  • 实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍Android文件存储数据方式. 1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法. 创建的存储文件保存在/data/data/<package name>/files文件夹下. 2.操作. 保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式. 读取文件内容:通

  • 详解数据库中跨库数据表的运算

    1. 简单合并(FROM) 所谓跨库数据表,是指逻辑上同一张数据表被分别存储在不同数据库中.其原因有可能是因为数据量太大,放在一个数据库难以处理,也可能在业务上就需要将生产库和历史库分开.而不同的数据库,可能只是部署在不同的机器上的同种数据库,也可能是连类型都不同的数据库系统. 在面对跨库数据表,特别是数据库类型都不相同的情况时,数据库自带的工具往往就力所不及了,一般都需要寻找能够很好地支持多数据源类型的第三方工具,而集算器,可以说是其中的佼佼者了.下面,我们就针对几种常见的跨库混合运算情况详细

  • 详解Django中views数据查询使用locals()函数进行优化

    优化场景 利用视图函数(views)查询数据之后可以通过上下文context.字典.列表等方式将数据传递给HTML模板,由template引擎接收数据并完成解析.但是通过context传递数据可能就存在在不同的视图函数中使用重复的查询语句,所以可以通过将重复查询语句设置全局变量,配合locals()函数进行数据查询与传递. 优化前 def index(request): threatname = '威胁情报展示' url = 'www.testtip.com' allthreat = Threa

随机推荐