JSP Servlet中Request与Response所有成员方法的研究
HttpServletRequest与HttpServletResponse作为Servlet中doGet、doPost等方法中传递的参数,承接了Http请求与响应中的大部分功能,请求的解析与响应的返回都需要靠这两个对象进行,他们中的所有方法及功能在下边总结了一下,希望能对学习Java Web开发有所帮助。
1、HttpServletRequest:
/*
* 记录各个request.get的值
* request.getAsyncContext();AsyncContext
* 获取异步传输的文本内容
* request.getAttribute(String);Object
* Attribute与Parameter不同,Attr是在程序里用SetA设置进去的,而Par是接收网页的参数
* 多用于session的设值,session.setA,可以设置自己的类型,getP只能接收String,而getA可以为object
* request.getAttributeNames();Enumeration<String>
* 获取一个枚举类型,hasmoreelement,nextelement
* request.getAuthType();String
* 返回身份验证方法的名称,basic,SSL,form,client_cert和digest,若没有身份验证则为null
* AuthType可在web.xml中配置,使用<login-config><auth-method>xx<real-name>xxx来配置
* 一般用于远程网页链接,即输入网页地址,弹出一个登陆界面,那里的时候才会用
* 读取文件头中的Authorization信息
* request.getCharacterEncoding();String
* 返回网页使用的编码,在网页的charset中的值
* request.getContentLength();int
* 只用于POST请求,表示所发送数据的字节数
* request.getContentLengthLong();long
* 同上,用于数据量非常大时,long八个字节
* request.getContentType();String
* 获取content-type,包括编码。<meta content="text/html; charset=gb2312" http-equiv="Content-Type"/>
* Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件
* request.getContextPath();String
* 获取项目的根目录名,如本项目应该是/MyTestWeb。返回指定servlet上下文(web应用)的URL的前缀。
* 用绝对路径时,可以使用getRealPath()(不推荐),request.getSession().getServletContext().getRealPath("/")
* request.getCookies();Cookie[]
* 很明显,返回网页的cookies,数组形式cookie是名称+值的形式保存的
* request.getDateHeader("String");long
* 用于将指定头信息的部分转换成方便转换为时间类型的长整数型,简化getHeaders
* request.getDispatcherType();DispatcherType
* 未知...
* request.getHeader("headname");String
* 获取指定头信息
* request.getHeaderNames();Enumeration<String>
* 获取名字的枚举,用于遍历
* request.getHeaders("headersname");Enumeration<String>
* 获取一个name的多个值序列,返回请求给出的指定类型的所有HTTP头标的名称的枚举值,它对具有多取值的头标非常有用。
* request.getInputStream();ServletInputStream继承自io.InputStream
* 获取请求内容,可以获取post方法在网页中通过send传递的内容,但是要通过InputStreamReader实例化
* 同时InputStreamReader也不能直接被读取为字符串,要使用BufferedReader实例化InputStreamReader
* 之后就可以使用BufferedReader的readline来获取中间的数据了。
* 或者直接使用InputStream的read方法写给read的参数,byte数组
* 该方法只能读取一次,因为是流,所以读完就没了
* request.getIntHeader("head");int
* 从头内容获取数值
* request.getLocalAddr();String
* 获取本地地址,根据访问方法不同而不同,为127.0.0.1或者公网ip
* request.getLocale();Locale(util中)
* 获取本地位置信息,若ZHCN等等
* request.getLocales();Enumeration<Locale>
* 有多个位置信息时获取枚举
* request.getLocalName();String
* 获取本地IP的名称,如127.0.0.1就是localhost
* request.getLocalPort();int
* 获取端口号,本应用就是8081
* request.getMethod();String
* 获取Http方法,有get,head,put,delete,post,options
* request.getParameter("code");String
* 获取提交参数,即网址?后面的内容,一一对应关系。即便是POST,这个也只能获取?后面的参数
* POST与GET的不同是可以send里面写内容,网址里面传递的参数还是一样的
* request.getParameterMap();Map<String,String[]>
* 返回类型是String[]的原因是参数名称有可能相同,如果用getPara返回同名参数多个值的会把各个值结合起来
* PS:遍历Map的方法,Set<Entry<String, String[]>> set = map.entrySet();先获取EntrySet
* 然后获取EntrySet的迭代器Iterator<Entry<String, String[]>> it = set.iterator();
* 接着使用迭代的getNext来获取各个元素Entry<String, String[]> entry = it.next();
* 最后使用Entry.getvalue获取字符串数组
* request.getParameterNames();Enumeration<String>
* 获取参数名的枚举
* request.getParameterValues("code");String[]
* 获取同名参数的多个值
* request.getPart("file");Part
* 用于上传文件,一个Part为一个文件,mime类型为multipart/form-data
* 程序中需要添加@MultipartConfig注解
* request.getParts();Collection<Part>
* 获取一个Part的集合,用于上传多个文件
* request.getPathInfo();String
* 返回在URL中指定的任意附加路径信息。不带参数,一般是相对于Servlet的路径
* pathinfo返回的字符串是经过Servlet服务器URL Decode过的。
* 输出:URL中Servlet路径之后、查询字符串之前的那部分。
* request.getPathTranslated();String
* 映射到服务器实际路径之后的路径信息。
* request.getProtocol();String
* 获取协议信息和版本号,即HTTP/1.1
* request.getQueryString();String
* 这是字符串形式的附加到URL后面的查询字符串,数据仍旧是URL编码的。
* 在Servlet中很少需要用到未经解码的数据,一般使用getParameter访问各个参数。
* request.getReader();BufferedReader
* 获取BufferedReader,和inputStream那一大堆获取的内容一样。。。
* request.getRealPath("/");String
* 获取绝对路径,被废弃了,请使用request.getSession().getServletContext().getRealPath("/")
* request.getRemoteAddr();String
* 客户端的IP
* request.getRemoteHost();String
* 客户端的主机名
* request.getRemotePort();int
* 客户端的端口号
* request.getRemoteUser();String
* 客户端的用户名
* request.getRequestDispatcher("");RequestDispatcher
* 请求转发,获取请求过来的地址,与该地址共享一个Request
* request.getRequestedSessionId();String
* 返回这个请求相应的session id
* request.getRequestURI();String
* 获得请求URL,不包含请求内容,不包含域名
* request.getRequestURL();StringBuffer
* 获取URL,包含域名,不包含请求内容
* 未被Servlet服务器URL Decode过。
* request.getScheme();String
* 返回协议名称,http
* request.getServerName();String
* 获得服务器名,本地IP
* request.getServerPort();int
* 获取服务器端口号
* request.getServletContext();ServletContext
* 获取该Servlet的相关信息,getServletConfig().getServletContext().getServerInfo()
* request.getServletPath();String
* URL中调用Servlet的那一部分,不包含附加路径信息和查询字符串。
* request.getSession();HttpSession
* 获取Session对话,用于与网页通信,很有用
* equest.getSession(boolean);HttpSession
* request.getSession(true):若存在会话则返回该会话,否则新建一个会话。
* request.getSession(false):若存在会话则返回该会话,否则返回NULL
* request.getUserPrincipal();Principal
* 返回一个java.security.Principal 对象,该对象包含当前授权用户的名称
* 使用request.getUserPrincipal().getName()得到用户名
* 没有通过认证就没有返回值,是用户登录后才有值的,通过了JAAS认证,也就是登录
*
* request.authenticate(HttpServletResponse response);boolean
* 证明是真实的、可靠的或有效的;鉴定,使生效
* request.changeSessionId();String
* Change the session id of the current session associated with this request and return the new session id.
* request.isAsyncStarted();boolean
* 异步传输是否开始
* request.isAsyncSupported();boolean
* 是否支持异步传输
* isRequestedSessionIdFromCookie();boolean
* SessionId是否是从cookies中获得的
* request.isRequestedSessionIdFromUrl();boolean
* SessionId是否是从URL中获取的,已废弃
* request.isRequestedSessionIdFromURL();boolean
* 同上,这个没废弃
* request.isRequestedSessionIdValid();boolean
* 检查SessionId是否是有效的
* request.isSecure();boolean
* 是否是安全的,即是否使用了安全协议,如https
* request.isUserInRole("role");boolean
* 判断用户是否是某个种类的角色,类型可以在web.xml中配置(tomcat-users.xml)
* request.login("user", "password");void
* 使用用户名和密码进行登录
* request.logout();void
* 用户登出
* request.notify();request.notifyAll();void
* 用于线程操作,详细见教材
* request.removeAttribute("at");void
* 删除某个属性值,对应set
* request.setAttribute("at", request);void
* 设置某个属性值
* request.setCharacterEncoding("utf-8");void
* 设置获取各个字符时使用的编码方式,应与网页的编码方式一样
* 仅仅只适用于设置post提交的request body的编码而不是设置get方法提交的queryString的编码。
* 该方法告诉应用服务器应该采用什么编码解析post传过来的内容。
* request.startAsync(request, response);void
* 开始异步传输,可以不带参数
* request.upgrade();void
* 开始更新?
* request.wait(12);
* 实现了线程的类都有该方法,用于等待
*/
2、HttpServletResponse
/*
* response对象
* response.addCookie(new Cookie("a","aa"));void
* 增加cookie
* response.addDateHeader("date", 23456789l);void
* 在头部增加日期
* response.addHeader("asf", "sff");void
* 增加头部信息
* response.addIntHeader("fsf", 12);void
* 在头部增加数值类型
* response.encodeRedirectUrl("utf-8");废弃
* response.encodeRedirectURL("utf-8");String
* 通过指定的编码对URL进项编码,并携带sessionid,跨应用
* response.encodeUrl("utf-8");废弃
* response.encodeURL("utf-8");String
* 通过指定的编码对URL进项编码,并携带sessionid,本应用
* 假如有sessionId,且不是从cookie中获得的,就放到url尾部,否则直接返回原url。
* response.flushBuffer();vodi
* 立即发送缓冲区字符给客户端即浏览器
* response.getBufferSize();int
* 获取缓冲区大小
* response.getCharacterEncoding();String
* 获取编码类型
* response.getContentType();String
* 获取Content的MIME类型和编码
* response.getHeaderNames();Collection<String>
* 获取所有Header的name列表
* response.getHeaders("aa");Collection<String>
* 获取所有aa的头的值列表
* response.getLocale();Locale
* 获取本地信息,如zhcn
* response.getOutputStream();ServletOutputStream继承自OutputStream
* 获取输出流,和inputStream对应,bufferedReader和printWriter对应
* response.getStatus();int
* 获取response的状态码,有200,301,404,500
* response.getWriter();PrintWriter
* 获取一个PrintWriter,用于向response返回数据,从而向客户端返回数据,比Stream使用方便
* response.isCommitted();boolean
* 调用PrintWriter对象的close()方法关闭底层输出流,方法在关闭输出流之前会先把缓冲区内的数据提交到客户端。
* 因此在调用PrintWriter 对象的 close()方法之前,response.isCommitted()方法返回 false;
* 而在调用PrintWriter对象的close()方法之后,response.isCommitted()方法返回true。
* response.reset();void
* 清除buffer,设置页面不缓存,同时清除状态码和头,如果已经发送数据则跑出异常
* response.resetBuffer();void
* 只清除buffer
* response.sendError(1,"123");void
* response.sendError(123);
* response.sendError(1,"123");
* setStatus方法用来设置Servlet向客户端返回的状态码,它用来设置没有出错的状态。
* 如果Servlet运行出错,Servlet可以使用sendError方法设置状态码,
* 如sendError(int sc)方法设置错误状态代码。sendError(int sc,String msg)方法除了设置状态码
* 还向客户发出一条错误信息。
* response.sendRedirect("xx.html");
* 返回一个重定向,并把新的request与response交给重定向的页面进行处理
* sendRedirect方法向客户发出临时重新导向的响应。它生成的响应状态码为302。
* 该响应给了客户一个新的URL分区。如果缓冲器已经被清空,这个方法会弹出一个IllegalStateException例外。
* response.setBufferSize(123);
* 设置缓冲区大小
* response.setCharacterEncoding("utf-8");
* 设置字符编码
* response.setContentLength(123);
* 设置返回内容的长度,在header中也有
* response.setContentLengthLong(1345l);
* 长度非常长是使用
* response.setContentType("dfd");
* 设置ContentType,包括编码和类型信息
* 网页的Http头中ContentType("text/html; charset=GBK")的作用:
* 告诉浏览器网页中数据是什么编码\
* 表单提交时,通常浏览器会根据ContentType指定的charset对表单中的数据编码,然后发送给服务器的。
* 这里需要注意的是:这里所说的ContentType是指http头的ContentType,而不是在网页中meta中的ContentType。
* response.setDateHeader("asd", 123l);
* 修改日期头
* response.setHeader("sfds", "sdfsdf");
* 修改头
* response.setIntHeader("sf", 3123);
* 设置数值头
* response.setLocale(locale );
* 设置本地环境
* response.setStatus(1);
* 设置Http状态码,为出错的情况用
* response.setStatus(12, "dasd");
* 设置状态码并带一条消息
*
*
*
*/
3、用于测试的代码
AsyncContext async = request.getAsyncContext();
String attribute = (String) request.getAttribute("code");
Enumeration<String> enumer = request.getAttributeNames();
String authtype = request.getAuthType();
String character = request.getCharacterEncoding();
int len = request.getContentLength();
long lenl = request.getContentLengthLong();
String contenttype = request.getContentType();
String contextpath = request.getContextPath();
Cookie[] cook = request.getCookies();
long dataHeader = request.getDateHeader("");
DispatcherType dispatcher = request.getDispatcherType();
String header = request.getHeader("headname");
Enumeration<String> headernames = request.getHeaderNames();
Enumeration<String> headersname = request.getHeaders("headersname");
ServletInputStream ins = request.getInputStream();
int i = request.getIntHeader("head");
String add = request.getLocalAddr();
Locale locale = request.getLocale();
Enumeration<Locale> locales = request.getLocales();
String localname = request.getLocalName();
int port = request.getLocalPort();
String method = request.getMethod();
String codep = request.getParameter("code");
Map<String,String[]> map = request.getParameterMap();
Enumeration<String> Pnames = request.getParameterNames();
String[] values = request.getParameterValues("code");
Part pa = request.getPart("file");
Collection<Part> pas = request.getParts();
String pathin = request.getPathInfo();
String trans = request.getPathTranslated();
String protoc = request.getProtocol();
String query = request.getQueryString();
BufferedReader br = request.getReader();
String rp = request.getRealPath("/");
String ra = request.getRemoteAddr();
String rh = request.getRemoteHost();
int rport = request.getRemotePort();
String ru = request.getRemoteUser();
RequestDispatcher rd = request.getRequestDispatcher("");
String rsi = request.getRequestedSessionId();
String uri = request.getRequestURI();
String scheme = request.getScheme();
String servern = request.getServerName();
int sport = request.getServerPort();
ServletContext scon = request.getServletContext();
String spath = request.getServletPath();
HttpSession session1 = request.getSession();
HttpSession session2 = request.getSession(true);
Principal prc = request.getUserPrincipal(); boolean authe = request.authenticate(response);//证明是真实的、可靠的或有效的;鉴定,使生效
String cs = request.changeSessionId();
boolean iss = request.isAsyncStarted();
boolean isss = request.isAsyncSupported();
boolean issr = request.isRequestedSessionIdFromCookie();
boolean irsi = request.isRequestedSessionIdFromUrl();
boolean irss = request.isRequestedSessionIdFromURL();
boolean isiv = request.isRequestedSessionIdValid();
boolean isivs = request.isSecure();
boolean isr = request.isUserInRole("role");
request.login("user", "password");
request.logout();
request.notify();
request.notifyAll();
request.removeAttribute("at");
request.setAttribute("at", request);
request.setCharacterEncoding("utf-8");
request.startAsync();
request.startAsync(request, response);
//request.upgrade(); response.addCookie(new Cookie("a","aa"));
response.addDateHeader("date", 23456789l);
response.addHeader("asf", "sff");
response.addIntHeader("fsf", 12);
boolean ch = response.containsHeader("asf");
String eru = response.encodeRedirectUrl("utf-8");
String eru1 = response.encodeRedirectURL("utf-8");
String eu = response.encodeUrl("utf-8");
String eu1 = response.encodeURL("utf-8");
response.flushBuffer();
int bs = response.getBufferSize();
String ge = response.getCharacterEncoding();
String cont = response.getContentType();
String se = response.getHeader("aa");
Collection<String> ghn = response.getHeaderNames();
Collection<String> ghn1 = response.getHeaders("aa");
Locale sss = response.getLocale();
ServletOutputStream ost = response.getOutputStream();
int rs = response.getStatus();
PrintWriter writer1 = response.getWriter();
boolean isc = response.isCommitted();
response.reset();
response.resetBuffer();
response.sendError(1,"123");
response.sendError(123);
response.sendRedirect("xx.html");
response.setBufferSize(123);
response.setCharacterEncoding("utf-8");
response.setContentLength(123);
response.setContentLengthLong(1345l);
response.setContentType("dfd");
response.setDateHeader("asd", 123l);
response.setHeader("sfds", "sdfsdf");
response.setIntHeader("sf", 3123);
response.setLocale(locale );
response.setStatus(1);
response.setStatus(12, "dasd");
上面的内容只是作为总结,并没有说明各个方法的作用以及取出来的对象的作用,比如说Session,是一个很有用的对象,要知道他的用法,请看后面的博文。
关于Http客户端,即浏览器发送请求及接受响应的各部分内容,请参考后面的博文。
JSP Servlet中Request与Response所有成员方法的研究的更多相关文章
- servlet中request和response
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
- servlet中Request与response使用
服务器根据请求自动创建传入HttpServletRequest对象和HttpServletResponse对象 @Override protected void service(HttpServlet ...
- JSP+Servlet中使用jspsmartupload.jar进行图片上传下载
JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post&quo ...
- JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
链接:JSP+Servlet中使用jspsmartupload.jar进行图片上传下载 关于cos.jar,百度百科只有这么几句话(http://baike.baidu.com/subview/406 ...
- JSP/Servlet 中的汉字编码问题
JSP/Servlet 中的汉字编码问题 1.问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的 ASCII,中国的 GB2312 -80,日本的 JIS 等,作为该国家/区 ...
- JSP/Servlet 中的事件处理
写过AWT或Swing程序的人一定对桌面程序的事件处理机制印象深刻:通过实现Listener接口的类可以在特定事件(Event)发生时,呼叫特定的方法来对事件进行响应. 其实我们在编写JSP/Serv ...
- python的scrapy框架的使用 和xpath的使用 && scrapy中request和response的函数参数 && parse()函数运行机制
这篇博客主要是讲一下scrapy框架的使用,对于糗事百科爬取数据并未去专门处理 最后爬取的数据保存为json格式 一.先说一下pyharm怎么去看一些函数在源码中的代码实现 按着ctrl然后点击函数就 ...
- JSP Servlet中的Request和Response的简单研究
本文参考了几篇文章所得,参考目录如下: 1.http://www.cnblogs.com/guangshan/p/4198418.html 2.http://www.iteye.com/problem ...
- Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)
中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...
随机推荐
- 跟我一起学kafka(一)
从昨天下午接到新任务,要采集一个法院网站得所有公告,大概是需要采集这个网站得所有公告列表里得所有txt内容,txt文件里边是一件件赤裸裸得案件,记录这案由,原告被告等相关属性(不知道该叫什么就称之为属 ...
- 浪潮openStack云
- C# 项目开发笔记
这里主要记录一些容易错的内容,在项目开发中总结出来的经验和教训. 1 语法 (1)判断float是否为Nan,不能使用 xxx = flaot.Nan去做,要使用float.IsNan去做. (2)u ...
- Python常用的一些内建函数和math模块函数
一:Python内建函数 # abs取绝对值 num = -10 print(abs(num)) # max 求最大值 print(max(6, 9, 2, 12, 8)) # min求最小值 pri ...
- python调用函数
1.同一包内的调用 直接使用import 文件名 或者from 文件名 import 函数名 a.py def p(): print("abc") b.py from a impo ...
- 在springBoot在控制台打印sql语句
在springBoot+Mybatis日志显示SQL的执行情况的最简单方法就是在properties新增: logging.level.com.dy.springboot.server.mapper= ...
- AspectJ、Spring与AOP的关系
- POJ 3017 DP + 单调队列 + 堆
题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...
- selenium+python—实现基本自动化测试
安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium I ...
- AJAX(XMLHttpRequest)进行跨域请求方法详解
AJAX(XMLHttpRequest)进行跨域请求方法详解(三) 2010年01月11日 08:48:00 阅读数:24213 注意:以下代码请在Firefox 3.5.Chrome 3.0.Saf ...