Httpservletrequest

 

1、Httpservletrequest的简介

lWEB客户端发送给WEB服务器的HTTP请求消息分为三个部分:
ü请求行 POST /demo/login HTTP/1.1
ü请求消息头
ü消息正文(也叫实体内容) username=xxxx&password=1234
lServlet API中定义的ServletRequest接口类用于封装请求消息。
lHttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求消息。
l在service()方法内部调用HttpServletRequest对象的各种方法来获取请求消息。

2、获取请求行的相关信息

lHTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:
GET /it315/servlet/RequestURI?param1=a&param2=b HTTP/1.1
lgetMethod方法返回HTTP请求消息中的请求方式。
lgetRequestURI方法返回请求行中的资源名部分。
lgetQueryString 方法返回请求行中的参数部分。
lgetProtocol方法返回请求行中的协议名和版本。
lgetContextPath方法返回请求资源所属于的WEB应用程序的路径。
lgetPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
lgetPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。
lgetServletPath方法返回Servlet的名称或Servlet所映射的路径。 

 

3、获取网络连接信息

lgetRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。 (*)
lgetRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。
lgetRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。
lgetLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。
lgetLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。
lgetLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。
lgetServerName方法返回当前请求所指向的主机名。
lgetServerPort方法返回当前请求所连接的服务器端口号。
lgetScheme方法返回请求的协议名,例如http、https或ftp。
lgetRequestURL方法返回客户端发出请求时的完整URL。   

 

4、获取请求头信息

       4-1、获取所有的请求头

       Enumeration headerNames = request.getHeaderNames();

while(headerNames.hasMoreElements())

{

       String headerName = (String)headerNames.nextElement();

       out.print(headerName + " : " + request.getHeader(headerName) + "<br>");

       /*如果要考虑同一个请求头名可能出现多次,

       那么应该用下面的代码段代替上面一行程序代码*/

       /*Enumeration values = request.getHeaders(headerName);

       while(values.hasMoreElements())

        {

              out.print(headerName + " : " + (String)values.nextElement() + "<br>");

       }*/

       4-2、利用referer请求托阻止“盗链”

              String referrer = request.getHeader("referer");

String sitePart = "http://" + request.getServerName();

if(referrer!=null && referrer.startsWith(sitePart))

{

       //处理正当的下载请求,这里只进行示意

       out.println("dealing download ...");

}

else

{

       //非法下载请求跳转到本站的下载说明页

       RequestDispatcher rd = request.getRequestDispatcher("/down.html");

       rd.forward(request,response);

}

       4-3、利用referer请求头隐藏javascript源码

              String referrer = request.getHeader("referer");

String sitePart = "http://" + request.getServerName();

if(referrer!=null && referrer.startsWith(sitePart)){

                     //向客户端输出javascript的document.write(...)语句

                     out.println("document.write('假设这是很多重要的Javascript代码的执行结果');");

}

5、浏览器传递信息的细节

       5-1、使用get方式传递参数

l在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。
l如果网页中的<form>表单元素的method属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。
l使用GET请求方式给WEB服务器传递参数的格式:
http://www.it315.org/counter.jsp?name=zhangsan&password=123
l使用GET方式传送的数据量一般限制在1KB以下。

 

       5-2、使用post方式传递参数

lPOST方式将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器,传送的数据量要比使用GET方式传送的数据量大得多。 
lPOST请求方式主要用于向WEB服务器端程序提交FORM表单中的数据。
l<form>表单元素的enctype属性用于指定浏览器使用哪种编码方法将表单中的数据传送给WEB服务器,该属性可以有两种取值:
üapplication/x-www-form-urlencoded
ümultipart/form-data

 

       5-3、提交、重置、普通按钮如何传递参数

在一个FORM表单中可以有多个提交按钮,单击任何一个提交按钮都可以提交表单,只有被单击的提交按钮的名称和值才被作为参数传递,其它提交按钮的信息不会作为参数传递。
表单中的普通按钮与重置按钮的名称和值不会作为参数传递。
没有设置name属性的表单字段元素的信息不会作为参数传递。

 

       5-4、单行与多行文本输入框如何传递参数

不管单行和多行文本输入框中是否有内容,设置了name属性的文本输入框的信息总是会作为参数传递。如果文本框中没有输入内容,可以认为其内容为一个空字符串(“”),其参数形式为“text1=”。 

 

       5-5、单选按钮与复选框如何传递参数

只有被选中的复选框和单选按钮的信息才会作为参数传递,未被选中的复选框和单选按钮的信息不会作为参数传递。
对于多个名称相同的复选框,它们可以同时被选中;对于多个名称相同的单选按钮,只能同时选中其中的任意一个。
对于被选中的多个同名复选框,它们的信息将以多个名称相同的参数进行传递,即参数列表中会出现多个名称相同的参数。
对于没有设置value属性的单选按钮和复选框,当它们被选中时,它们传递的默认参数值为“on”。 

 

       5-6、隐藏表单字段与图像字段如何传递参数

隐藏表单字段元素总是被作为参数传递给WEB服务器。如果要在提交FORM表单时将网页中的JavaScript程序获得的信息或者上次的WEB服务器端程序产生的标记信息传送给WEB服务器,使用隐藏字段就是一个很好的办法。
图像字段元素也可以提交FORM表单,用户单击图像字段元素后,表单中的其他信息和图像上单击处的x、y坐标一起传送给服务器,x坐标对应的参数名是图像元素名后加上.x(如image1.x),y坐标对应的参数名是图像元素名后加上.y(如image1.y

 

       5-7、列表框如何传递参数

没有作出选择的列表框的信息不会作为参数传递,就象表单中没有这个列表框的情况一样。
如果设置了列表框字段元素的multiple属性,可以选择列表中的多个选项。对于选中的每个选项,它们都会与列表框的名称分别组合成单独的参数后进行传递,这样,参数列表中会出现多个名称为列表框名的同名参数 。
当选中没有设置value属性的列表选项时,浏览器使用该选项的标题作为参数值。

 

       5-8、使用javascript防止重复提交表单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值