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