zoukankan      html  css  js  c++  java
  • HttpServeletRequest

    一.HttpServeletRequest 接口(javax.servlet.http)
    定义:public interface HttpServletRequestextends ServletRequest
    Request简介:
    原理:
         当服务器获取到客户端的HTTP协议的请求部分之后,将HTTP协议的请求部分进行解析后封装为HTTPServletRequest对象,tomcat同时创建好response对象,当调用当前的Servlet时,Tomcat就将创建好的request/response传递到被调用的Servlet下的doget/dopost方法中,当本次响应完毕,request/response结束.
    生命周期:
         请求一次创建一次,请求结束,对象被回收
    作用:
         1)获取到请求部分三大块(请求行,请求头,请求体),客户端的部分信息IP;
         2)request当做域对象使用;
         3)利用request实现请求转发;
    Request内置几种MAP
         1)获取消息头
         2)表单参数
         3)空MAP(程序中产生键值对的数据)
    常用方法:
         1)获取请求行
         request.getMethod():本次请求方式;
         request.getContextPath():当前web应用路径;
         request.getRomteAddr():远程客户端的ip;
         2)获取请求头
         request.getHeader(name):
         request.getHeaderNames():
         3)获取请求体
         request.getParameter(name);
         request.getParameterNames();
         request.getParameterMap();
         request.getParameterValues();

    二.请求转发
    1.何谓请求转发:
    当我们从客户端向服务端AAServlet发起请求的时候,在AAServlet中没有立即进行响应,而是将request/response继续向后传递,传递到BBServlet,在BBServlet
    中完成了本次响应.
    2.为何会有请求转发
    因为本次请求到服务端希望做一些事情,但是在AAServlet做这件事情不方便,将要做的事情分为2步来实现,一部分事情在AAServlet实现,剩余部分在BBServlet实现.
    3.请求转发的本质
    其实服务端有2段代码,AA,BB,AA执行完毕之后,执行BB,AA和BB共享同一对request/response

    三.容易混淆API总结
    1.获取操作数据WEB.XML中的配置信息(2种) 
         *.getInitParameterNames();
         *.getInitParamete(name);
         *: getServletContext() / getServletConfig()

    2.控制ServletContext/Request空MAP(共享数据) (向其中放数据,获取数据,移除数据)
        *.setAttribute(name,obj);
        *.getAttributeNames();
        *.getAttribute(name);
        *.removeAttribute(name);
        *:ServletContext /Request
    3.获取表单参数
        request.getParameterValues(name)
        request.getParameter(name)
        request.getParameterMap()
        request.getParameterNames()
    4.获取请求头
         request.getHeader(name);
         request.getHeaderNames(); 

    四.提问: ServletContext中的空MAP和request中的空MAP的区别和联系?
      都可以存放用户自定义的数据,但是这些数据存在的时间范围不同:
          1)ServletContext中的数据在任意的Servlet中都可以获取到;
          2)Request中的数据只能在本次请求内可以获取到.

    五.乱码问题:
    1)服务端向客户端响应内容中有中文乱码(Tomcat8.5无需手动转码,服务器已自动处理)
       response.setContentType(“text/html;chaset=utf-8”)
    2)浏览器乱码问题(会调用即可)
       DownLoadUtils.setConentType();
       Response.setContentDosposition(“  ;;file=哈哈.txt”);
    3)以GET方式传递中文
       <a href=”day33/DownLoadSevlet?filename=哈哈.txt”>哈哈.txt</a>
       手动转码
    4)以POST方式传递中文
       //告诉tomcat请求体部分采用的编码格式
       Request.setCharacterEncoding(“utf-8”);

    六.重定向/转发区别?
    1)重定向2次请求响应;转发1次请求响应;
    2)开发中,优先使用转发(效率,性能);
    3)浏览器地址栏路径变化情况;
    4)重定向实现代码格式:
       response.sendRedirect(“/项目名称/路径”);
       转发实现代码格式:
       /当前项目路径
       request.getRequestDispather(“/路径”).forWard(request,reponse);

  • 相关阅读:
    JAVA实现DES加密实现详解
    CentOS 7安装Hadoop 3.0.0
    使用JAVA开发微信公众平台(一)——环境搭建与开发接入
    Oracle触发器用法实例详解
    负载均衡中使用 Redis 实现共享 Session
    在windows上部署使用Redis
    java 线程排查问题流程
    使用Fernflower 比较准确的反编译整个java项目
    Mysql用户本机登陆不成功的解决
    kali 系统的源
  • 原文地址:https://www.cnblogs.com/huguangqin/p/7242509.html
Copyright © 2011-2022 走看看