一、request的运行流程

首先,自己写一个web工程,也就是建一个工程;当把该web工程发布到Tomcat服务器当中,可以让外界访问,这就成了一个web应用。
在客户端输入一个网站,是web应用资源的地址URL,该请求会在浏览器客户端自动生成一个http请求,然后客户端会将相应的请求发送到相应的服务器内部,服务器首先由Tomcat引擎接收该请求,然后Tomcat引擎会分析http协议上的请求行,该请求行上面有请求方式,根据请求方式是get还是post从而确定调用是doGet方法还是doPost方法,请求行上面有地址,Tomcat会帮你找该地址在的Tomcat服务器内部的某一个web应用(Tomcat容器中web-app下可以存放多个web应用),找到对应的web应用之后,开始创建对象,默认第一次访问创建对象,默认调用servlet方法,重写servlet方法之后会调用doGet方法或者doPost方法,当调用doGet方法的时候,需要两个参数。一个是request,一个是response,这两个参数,谁去调用改doGet方法管提供这个俩个参数,doGet方法由Tomcat引擎负责调用,它在调用的时候,帮你创建两个对象,一个是request代表请求,一个是response代表响应。其中request内部封装http请求的所有内容;response是空的,因为它代表响应,response有自己的缓冲区,可以向缓冲区里面添加内容,可以添加响应行、响应头、响应体(分别有对应的方法),添加完成之后,Tomcat引擎会获取缓冲区内容,会组装成http响应的东西,然后发送到客户端,通过装包也可看到,客户端获得这些内容会自动根据响应进行解析,最终在页面上显示响应体的内容。

二、ServletContext域和Request域的生命周期

ServletContext
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个web应用

Request
创建: 访问时创建request对象
销毁:响应结束request销毁
(生命周期为一瞬间)
域的作用范围:一次请求中

三、转发和重定向的区别

1).重定向两次请求 转发一次请求
2).重定向的地址栏的地址变化 转发的地址不变
3).重定向可以访问外部网站 转发不能访问外部网站,只能访问内部资源
4).转发的性能要优于重定向

四、客户端地址与服务器端地址的区别

客户端地址:是客户端去访问服务器的地址,服务器外部的地址
客户端地址必须写上web应用的名称,代表要去Tomcat容器中去找哪个web应用
例如:
直接输入地址
重定向
也就是,只要是服务器外部跳出服务器,然后再去访问服务器内部的资源,豆角客户端地址

服务器端地址:是服务器内部资源跳转访问的地址
不需要写web应用的名称
例如:
转发

总结:

request获得请求行的内容

获得请求方式:request.getMethod();
获得请求资源:request.getRequestURI();
request.getRequestURL();这个长,协议、主机名、端口都有
动态获得web应用的名称:request.getContextPath();
获得客户机的一些信息:request.getRemoteAddr();

request获得请求头的内容

request.getHeader(name);

request获得请求体(请求参数)

request.getParameter(name);//返回值为String
request.getParameterMap();//将所有的数据以Map形式封装,返回值为Map<String ,String[]>
request.getParameterValues(name);//返回值为String[]字符串数组

注意: 客户端发送的参数,到服务器端获得后都是字符串
获得中文乱码 的解决:

post提交: request.setCharacterEncoding("UTF-8");
get提交: parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8");//先用iso8859-1默认编码再用UTF-8解码

request转发和域

转发:request.getRequestDispather(转发的地址,服务器内部的地址,不需要web应用名称).forward(request, response);
例如:request.getRequestDispatcher("/login.jsp").forward(request, response);
存:request.setAttribute(name,value);
取:request.getAttribute(name,value);//取的时候需要强转一下

HttpServletRequest(request的一些API)相关推荐

  1. Failed to send a request to Slack API server: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certif

    问题: Failed to send a request to Slack API server: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] ...

  2. 前端接modelmap的list_页面间传递前端请求参数和获取参数:Model model,HttpServletRequest request, ModelMap map参数使用与区别...

    Model model, HttpServletRequest request, ModelMap map声明变量 一.下面的方法是需要将请求发过来的数据(或者说参数)传递到重定向的页面/转发的页面的 ...

  3. 根据HttpServletRequest request 获取当前用户ip地址和ip所属区域

    String ip = CusAccessObjectUtil.getIp(request); //获取用户ip地址 // 此方法可以实现 但是收费 暂时不用 // String s1 = Query ...

  4. spingboot报错I/O error on POST request for “9411/api/v2/spans“: connect timed out

    springboot报错I/O error on POST request for "http://10.10.195.199:9411/api/v2/spans": connec ...

  5. [小白向]Python使用request库调用API并获取返回的JSON数据包中的内容

    目录 对于参数可以直接写入链接中的接口(适用于参数较少时) 对于参数需要使用字典进行携带的接口(适用于请求头中参数较多时) 本文介绍了使用GET的方式调用API的方式,如需要使用POST方式,将代码中 ...

  6. HttpServletRequest request 简单使用方法

    HttpServletRequest 详解 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提 ...

  7. Request对象及其API应用实操

    用户的浏览器往服务器端发送数据的时候,把传送的数据都放在Request对象中进行封装,到服务器端的Servlet代码中就需要使用Request把数据提取出来 文章目录 Request对象 Reques ...

  8. Create a Service Catalog Request via REST API

    http://wiki.servicenow.com/index.php?title=Useful_Catalog_Scripts#Eureka http://wiki.servicenow.com/ ...

  9. 利用request库请求api

    import requestsdef re():url = 'http://shuyantech.com/api/entitylinking/cutsegment?q='word = '打球的李娜和唱 ...

最新文章

  1. 大厂白嫖拖垮开源!开源届码农:用户脾气大需求多还不给钱
  2. 在目前大数据时代下,怎么能成为一名合格的数据分析师
  3. 微服务之数据同步Porter
  4. MongoDB Modifiers(原子操作)
  5. [转载]html5教程
  6. 1-javascript基础学习
  7. BOOST使用 proto::extends 扩展终端类型的简单示例
  8. java compareable接口_Java对象比较-Comparable和Comparator接口使用
  9. 转发-[原创]ASR1K 在Rommon导入IOS-XE启动
  10. 网红手工耿造了辆电动汽车 罗永浩点赞 网友喊话雷军投资
  11. c语言中专业英文词汇的意思,c语言常见专业英语词汇
  12. mac磁盘格式转换操作方法
  13. mrpoid模拟器java版_mrpoid模拟器2019下载
  14. static taint IoT vul location
  15. 无线网卡被服务器禁用,wifi共享精灵无线网卡被禁用或被接管解决教程
  16. svelte-scrollbar: 基于svelte.js自定义滚动条组件|svelte3虚拟滚动条
  17. python3中seed函数的用法
  18. python random模块中seed函数的详解_random.seed()函数理解
  19. linux创建用户命令-----useradd
  20. 结对编程的合作情况,以及结对编程的优缺点

热门文章

  1. 马秀丽C语言程序设计答案pdf,C语言程序设计清华大学马秀丽刘志妩科后习题9答案.doc...
  2. Table Dragger - 简单的 JS 拖放排序表格插件
  3. vue使用iview Timeline 时间轴不显示问题
  4. springmvc注解小示例(转)
  5. [Swift]LeetCode1020. 飞地的数量 | Number of Enclaves
  6. 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---10
  7. css控制页面文字不能被选中user-select:none;
  8. [奇葩 bug]视图在 ipad5 上正常显示,在 iPad3上超出了边界
  9. android123 zhihuibeijing 新闻中心-新闻 页签 ViewPagerIndicator实现
  10. 史上最全的maven pom.xml文件教程详解