Javaweb - Request获取请求数据、Reques获取请求参数

Request(请求)&Response(响应)

请添加图片描述

测试案例

测试类

ServletDemo14.java

package com.taotao.web;

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

@SuppressWarnings({"all"})
public class ServletDemo14 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用reguest对象 获取请求数据
        String name = req.getParameter("name"); //url?name=zhangsan

        //使用response对象 设置响应数据
        resp.setHeader("content-type","text/html;charset=utf-8");
        resp.getWriter().write("<h1>" + name + ",欢迎你!</h1>");

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post...");
    }
}

运行测试

请添加图片描述

Request继承体系

继承体系图

请添加图片描述

Request获取请求数据

  • 请求数据分为3部分:

请求行

请添加图片描述

  • String getMethod():获取请求方式
  • String getContextPath():获取虚拟目录(项目访问路径)
  • StringBuffer getRequesURL():获取URL(统一资源定位符)
  • String getRequestURI():获取URL(统一资源标识符)
  • String getQueryString():获取请求参数(GET方式)
方法案例演示
package com.taotao.web;

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;
@SuppressWarnings({"all"})
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //- String getMethod():获取请求方式
        String method = req.getMethod();
        System.out.println(method); //GET

        //- String getContextPath():获取虚拟目录(项目访问路径)
        String contextPath = req.getContextPath();
        System.out.println(contextPath);    // tomcat_demo02

        //- StringBuffer getRequesURL():获取URL(统一资源定位符)
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL.toString());      //http://localhost:8080/tomcat_demo02/req1

        //- String getRequestURI():获取URL(统一资源标识符)
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);             ///tomcat_demo02/req1

        //- String getQueryString():获取请求参数(GET方式)
        String queryString = req.getQueryString();
        System.out.println(queryString);           //问号后面的参数
    }

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

运行展示

请添加图片描述

请求头

请添加图片描述

  • String getHeader(String name):根据请求头名称获取值
案例测试

请添加图片描述

请求体

请添加图片描述

  • ServletInputStream getInputStream():获取字节输入流
  • BufferedReader getReader():获取字符输入流
案例测试
写一个测试网页

请添加图片描述

doPost()方法

请添加图片描述

运行测试

请添加图片描述

请添加图片描述

Request获取请求参数

从用户输入获取请求参数,返回给服务器端

测试类RequestDemo2

package com.taotao.web;

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;

@SuppressWarnings({"all"})
@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");

        //1.获取所有参数的Map集合
        Map<String, String[]> map = req.getParameterMap();
        for (String key:map.keySet()){
            System.out.println(key + ":");

            //获取值
            String[] values = map.get(key);
            for (String value: values) {
                System.out.print(value + " ");
            }
            System.out.println();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //我们调用doGet方法,使用相同的逻辑
        this.doGet(req, resp);
    }
}

表单网页链接

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!--通过post方式提交-->
<form action="/tomcat_demo02/req2" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit">
</form>
</body>
</html>
运行测试

请添加图片描述

点提交后

请添加图片描述

getParameterValues()方法

package com.taotao.web;

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;

@SuppressWarnings({"all"})
@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");

        //1.获取所有参数的Map集合
        Map<String, String[]> map = req.getParameterMap();
        for (String key:map.keySet()){
            System.out.println(key + ":");

            //获取值
            String[] values = map.get(key);
            for (String value: values) {
                System.out.print(value + " ");
            }
            System.out.println();
        }

        //2.根据key获取参数值,数组
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby: hobbies){
            System.out.println(hobby);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //我们调用doGet方法,使用相同的逻辑
        this.doGet(req, resp);
    }
}

测试运行

请添加图片描述

请添加图片描述

getParameter()方法

        System.out.println("------------------");
        //3.根据key 获取单个参数值
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);
运行测试

请添加图片描述

请添加图片描述

表单html请求方式改为Post测试

请添加图片描述

直接方法调用测试

在doPost()方法中调用doGet()

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //我们调用doGet方法,使用相同的逻辑
        this.doGet(req, resp);
    }
测试结果

get与post结果相同,不再演示

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您的问题是如何获取referer中的请求参数,以及如何通过request获取referer请求头实现防盗链。 首先,referer是HTTP请求头中的一个字段,用于表示当前请求是从哪个页面发起的。如果当前请求是从某个页面跳转过来的,则referer中会包含跳转页面的URL,如果没有则为null。 如果您想要获取referer中的请求参数,可以使用Java中的URL类来解析referer中的URL,然后通过其getQuery方法获取请求参数。以下是一个简单的示例代码: ```java String referer = request.getHeader("referer"); if (referer != null) { URL url = new URL(referer); String query = url.getQuery(); // 处理请求参数 } ``` 另外,您提到了防盗链的问题。防盗链是指通过某些手段,禁止其他网站直接链接到您的资源,以保护资源的安全和版权。其中一种常见的防盗链方式就是通过判断referer请求头来实现。 具体实现方式是在服务器端判断referer请求头中的URL是否属于当前网站的域名范围内,如果不属于则返回错误信息。 以下是一个简单的示例代码: ```java String referer = request.getHeader("referer"); if (referer != null && !referer.startsWith("http://www.yourdomain.com")) { // 不允许访问 response.setStatus(403); return; } // 允许访问 ``` 注意,这种方式虽然可以简单地防止盗链,但是referer请求头是可以伪造的,因此并不是绝对可靠的防盗链方式。需要根据具体情况进行综合考虑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鬼鬼骑士

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

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

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

打赏作者

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

抵扣说明:

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

余额充值