您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > HttpServletRequest的应用(PPT46页)
IT资讯交流网课堂-深入体验JavaWeb开发内幕IT资讯交流网的应用HttpServletRequest简介获取请求行的相关信息获取网络连接信息获取请求头信息浏览器传递参数信息的细节获取请求参数获取请求消息的实体内容利用请求域属性传递信息请求参数的中文读取问题IT资讯交流网简介WEB客户端发送给WEB服务器的HTTP请求消息分为三个部分:请求行请求消息头消息正文(也叫实体内容)ServletAPI中定义的ServletRequest接口类用于封装请求消息。HttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求消息。在service()方法内部调用HttpServletRequest对象的各种方法来获取请求消息。IT资讯交流网获取请求行的相关信息HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:GET/it315/servlet/RequestURI?param1=a¶m2=bHTTP/1.1getMethod方法返回HTTP请求消息中的请求方式。getRequestURI方法返回请求行中的资源名部分。getQueryString方法返回请求行中的参数部分。getProtocol方法返回请求行中的协议名和版本。getContextPath方法返回请求资源所属于的WEB应用程序的路径。getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。getPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。getServletPath方法返回Servlet的名称或Servlet所映射的路径。IT资讯交流网获取请求行的相关信息举例IT资讯交流网获取请求行的相关信息实践动手体验:了解获取请求行信息的各个方法的作用IT资讯交流网获取网络连接信息getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。(*)getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。getServerName方法返回当前请求所指向的主机名。getServerPort方法返回当前请求所连接的服务器端口号。getScheme方法返回请求的协议名,例如http、https或ftp。getRequestURL方法返回客户端发出请求时的完整URL。IT资讯交流网获取请求头信息getHeader方法getHeaders方法getHeaderNames方法getIntHeader方法getDateHeader方法getContentType方法getContentLength方法getCharacterEncoding方法IT资讯交流网=request.getHeaderNames();while(headerNames.hasMoreElements()){StringheaderName=(String)headerNames.nextElement();out.print(headerName+:+request.getHeader(headerName)+br);/*如果要考虑同一个请求头名可能出现多次,那么应该用下面的代码段代替上面一行程序代码*//*Enumerationvalues=request.getHeaders(headerName);while(values.hasMoreElements()){out.print(headerName+:+(String)values.nextElement()+br);}*/}动手体验:获取请求消息中的所有请求头信息IT资讯交流网请求头阻止“盗链”Stringreferrer=request.getHeader(referer);StringsitePart=http://+request.getServerName();if(referrer!=null&&referrer.startsWith(sitePart)){//处理正当的下载请求,这里只进行示意out.println(dealingdownload...);}else{//非法下载请求跳转到本站的下载说明页RequestDispatcherrd=request.getRequestDispatcher(/down.html);rd.forward(request,response);}动手体验:利用Referer请求头阻止“盗链”IT资讯交流网=request.getHeader(referer);StringsitePart=http://+request.getServerName();if(referrer!=null&&referrer.startsWith(sitePart)){//向客户端输出javascript的document.write(...)语句out.println(document.write('假设这是很多重要的Javascript代码的执行结果'););}动手体验:利用Referer请求头隐藏JavaScript源码IT资讯交流网客户端身份认证当客户端访问WEB服务器时,WEB服务器可以发送401(Unauthorized)响应状态码和响应头来要求客户端进行身份认证。客户端可以再次发出请求,并通过Authorization请求头来提供用户名和密码信息。服务器对Authorization请求头中的身份信息进行认证,并根据认证结果来决定是否提供服务。响应头中可以指定两种认证方式:BASIC和DIGEST。对于BASIC验证方式,客户端需要把用冒号(:)分隔的用户名和密码进行Base64编码之后传送给WEB服务器。举例:用户名为“zxx”和密码为“123456”的认证头信息Authorization:Basicenh4OjEyMzQ1Ng==IT资讯交流网编码BASE64编码规则将一组连续的字节数据按6个bit位进行分组,然后对每组数据用一个ASCII字符来表示。6个bit位最多能表示26=64个数值,因此可以使用64个ASCII字符来对应这64个数值,这64个ASCII字符为:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/计算[0110,0001][0110,0010][0110,0011]的BASE64编码[0110,0001][0110,0010][0110,0011][0110,00][01,0110,][0010,01][10,0011][0110,00][01,0110,][0010,01][10,0011][24]10[22]10[9]10[35]10[24]10[22]10[9]10[35]10YWJjBASE64编码要求把3个8位字节(即24个bit)的数据转化为4个6位字节(也是24个bit)的数据,如果原来的8位字节数据的字节个数不能被3整除,那么如何对余下的1个或2个8位字节数据进行处理呢?仍然按6个bit位对剩余的字节进行分组,在最后不够6个bit位的内容后面添加几个为0的bit位来凑成6个bit位,例如,[0110,0001][0110,00][01,0000]如果编码后的整个结果文本的字符个数不是4的整数倍,那么需要在最后填充“=”字符来凑成4的倍数。经过BASE64编码后的结果所占用的字节个数大约是原始内容的4/3倍,计算公式为:编码后的大小=((原始大小+2)/3)*4。IT资讯交流网客户端身份认证实践SUN公司在JDK的核心包中提供两个分别用于进行BASE64编码和解码的类:sun.misc.BASE64Encoder和sun.misc.BASE64DecoderBASE64Decoderdecoder=newBASE64Decoder();byte[]decodedBytes=decoder.decodeBuffer(encodedAuth.substring(6));StringdecodedInfo=newString(decodedBytes);intidx=decodedInfo.indexOf(:);Stringuser=decodedInfo.substring(0,idx);Stringpassword=decodedInfo.substring(idx+1);动手体验:了解BASIC验证的全部过程StringencodedAuth=request.getHeader(Authorization);//要求客户端发送身份认证信息,并且只能是BASIC认证方式中if(encodedAuth==null||!encodedAuth.toUpperCase().startsWith(BASIC)){response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);response.setHeader(=\it315\);//当用户单击登录框中的“取消”按钮时,将输出下面的内容out.println(没有传递用户身份!);return;}IT资讯交流网浏览器传递参数信息的细节使用GET方式传递参数使用POST方式传递参数提交、重置、普通按钮如何传送参数单行与多行文本输入框如何传送参数单选按钮与复选框如何传送参数隐藏表单字段与图像字段如何传送参数列表框如何传送参数使用Javascript防止重复提交表单IT资讯交流网方式传递参数在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。如果网页中的form表单元素的method属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。使用GET请求方式给WEB服务器传递参数的格式:=zhangsan&password=123使用GET方式传送的数据量一般限制在1KB以下。脚下留心:不要使用GET方式提交包含口令的FORM表单IT资讯交流网方式传递参数POST请求方式主要用于向WEB服务器端程序提交FO
本文标题:HttpServletRequest的应用(PPT46页)
链接地址:https://www.777doc.com/doc-839238 .html