HttpServletRequest(request的一些API)
一、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)相关推荐
- 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] ...
- 前端接modelmap的list_页面间传递前端请求参数和获取参数:Model model,HttpServletRequest request, ModelMap map参数使用与区别...
Model model, HttpServletRequest request, ModelMap map声明变量 一.下面的方法是需要将请求发过来的数据(或者说参数)传递到重定向的页面/转发的页面的 ...
- 根据HttpServletRequest request 获取当前用户ip地址和ip所属区域
String ip = CusAccessObjectUtil.getIp(request); //获取用户ip地址 // 此方法可以实现 但是收费 暂时不用 // String s1 = Query ...
- 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 ...
- [小白向]Python使用request库调用API并获取返回的JSON数据包中的内容
目录 对于参数可以直接写入链接中的接口(适用于参数较少时) 对于参数需要使用字典进行携带的接口(适用于请求头中参数较多时) 本文介绍了使用GET的方式调用API的方式,如需要使用POST方式,将代码中 ...
- HttpServletRequest request 简单使用方法
HttpServletRequest 详解 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提 ...
- Request对象及其API应用实操
用户的浏览器往服务器端发送数据的时候,把传送的数据都放在Request对象中进行封装,到服务器端的Servlet代码中就需要使用Request把数据提取出来 文章目录 Request对象 Reques ...
- Create a Service Catalog Request via REST API
http://wiki.servicenow.com/index.php?title=Useful_Catalog_Scripts#Eureka http://wiki.servicenow.com/ ...
- 利用request库请求api
import requestsdef re():url = 'http://shuyantech.com/api/entitylinking/cutsegment?q='word = '打球的李娜和唱 ...
最新文章
- 大厂白嫖拖垮开源!开源届码农:用户脾气大需求多还不给钱
- 在目前大数据时代下,怎么能成为一名合格的数据分析师
- 微服务之数据同步Porter
- MongoDB Modifiers(原子操作)
- [转载]html5教程
- 1-javascript基础学习
- BOOST使用 proto::extends 扩展终端类型的简单示例
- java compareable接口_Java对象比较-Comparable和Comparator接口使用
- 转发-[原创]ASR1K 在Rommon导入IOS-XE启动
- 网红手工耿造了辆电动汽车 罗永浩点赞 网友喊话雷军投资
- c语言中专业英文词汇的意思,c语言常见专业英语词汇
- mac磁盘格式转换操作方法
- mrpoid模拟器java版_mrpoid模拟器2019下载
- static taint IoT vul location
- 无线网卡被服务器禁用,wifi共享精灵无线网卡被禁用或被接管解决教程
- svelte-scrollbar: 基于svelte.js自定义滚动条组件|svelte3虚拟滚动条
- python3中seed函数的用法
- python random模块中seed函数的详解_random.seed()函数理解
- linux创建用户命令-----useradd
- 结对编程的合作情况,以及结对编程的优缺点
热门文章
- 马秀丽C语言程序设计答案pdf,C语言程序设计清华大学马秀丽刘志妩科后习题9答案.doc...
- Table Dragger - 简单的 JS 拖放排序表格插件
- vue使用iview Timeline 时间轴不显示问题
- springmvc注解小示例(转)
- [Swift]LeetCode1020. 飞地的数量 | Number of Enclaves
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---10
- css控制页面文字不能被选中user-select:none;
- [奇葩 bug]视图在 ipad5 上正常显示,在 iPad3上超出了边界
- android123 zhihuibeijing 新闻中心-新闻 页签 ViewPagerIndicator实现
- 史上最全的maven pom.xml文件教程详解