Request

作者: 丫甘九 | 来源:发表于2019-04-03 21:49 被阅读0次

Request

封装了客户端所有的请求信息,服务器创建了request,把它当成一个塑料袋来用,把所有请求数据往里面一塞,就给了servlet,servlet的doGet、doPost方法都会得到她

请求行
请求头
空行
请求体(GET没体)
回忆一下http协议,请求协议中的数据都可以通过request对象来获取

获取常用信息

获取客户端ip
request.getRemoteAddr();
请求
request.getMethod();
可能是post也可能是Get

package baoming;

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

public class EServlet extends HttpServlet {
    /*演示,获取客户端的ip地址,获取请求方式,获取User-Agent,得到
客户端的信息,(操作系统浏览器)*/

    public  void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*获取客户端ip地址*/
        String addr = request.getRemoteAddr();
        System.out.println("ip"+addr);
        /*获取请求方式*/
        System.out.println("请求方式"+request.getMethod());
        /*获取名为User-Agent的请求头*/
        String userAgent = request.getHeader("User-Agent");
        System.out.println(userAgent);
    }
}

获取http请求头

request.getHeader(String name);
适用于单值头
request.getIntHeader("aa");
适用于单值int类型的请求头
request.getDateHeader("aa");
适用于单值毫秒类型的请求头
request.getHeaders("aa");
适用于多值请求头

获取请求URL

http://localhost:8080/day10_2/AServlet?username=xxx&password=yyy

request.getScheme();
获取协议 http
request.getServerName();
获取服务器名 localhost
request.getServerPort();
获取服务器端口 8080
request.getContextPath();
获取项目名 /day10_2
request.getServletPath();
获取Servlet路径 /AServlet
request.getQueryString();
获取参数部分,即问号后面的部分 username=xxx&password=yyy
request.getRequestURI();
获取请求URI,等于项目名+Servlet路径 /day10_2/AServlet
request.getRequestURI();
获取请求URL,等于不包含参数的整个请求路径 http://localhost:8080/day10_2/AServlet

 response.getWriter().print(request.getScheme()+"<br/>");
/*获取协议*/
 response.getWriter().print(request.getServerName()+"<br/>");
/*获取服务器名*/
 response.getWriter().print( request.getServerPort()+"<br/>");
/*获取服务器端口*/
 response.getWriter().print(request.getContextPath()+"<br/>");
/*获取项目名*/
 response.getWriter().print(request.getServletPath()+"<br/>");
/*获取Servlet路径*/
 response.getWriter().print(request.getQueryString()+"<br/>");
/*获取参数部分,即问号后面的部分*/
 response.getWriter().print(request.getRequestURI()+"<br/>");
/*获取请求URI,等于项目名+Servlet路径*/
 response.getWriter().print(request.getRequestURI()+"<br/>");
/*获取请求URL,等于不包含参数的整个请求路径*/
image.png

使用refere请求头完成防盗链

package baoming;

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

public class EServlet extends HttpServlet {
/*使用Referer请求头,来防盗链*/
    public  void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String referer = request.getHeader("Referer");
        System.out.println(referer);
        if(referer==null||!referer.contains("localhost")){
            request.sendRedirect("www.baidi.com");
        }
        else {
            System.out.println("hello");
        }

    }
}

获取请求参数

  • 获取请求参数,请求参数是由客户端发送给服务器的,有可能是在请求体中(Post),也有可能是在URL之后,(GET)
  • 请求参数,有一个参数一个值的,也有一个参数多个值得,

String getParameter(String name):获取指定名称的请求参数值
String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数
Enumeration<String>getParameterNames();获取所有请求参数名称
Map<String String[]> getParameterMap();获取所有请求参数,其中key为参数名,value为参数值
案例
超链接参数,表单参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>测试请求参数</h1>
<a href="">点击这里</a>
<hr/>
<form action="/day10/EServlet?xxx=XXX&yyy=YYY" method="post">
    用户名:<input type="text" name="username"/><br>
    密码:<input type="password" name="password"/><br>
    爱好:<input type="checkbox" name="hobby" value="cf"/>
    <input type="checkbox" name="hobby" value="sj"/>
    <input type="checkbox" name="hobby" value="ddm"/>
    <br/>
    <input type="submit" value="提交">
</form>
</body>
</html>
package baoming;

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

public class EServlet extends HttpServlet {
    public  void doGet(HttpServletRequest request, HttpServletResponse response)
    {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobby = request.getParameterValues("hobby");
        System.out.println(username+","+password+","+ Arrays.toString(hobby));

        /*测试获取所有请求数据的名称*/
        Enumeration names = request.getHeaderNames();
        while (names.hasMoreElements()){
            System.out.println(names.nextElement());
        }

        /*获取所有请求参数,封装到Map中*/
        Map<String,String[]> map = request.getParameterMap();
       for (String anme : map.keySet()){
           String[] values = map.get(name);
           System.out.println(name+"="+Arrays.toString(values));
       }
    }
}

相关文章

网友评论

      本文标题:Request

      本文链接:https://www.haomeiwen.com/subject/auqtiqtx.html