【06 请求(request) 学习笔记】

一、请求-request

1. 获取各种路径

在这里插入图片描述



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;

@WebServlet("/demo3")
public class ServletDemo3  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取虚拟目录名称 getContextPath();
        String contextPath = req.getContextPath();
        System.out.println("contextPath:"+contextPath);

        //2.获取Servlet映射路径 getServletPath
        String servletPath = req.getServletPath();
        System.out.println("getServletPath:"+servletPath);

        //3.获取访问者ip  getRemoteAddr
        String remoteAddr = req.getRemoteAddr();
        System.out.println("remoteAddr:"+remoteAddr);
        //4.获取请求消息数据
        String queryString = req.getQueryString();
        System.out.println("queryString:"+queryString);
        //5.获取统一资源标识符
        String requestURI = req.getRequestURI();
        System.out.println("requestURI:"+requestURI);
        //6.获取统一资源定位符
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("requestURL:"+requestURL);
    }

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

  • 可见:定位符就是全路径,标识符就是虚拟目录路径+请求资源路径
  • 标识符的范围比定位符更广 URI>URL范围
    在这里插入图片描述

2. 获取请求头信息

在这里插入图片描述


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.Enumeration;

@WebServlet("/demo4")
public class ServletDemo4  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.根据请求头名称获取一个值
        String connection = req.getHeader("connection");
        System.out.println("connection:"+connection);
        System.out.println("----------------------");
        //2.根据请求头名称获取多个值
        Enumeration<String> headers = req.getHeaders("Accept-Encoding");
        while (headers.hasMoreElements()){
            String s = headers.nextElement();
            System.out.println(s);
        }
        System.out.println("----------------------");
        //3. 获取所有请求头名称
        Enumeration<String> headerNames = req.getHeaderNames();
        while (headerNames.hasMoreElements()){
            String name = headerNames.nextElement();
            String value = req.getHeader(name);
            System.out.println(name+":"+value);
        }
    }

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

在这里插入图片描述

3. 获取请求参数信息

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
<form action="/jou/demo5" method="get" autocomplete="off">
  姓名<input type="text" name="username"><br/>
  密码<input type="text" name="password"><br/>
  爱好<input type="checkbox" name="hobby" value="study"> 学习
      <input type="checkbox" name="hobby" value="game">  游戏
  <br/>
  <button type="submit"> 注册</button>



</form>

</body>
</html>

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.Enumeration;
import java.util.Map;


@WebServlet("/demo5")
public class ServletDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 根据名称获取数据
        String username = req.getParameter("username");
        System.out.println("username:"+username);
        String password = req.getParameter("password");
        System.out.println("password:"+password);
        System.out.println("---------------------");
        //2.根据名称获取所有数据
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println("hobby:"+hobby);
        }
        System.out.println("---------------------");
        //3.获取所有名称
        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            String value = req.getParameter(name);
            System.out.println(name+":"+value);
        }

        System.out.println("----------------");
        //4.获取所有参数的键值对
        Map<String, String[]> map = req.getParameterMap();
        for (String key : map.keySet()) {
            String[] values = map.get(key);
            System.out.print(key+":");
            for (String value : values) {
                System.out.print(value+"  ");
            }
            System.out.println();
        }

    }

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

在这里插入图片描述

4. 获取参数手动封装对象

在这里插入图片描述

4.1 手动封装方式



import java.util.Arrays;

public class Student {
    private String username;
    private String password;
    private String [] hobby;

    public Student() {
    }

    public Student(String username, String password, String[] hobby) {
        this.username = username;
        this.password = password;
        this.hobby = hobby;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Student{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", hobby=" + Arrays.toString(hobby) +
                '}';
    }
}

import com.jou.bean.Student;

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;


/**
 * 手动封装
 */

@WebServlet("/test1")
public class ServletTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 根据所有数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String [] hobby=req.getParameterValues("hobby");

        //2.封装学生对象
        Student stu=new Student(username,password,hobby);

        //3.输出对象
        System.out.println(stu);



    }

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

在这里插入图片描述

4.2 反射封装方式



import com.jou.bean.Student;

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.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Map;


/**
 * 反射方式封装
 */

@WebServlet("/test1")
public class ServletTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 获取所有的数据
        Map<String, String[]> map = req.getParameterMap();

        //2.封装学生对象
        Student stu=new Student();
        //2.1遍历集合
        for (String key:map.keySet()){
            String[] value = map.get(key);
            //2.2 获取Student对象属性描述器
            try {
                PropertyDescriptor pd=new PropertyDescriptor(key,stu.getClass());
                //2.3.获取对象的setXXX方法
                Method writeMethod = pd.getWriteMethod();
                //2.4执行方法
                if (value.length>1){
                    writeMethod.invoke(stu,(Object) value);
                }else {
                    writeMethod.invoke(stu,value);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //3.输出对象
        System.out.println(stu);



    }

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

在这里插入图片描述

4.3 工具类封装方式

下载beanUtils jar包
在这里插入图片描述

import com.jou.bean.Student;
import org.apache.catalina.mbeans.MBeanUtils;
import org.apache.commons.beanutils.BeanUtils;

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.Map;


/**
 * 工具类方式方式封装
 */

@WebServlet("/test1")
public class ServletTest1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 获取所有的数据
        Map<String, String[]> map = req.getParameterMap();
        //2.封装学生对象
        Student stu=new Student();
        try {
            BeanUtils.populate(stu,map);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println(stu);


    }

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

成功:
在这里插入图片描述

5. 流对象获取请求信息

在这里插入图片描述

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet("/test2")
public class Demo1 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

        //字符流
//        BufferedReader br = req.getReader();
//        String line;
//        while ((line = br.readLine()) != null) {
//            System.out.println(line);
//        }

        //字节流
        ServletInputStream is=req.getInputStream();
        byte []arr=new byte[1024];
        int len;
        while ((len=is.read(arr))!=-1){
            System.out.println(new String(arr,0,len));
        }
    }

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



在这里插入图片描述

6. 处理中文乱码问题

在这里插入图片描述


import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/test2")
public class ServletDemo02 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        req.setCharacterEncoding("UTF-8");
        String username = req.getParameter("username");
        System.out.println(username);


    }

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

6. 请求域

在这里插入图片描述

6.1 请求转发

使用场景:A完不成递交给B来完成
在这里插入图片描述


import javax.servlet.RequestDispatcher;
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;
/**
 * 请求转发
 */

@WebServlet("/test3")
public class ServletDemo03 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        //设置共享数据
        req.setAttribute("encoding","gbk");

        //获得请求调度对象
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("/test4");
        //实现转发功能
        requestDispatcher.forward(req,resp);


    }

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


}

import javax.servlet.RequestDispatcher;
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;

/**
 * 请求转发
 */

@WebServlet("/test4")
public class ServletDemo04 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {


        //获取共享数据
        Object encoding = req.getAttribute("encoding");
        System.out.println(encoding);
        System.out.println("test4 running");

    }

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


}

在这里插入图片描述

7 请求包含

使用场景:A实现一半 B实现一半,A去包含B,一起响应
在这里插入图片描述


import javax.servlet.RequestDispatcher;
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;

/**
 * 请求包含
 */

@WebServlet("/test5")
public class ServletDemo05 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

        System.out.println("test5 running");
        //获取请求调度
        RequestDispatcher rq = req.getRequestDispatcher("/test6");
        //实现包含功能
        rq.include(req,resp);

    }

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


import javax.servlet.RequestDispatcher;
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;

/**
 * 请求包含
 */

@WebServlet("/test6")
public class ServletDemo06 extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

        System.out.println("test6 running");


    }

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


}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝阔落的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值