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);
HttpServeletRequest的更多相关文章
- 关于jsp乱码问题的产生原因 及 解决方法。
http://blog.csdn.net/caoxiaohong/article/details/1781777 JSP/JDBC MySQL乱码问题JSP的request 默认为ISO8859_1, ...
- JSP中乱码问题
一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大 ...
- Jsp入门学习笔记
#Jsp入门 一.JSP基础语法 1.JSP指令: page inlcude taglib 2.JSP注释: a.html注释: <!-- abcdefghijklmn --> b.jsp ...
- JSP/Servlet 中的汉字编码问题
JSP/Servlet 中的汉字编码问题 1.问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的 ASCII,中国的 GB2312 -80,日本的 JIS 等,作为该国家/区 ...
- GenericServlet,HttpServletRequest和HttpServletResponse
最基本的是通过实现Servlet接口来编写Servlet类,这需要实现Servlet接口中定义的5个方法. 为了简化Servlet的编写,在javax.servlet包中提供了一个抽象类Generic ...
- 在服务器端如何提取checkbox提交的数据?
HttpServeletRequest 单个字符串,getParameters() 多个字符串,getParametersValues(),返回一个数组,需要提前定义一个数组
- tomcat简介及原理解说
Tomcat简介 作者:杨晓(http://blog.sina.com.cn/u/1237288325) 目录: ----Tomcat背景 ----Tomcat目录 ----Tomcat类加载 --- ...
- Tomcat工作原理(转)
Tomcat简介 作者:杨晓(http://blog.sina.com.cn/u/1237288325) 一.Tomcat背景 自从JSP发布之后,推出了各式各样的JSP引擎.Apache Group ...
- jsp servelet
servlet是java web应用程序. 1.生命周期:init() .service().destroy()方法. 其中service()包括 doGet() .doPost()方法.默认为get ...
随机推荐
- 如何为现有控件的DependencyProperty添加Value Changed事件?
主要是利用DependencyPropertyDescriptor 的AddValueChanged 方法, 比如下面的例子为DataGridColumn的VisibilityPr ...
- shell ss命令
ss命令用来显示处于活动状态的套接字信息.ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比net ...
- 搭建基于Nagios的监控系统——之监控远程Windows服务器
分享了如何监控Linux服务器,我们来看看使用Nagios如何监控Windows服务器. 第一部分:配置被监控的Windows服务器 首先,访问 http://sourceforge.net/pr ...
- 【opencv学习笔记一】opencv下载安装与VS2017开发环境配置
本文章摘录自浅墨博客,原文链接http://blog.csdn.net/poem_qianmo/article/details/19809337 目录 1.opencv下载与安装 2.计算机环境变量配 ...
- WPF win7+vs2010开发的打印功能,怎么在XP系统上无法打印
在wpf 中打印功能很强大,但最近是在win7上可以但是布置到xp上就不可以了,查了好多资料终于知道怎么回事了原来xp里没有.net framework3.5 安装一个就OK了要先安装4.0.
- EasyUI把datagrid的值赋给表单
$('#infoForm${INDEX}').form('load', rowToDto(pageConfig${INDEX}.infoName, row)); function rowToDto(i ...
- linux下使用c判断文件夹是否为空的小程序
自己写了一个 判断文件夹是否为空的小代码 //文件夹操作相关的函数的帮助$: man 3 readdir #include <stdio.h> #include <sys/types ...
- SQL Server 截取两个固定字符之间的字符串(案例)
网上的问题: 参考这篇<函数PARSENAME使用和截取字符串>https://www.cnblogs.com/insus/p/10958452.html 的方法: )='||MO21|T ...
- 由一次动态改变font-size的大小引申的一系列困惑补录
以下结论如有错误,欢迎指正 在切入正题之前,先了解下window 和document这两个大对象 我们熟知 JavaScript的组成如下图所示: window对象和document对象分别属于哪个分 ...
- Python实现二叉树的前序、中序、后序、层次遍历
有关树的理论部分描述:<数据结构与算法>-4-树与二叉树: 下面代码均基于python实现,包含: 二叉树的前序.中序.后序遍历的递归算法和非递归算法: 层次遍历: 由前序序列.中 ...