request操作请求体

1.操作请求体

1.1获得请求参数

法名

  • String getParameter(String name)
    获得指定参数名对应的值。如果没有则返回null,
    如果有多个获得第一个。 例 如:username=jack
  • String[] getParameterValues(String name)
    获得指定参数名对应的所有的值。此方法专业为复选框提供的。 例如:hobby=抽烟&hobby=喝酒&hobby=敲代码
  • Map<String,String[]> getParameterMap()
    获得所有的请求参数。key为参数名,value为key对应的所有的值。 key:username value: zhangsan

2.页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="request03" method="post">

    用户名:<input type="text" name="username"/><br/>
    密码:<input type="password" name="password"/><br/>
    爱好:
    <input type="checkbox" name="hobby" value="basketball"/>篮球
    <input type="checkbox" name="hobby" value="football"/>足球
    <input type="checkbox" name="hobby" value="film"/>看电影
    <input type="checkbox" name="hobby" value="code"/>敲代码<br/>
    <input type="submit" value="注册">

</form>
<!--表示表单中的数据以"post"方法传递。-->
<!--Form提供了两种数据传输的方式——get和post。虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响。虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的。-->
<!--Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:-->
<!--1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。-->
<!--2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。-->
<!--3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。-->
<!--4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。-->
<!--5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。-->
<!--6、Get是Form的默认方法。-->
<!--使用Post传输的数据,可以通过设置编码的方式正确转化中文;而Get传输的数据却没有变化。-->

</body>
</html>

3.请求代码

package com.itheima.操作请求体;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;


@WebServlet("/request03")
public class request03 extends HttpServlet {
  @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取请求体‘
        // getParameter 只能获取到一个值。
      //处理乱码
      req.setCharacterEncoding("utf-8");
      resp.setContentType("text/html; charset=UTF-8");

      System.out.println(req.getParameter("username"));
      System.out.println(req.getParameter("password"));
      System.out.println(req.getParameter("hobby"));
      //爱好有多个值,所以需要这么获取!
      String[] hobbies = req.getParameterValues("hobby");
      System.out.println("hobby="+ Arrays.toString(hobbies));
      //=========================================================
      System.out.println("===========获取所有的参数=============");
     //key : 参数名字 , value :参数的值。
      Map<String, String[]> parameterMap = req.getParameterMap();
      for(String key: parameterMap.keySet()){
          String[] values = parameterMap.get(key);
          System.out.println(key + "=" + Arrays.toString(values));



      }


  }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

4.页面图片

在这里插入图片描述

5.测试结果

在这里插入图片描述

6.小结

  1. 获得请求参数
    • 获得一个值的情况 getParameter(String name);
    • 获得多个值的情况 getParameterValues(String name);
    • 获得所有key和值 getParameterMap();
  2. 乱码
    • 为什么出现乱码?
      编码和解码不一致, 浏览器传递数据采用utf-8 tomcat 解码数据iso8859-1 ,不支持中文
    • 请求乱码解决
      request.setCharacterEncoding(“utf-8”);
  3. 使用BeanUtils封装
    • 如果请求参数有多个需要封装到JavaBean里面, 建议先获得Map, 再使用BeanUtils封装到JavaBean对象
      注意: JavaBean属性需要和Map的key一致 说白了也就是JavaBean属性需要和表单的name一致
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值