zoukankan      html  css  js  c++  java
  • Request请求的应用

    1.通过request获得请求行

    获得客户端的请求方式:String getMethod()

    获得请求的资源:

    String getRequestURI()

     

    StringBuffer getRequestURL()

     

    String getContextPath() ---web应用的名称

    String getQueryString() ---- get提交url地址后的参数字符串

    注意:request获得客户机(客户端)的一些信息

    request.getRemoteAddr() --- 获得访问的客户端IP地址

     
     1 //获得请求方式
     2         String Method=request.getMethod();
     3         System.out.println("方式"+Method);
     4         //获得请求资源相关内容
     5         String requestURI=request.getRequestURI();
     6         System.out.println("uri:"+requestURI);
     7         StringBuffer requestURL =request.getRequestURL();
     8         System.out.println("url:"+requestURL);
     9         //获得WEB应用名称
    10         String contextPath=request.getContextPath();
    11         System.out.println("WEB应用名称"+contextPath);
    12         //地址后的参数字符串
    13         String queryString=request.getQueryString();
    14         System.out.println(queryString);
    15         //获得访问者的IP地址
    16         String remoteAddr=request.getRemoteAddr();
    17         System.out.println("ip:"+remoteAddr);

    2.通过request获得请求头

    1)long getDateHeader(String name)

    2)String getHeader(String name)

    3)Enumeration getHeaderNames()

    4)Enumeration getHeaders(String name)

    5)int getIntHeader(String name)

    1 //获得指定的头
    2         String header=request.getHeader("User-Agent");
    3         System.out.println(header);
    4         //2.获得所有头的信息
    5         Enumeration<String> headerNames=request.getHeaderNames();
    6         while(headerNames.hasMoreElements()) {  //判断是否还有更多
    7             String headerName=headerNames.nextElement();
    8             String headerValue=request.getHeader(headerName);//通过名获取值
    9             System.out.println(headerName+"   "+headerValue);

    注意:referer头的作用:执行此次访问的来源做防盗链

    防止其他网站盗用自家网站信息

    //简单的一个获取referer头的网页 
    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 </head> 7 <body> 8 <a href="/WEB4/referer">访问HeaderServlet资源</a> 14 </body> 15 </html>
    String header =request.getHeader("referer"); 
    //判断访问的地址是否为该地址 if(header!=null && header.startsWith("http://localhost")) { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("啦啦啦啦啦啦啦啦"); }else { System.out.println("fsf"); }

     3.通过request获得请求体

    1)String getParameter(String name); 

    2)String[] getParameterValues(String name);

    3)Enumeration getParameterNames();

    4)Map<String,String[]> getParameterMap();

    注意:get请求方式的请求参数 上述的方法一样可以获得;

    解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

    解决get提交的方式的乱码:parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

    <form action="/WEB4/content" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="passworld"><br>
    <input type="checkbox" name="hobby" value="zq">足球
    <input type="checkbox" name="hobby" value="lq">篮球
    <input type="checkbox" name="hobby" value="pq">乒乓球<br>
    <input type="submit" value="提交">
    </form>
     1         //获得单个表单值
     2         String username=request.getParameter("username");
     3         System.out.println(username);
     4         String password =request.getParameter("passworld");
     5         System.out.println(password);
     6         System.out.println("-------------------");
     7         //2.获得多个表单的值
     8         String[] hobbys = request.getParameterValues("hobby");
     9         for(String hobby:hobbys) {
    10             System.out.println(hobby);    
    11         }
    12         System.out.println("-------------------");
    13         //3.获得所有请求参数名称
    14         Enumeration<String> parameterNames = request.getParameterNames();
    15         while(parameterNames.hasMoreElements()) {
    16             System.out.println(parameterNames.nextElement());
    17         }
    18         System.out.println("-------------------");
    19         //4.获得所有的参数,参数封装到Map<String,String[]>
    20         Map<String, String[]> parameterMap = request.getParameterMap();
    21         for(Map.Entry<String, String[]> entry:parameterMap.entrySet()) {
    22             System.out.println(entry.getKey());
    23             for(String str:entry.getValue()) {
    24                 System.out.println(str);
    25             }
    26             System.out.println("---------------");
    27         }
    
    
    
     

    4.request的域对象和请求转发

    (1)request是一个域对象

    request对象也是一个存储数据的区域对象,所以也具有如下方法:

    1)setAttribute(String name, Object o)

    2)getAttribute(String name)

    3)removeAttribute(String name)

    注意:request域的作用范围:一次请求中

    (2)request完成请求转发

    获得请求转发器----path是转发的地址

    RequestDispatcher getRequestDispatcher(String path)

    通过转发器对象转发

    requestDispathcer.forward(ServletRequest request, ServletResponse response)

    客户端请求forwar1,forward1又发送请求到forward2;

    //向request域当中存取数据
            request.setAttribute("name", "tom");
            //forward1将请求转发给forward2(获得转发器)
            RequestDispatcher dispatcher = request.getRequestDispatcher("/forward2");//服务器端地址
            //执行转发方法
            dispatcher.forward(request, response);
    //从request域中取数据
            Object attribute = request.getAttribute("name");
            response.getWriter().write("hello haohao..."+attribute);

    注意转发与重定向的区别?

        1)重定向两次请求,转发一次请求

        2)重定向地址栏的地址变化,转发地址不变

        3)重新定向可以访问外部网站 转发只能访问内部资源

        4)转发的性能要优于重定向

  • 相关阅读:
    Redis基础
    Ajax&Json
    Docker基础修炼3--Docker容器及常用命令
    Docker基础修炼2--Docker镜像原理及常用命令
    Docker基础修炼1--Docker简介及快速入门体验
    linux入门系列20--Web服务之LNMP架构实战
    linux入门系列19--数据库管理系统(DBMS)之MariaDB
    linux入门系列18--Web服务之Apache服务2
    linux入门系列18--Web服务之Apache服务1
    linux入门系列17--邮件系统之Postfix和Dovecot
  • 原文地址:https://www.cnblogs.com/cqyp/p/11493846.html
Copyright © 2011-2022 走看看