• HttpServleRequest


    HttpServletRequest


    1.Request的常用方法


    System.out.println("getRequestURL= "+request.getRequestURL());
    System.out.println("getRequestURI= "+request.getRequestURI());
    System.out.println("getQueryString= "+request.getQueryString());
    System.out.println("getRemoteAddr= "+request.getRemoteAddr());
    System.out.println("getRemoteHost= "+request.getRemoteHost());
    System.out.println("getRemotePort= "+request.getRemotePort());
    System.out.println("getMethod= "+request.getMethod());
    //请求路径为 http://localhost:8080/ServletDemo/requestDemo1?aa=111
    getRequestURL= http://localhost:8080/ServletDemo/requestDemo1
    getRequestURI= /ServletDemo/requestDemo1
    getQueryString= aa=111
    getRemoteAddr= 127.0.0.1
    getRemoteHost= 127.0.0.1
    getRemotePort= 52859
    getMethod= GET


    2.获取所有请求头并输出 // Request获取请求头的相关方法


    Enumeration e = request.getHeaders("Accept-Encoding");
    while (e.hasMoreElements()) {
    String value = (String) e.nextElement();
    System.out.println("foreach getHeaders('Accept-Encoding') = "+ value);
    }
    //
    System.out.println("*******************************");
    e = request.getHeaderNames();
    while (e.hasMoreElements()) {
    String name = (String) e.nextElement();
    String vlaue = request.getHeader(name);
    System.out.println("foreach getHeaderNames() = " + "name:[" + name+ "] value: [" + vlaue + "]");
    }
    foreach getHeaderNames() = name:[host] value: [localhost:8080]
    foreach getHeaderNames() = name:[connection] value: [keep-alive]
    foreach getHeaderNames() = name:[accept] value: [text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8]
    foreach getHeaderNames() = name:[user-agent] value: [Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 SE 2.X MetaSr 1.0]
    foreach getHeaderNames() = name:[referer] value: [http://localhost:8080/ServletDemo/requestDemo2.html]
    foreach getHeaderNames() = name:[accept-encoding] value: [gzip,deflate,sdch]
    foreach getHeaderNames() = name:[accept-language] value: [zh-CN,zh;q=0.8]

    3.HttpServletRequest获取用户传送过来的数据


    System.out.println("**************获取数据方法1*****************");
    System.out.println("username=" + request.getParameter("username"));
    //
    System.out.println("************获取数据方法2*******************");
    String[] e1 = request.getParameterValues("username");
    for (String vale : e1) {
    System.out.println("username=" + vale);
    }
    //
    System.out.println("************获取数据方法3*******************");
    Enumeration e = request.getParameterNames();
    while (e.hasMoreElements()) {
    String name = (String) e.nextElement();
    String vale = request.getParameter(name);
    System.out.println(name + "=" + vale);
    }


    4.获取表单提交数据


    /* 用户名:<input type="text" name="username" /><br /> */
    System.out.println(request.getParameter("username"));

    /* 密码:<input type="password" name="password" /><br /> */
    System.out.println(request.getParameter("password"));


    /*
    * 性别:

    *<input type="radio" name="gender" value="male" />男

    *<input type="radio" name="gender" value="female" />女<br />
    */
    System.out.println(request.getParameter("gender"));

    /*
    * 所在地:

    *<select name="city">

    *  <option value="beijing">北京</option>

    *  <option value="shanghai">上海</option>

    *  <option value="guangzhou">广州</option>
    *   <option value="shenzhen">深圳</option>

    *</select><br />
    */
    System.out.println(request.getParameter("city"));

    /*
    * 爱好:

    *<input type="checkbox" name="likes" value="changge">唱歌

    *<input type="checkbox" name="likes" value="tiaowu">跳舞

    *<input type="checkbox" name="likes" value="kanshu">看书

    *<input type="checkbox" name="likes"  value="paobu">跑步

    *<input type="checkbox" name="likes" value="daqiu">打球
    * <br />
    */
    String[] likes = request.getParameterValues("likes");
    if (likes != null) {
    for (String like : likes) {
    System.out.print(like+" ");
    }
    System.out.println("");
    }


    5.中文数据提交


    // 对于使用get方式传送过来的中文数据
    // 先将数据转换为iso8859-1,然后再转化为utf-8。 这是因为 浏览器传输中文是以UTF-8的形式编码的,
    // 但是传输到Servlet过程中Servlet是以iso8859-1形式接收


    String username = request.getParameter("username");
    username = new String(username.getBytes("iso8859-1"), "UTF-8");
    System.out.println(username);

    // 对于使用post方式传送过来的中文数据,直接设置setCharacterEncoding()方法的编码格式就行了。


    request.setCharacterEncoding("UTF-8");
    System.out.println(request.getParameter("username"));


    6.利用request实现请求转发,以及使用request域对象将数据带给转发资源

    // request实现请求转发的特点
    // 1、客户机只发送一次请求,服务器会有多个资源响应
    //2、客户机的地址栏没有发生变化

    String data = "你是逗比";
    request.setAttribute("data", data);
    request.getRequestDispatcher("/message.jsp").forward(request, response);

    *.jsp
    ${data}

    7.//forward()方法细节


    // 如果在调用forward方法之前向Servlet引擎的缓冲区(response)中写入了内容,
    // 只要写入到缓冲区的内容还没有真正输出到客户端,forward方法就可以被正常执行,
    // 原来写入到输出缓冲区中的内容将被清空,但是已写入到HttpServletRespone对象中的响应头字段信息保持有效。


    String data = "你是逗比";
    request.setAttribute("data", data);//执行了forward方法后,这个不会被清空
    response.getWriter().write(data);//执行了forward方法后,会清空response所在缓冲区的data数据。
    request.getRequestDispatcher("/message.jsp").forward(request,response);
    return;

    /*
    * 下面代码报这个错误 java.lang.IllegalStateException: Cannot forward after response has been committed
    * 这是因为上面forward()方法调用后,response.getWriter().close();将被被执行
    * 然后再执行下面的forward()方法就会抛这个异常。 解决这个问题的方法是,执行完forward()方法后面跟着一句 return;
    */
    request.getRequestDispatcher("/index.jsp").forward(request, response);

    8.使用Request实现页面包含


    request.getRequestDispatcher("/requestDemo7/Head.jsp").include(request,response);
    9.利用getHeader("referer");实现防盗链
    String referer = request.getHeader("referer");
    if (referer == null || !referer.equals("http://localhost")) {
    response.sendRedirect("/ServletDemo/index.jsp");
    }


    9.request请求的转发过程,


    首先是客户机向web服务器请求数据,服务器收到请求之后,解释到请求的Servlet,然后创建request和response对象,交给Servlet处理。

    若是首次访问的Servlet文件会创建实例化对象,调用init方法进行初始化,实例化后调用Service()方法,读取请求信息,写入响应数据。

    当service执行到forward后,向web服务器发出forward命令,forward命令将request和response对象传送到Servlet2。

    若是首次访问Servlet2文件会创建实例化对象,调用init方法进行初始化,实例化后调用Service方法() ,读取请求信息,写入响应数据,Servlet2的Service()方法执行后,

    Servlet2将返回web服务器,这时Servlet1的Service方法才算执行完,然后由Servlet1将request和response对象返回给web服务器。

    然后服务器将request和response对象构造Http响应发送到客户机。

    10.response请求的重定向过程


    首先是客户机向web服务器请求数据,服务器收到请求之后,解释到请求的Servlet,然后创建request和response对象,交给Servlet处理。

    首次访问的Servlet会创建实例化对象,调用init方法进行初始化,然后调用Service()方法,读取请求信息,写入响应数据 。

    Service()方法执行结束后,Servlet将request和response对象返回给web服务器,服务器将构造Http响应发送到客户机。

    当客户机发现收到的是302重定向根据响应头中的"Location"的URL值,先改变浏览器的URL地址栏,然后根据提供URL地址再次向服务器发送请求,

    首次访问的Servlet2会创建实例化对象,调用init方法进行初始化,然后调用Service()方法,读取请求信息,写入响应数据 。

    Setvice()方法执行结束后,Servlet2将request和response对象返回给web服务器,服务器将构造Http响应发送到客户机。

  • 相关阅读:
    js-实现点击按钮直接打印
    XMLHTTPREQUEST–获取上传文件的进度
    The prop 'history' is marked as required in 'Router', but its value is 'undefined'.in Router
    javascript之闭包,递归,深拷贝
    node之get与post
    css公共样式
    php之创建jsonp接口调数据
    javascript之创建对象的方式
    angular之两种路由
    php之上传图片及传数据到mysql
  • 原文地址:https://www.cnblogs.com/lhy_2011/p/4044816.html
Copyright © 2020-2023  润新知