一.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);

HttpServeletRequest的更多相关文章

  1. 关于jsp乱码问题的产生原因 及 解决方法。

    http://blog.csdn.net/caoxiaohong/article/details/1781777 JSP/JDBC MySQL乱码问题JSP的request 默认为ISO8859_1, ...

  2. JSP中乱码问题

    一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大 ...

  3. Jsp入门学习笔记

    #Jsp入门 一.JSP基础语法 1.JSP指令: page inlcude taglib 2.JSP注释: a.html注释: <!-- abcdefghijklmn --> b.jsp ...

  4. JSP/Servlet 中的汉字编码问题

    JSP/Servlet 中的汉字编码问题 1.问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的 ASCII,中国的 GB2312 -80,日本的 JIS 等,作为该国家/区 ...

  5. GenericServlet,HttpServletRequest和HttpServletResponse

    最基本的是通过实现Servlet接口来编写Servlet类,这需要实现Servlet接口中定义的5个方法. 为了简化Servlet的编写,在javax.servlet包中提供了一个抽象类Generic ...

  6. 在服务器端如何提取checkbox提交的数据?

    HttpServeletRequest 单个字符串,getParameters() 多个字符串,getParametersValues(),返回一个数组,需要提前定义一个数组

  7. tomcat简介及原理解说

    Tomcat简介 作者:杨晓(http://blog.sina.com.cn/u/1237288325) 目录: ----Tomcat背景 ----Tomcat目录 ----Tomcat类加载 --- ...

  8. Tomcat工作原理(转)

    Tomcat简介 作者:杨晓(http://blog.sina.com.cn/u/1237288325) 一.Tomcat背景 自从JSP发布之后,推出了各式各样的JSP引擎.Apache Group ...

  9. jsp servelet

    servlet是java web应用程序. 1.生命周期:init() .service().destroy()方法. 其中service()包括 doGet() .doPost()方法.默认为get ...

随机推荐

  1. java 基础知识学习 内存泄露(memory leak) VS 内存溢出(out of memory)以及内存管理

    内存泄露(memory leak) VS 内存溢出(out of memory) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory ...

  2. strlen("汉字")的值是多少

    转自:http://blog.csdn.net/gogor/article/details/4470775 strlen("汉字")的值是多少? 这个问题的答案与系统所采用的字符编 ...

  3. JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题

    1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在 ...

  4. 《Java多线程编程核心技术》读后感(八)

    不使用等待/通知机制实现线程间通信 使用sleep()结合while(true)死循环来实现多个线程间通信 package Third; import java.util.ArrayList; imp ...

  5. linux 下消息队列发送后没有信息

    在使用消息队列时,调用 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

  6. Working Experience - NLog 多实例时配置文件冲突

    正文 问题: 当前项目已使用 NLog 的情况下再引用使用 NLog 的项目, 出现配置文件冲突, 有一个配置文件不工作 方法: 使用 LogFactory 代替 LogManager 来获取 Log ...

  7. 51nod1117(简单huffman tree)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1117 题意:中文题诶- 思路:简单huffman tree ...

  8. codeforces590E Birthday【AC自动机+Floyd+匈牙利算法】

    因为没有重复串,所以把有包含关系的串连边之后是个DAG,也就是二分图,就变成求二分图的最大独立集=n-最小点覆盖=n-最大匹配 关于包含关系,建出AC自动机,然后把串放上去找子串,但是如果每次都一路找 ...

  9. c#根据身份证获取身份证信息

    /// <summary> /// 根据身份证获取身份证信息 /// 18位身份证 /// 0地区代码(1~6位,其中1.2位数为各省级政府的代码,3.4位数为地.市级政府的代码,5.6位 ...

  10. Etherscan API 中文文档-账号

    本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读. 账号(Account) 账号及地址相关的 API,接口的参数说明请参考Etherscan ...