HttpServletRequest接口

关于WEB—INF目录

WEB—INF目录是受保护的,里面的文件不能通过路径来访问

所以HTML,css,js和image等图片是放到WEB—INF目录外面的


HttpServletResquest接口

HttpServletRequest的本质

HttpServletResquest是一个接口,全称是jakarta.servlet.http.HttpServletRequest

实现类是:

org.apache.catalina.connector.RequestFacade@21513029
org.apache.catalina.connector.ResponseFacade@2f96ca73

HttpServletRequest接口是Servlet规范中的一员,父接口是ServletRequest

是由Tomcat服务器实现的,java web程序员在开发的时候只需要关心HttpServletRequest的方法,这些方法有什么功能即可,不用管HttpServlrtRequest的具体实现类,只需要面向接口编程即可,这就是Servlet规范解耦合的一种体现。

HttpServletRequest封装的信息

HttpServletRequest对象是由Tomcat服务器(web服务器)负责创建的,封装了浏览器的请求信息

在用户发送请求的时候,遵循了HTTP协议,发送的是HTTP的请求协议,Tomcat将请求中的数据和信息全部解析出来封装到HttpServletRequest对象中,传给Java web的程序员。

所以,只要面向HttpServletRequest接口调相应的方法就能获取到请求头信息数据

HttpServletRequest中的常用的方法

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>user register</title>
</head>
<body>

  <h1>用户注册</h1>
  <form action="/HttpServletRequest/request" method="post">
      用户名:<input type="text" name="用户名"></br>
      密码:<input type="password" name="密码"></br>
      interest:
      smoke<input type="checkbox" name="爱好" value="抽烟">
      drink<input type="checkbox" name="爱好" value="喝酒">
      study<input type="checkbox" name="爱好" value="学习">
      </br>
      <input type="submit" vlue="注册">
  </form>

</body>
</html>

获取用户提交的数据:

这个是获取Map
String getParameter(String name);
这个是获取Map集合中所有的key
Map<String, String[]> getParameterMap();
根据key获取Map集合的value
Enumeration<String> getParameterNames();
或者value这个一维数组中的第一个元素,这个方法最常用
String[] getParameterValues(String name);
// 以上的四个方法和用户提交的数据有关系

在你前端的form表单提交了数据之后,你打算怎样存储这些数据,准备采用什么数据结构去存储数据

  • 前端提交的数据格式(前端提交的数据格式以字符串提交,后端获取的也是字符串

    用户名: yuluo
    密码: 082916
    爱好: 抽烟
    爱好: 喝酒
    爱好: 学习
    
  • 复选框会提交多个数据

  • 考虑采用map集合存储数据

    • key存储String

    • value存储String

    • 这种存储方式是不合理的,

      ———————————

      key value

      ————————————

      username yuluo

      password 082916

      爱好 抽烟

      爱好 喝酒

      爱好 学习

  • 如果采用以上的数据结构存储会发现key重复的时候value被覆盖, 存在弊端,爱好的数据会被覆盖掉

  • 所以采用Map<String, String[]>的方式存储数据

———————————

key                 value

————————————

username         {'yuluo'}

password		 {'082916'}

爱好				{'抽烟‘, ’喝酒‘, ’学习‘}
package indi.yuluo.javaweb.httpServletRequest;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @author: yuluo
 * @createTime: 2022/1/12 21:34
 * @File : RequestTextServlet.java
 * @Software : IntelliJ IDEA
 * @Description:
 */

public class RequestTextServlet extends HttpServlet {

/*    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.print(request + "</br>" + response);

    }*/

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        /*
        使用map集合获取前端数据
        username         {'yuluo'}
        password		 {'082916'}
        爱好				 {'抽烟‘, ’喝酒‘, ’学习‘}
         */
        Map<String, String[]> parameterMap = request.getParameterMap();
        // 遍历map集合
        Set<String> keys = parameterMap.keySet();
        Iterator<String> iterator = keys.iterator();
        while(iterator.hasNext()) {
            String key = iterator.next();
            //System.out.println(next);
            String[] values = parameterMap.get(key);
            System.out.println(key + " = " + values);
            /**
             * 输出的是一维数组的地址。需要遍历
             * 用户名 = [Ljava.lang.String;@3016c67a
             * 密码 = [Ljava.lang.String;@44230d8d
             * 爱好 = [Ljava.lang.String;@6b59a7bf
             */
            System.out.print(key + " = ");
            for (String value : values) {
                System.out.print(value);
            }
            System.out.println();
        }

        System.out.println("getParameterNames-----------------");

        /*
        通过这个方法可以获取到map集合中的所有key
         */
        Enumeration<String> parameterNames = request.getParameterNames();
        while(parameterNames.hasMoreElements()) {
            String s = parameterNames.nextElement();
            System.out.println(s);
        }

        System.out.println("getParameter------------------");

        /*
        getParameter(String name)获取的是String字符串
         */
        String username = request.getParameter("用户名");
        String password = request.getParameter("密码");
        // 在这里只能显示一个
        String habits = request.getParameter("爱好");

        System.out.println(username);
        System.out.println(password);
        System.out.println(habits);

        System.out.println("getParameterValues-----------------");

        String[] usernames = request.getParameterValues("用户名");
        String[] passwords = request.getParameterValues("密码");
        String[] interests = request.getParameterValues("爱好");

        for (String s : usernames) {
            System.out.println(s);
        }

        for (String s : passwords) {
            System.out.println(s);
        }

        for (String s : interests) {
            System.out.println(s);
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值