HttpServletRequest简介

20111019

HttpServletRequest简介

                            HttpServletRequest简介

WEB客户端发送给WEB服务器的HTTP请求消息分为三个部分:

ü  请求行 POST /demo/login HTTP/1.1

ü  请求消息头

ü  消息正文(也叫实体内容) username=xxxx&password=1234

Servlet API中定义的ServletRequest接口类用于封装请求消息。

HttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求消息。

在service()方法内部调用HttpServletRequest对象的各种方法来获取请求消息。

HTTP请求消息的请求行包括请求方式、资源路径和HTTP协议版本:

GET /it315/servlet/RequestURI?param1=a&param2=b HTTP/1.1

getMethod方法返回HTTP请求消息中的请求方式。

getRequestURI方法返回请求行中的资源名部分。

getQueryString 方法返回请求行中的参数部分。

getProtocol方法返回请求行中的协议名和版本。

getContextPath方法返回请求资源所属于的WEB应用程序的路径。

getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。

getPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。

getServletPath方法返回Servlet的名称或Servlet所映射的路径。 

 

 

l  获取所有请求头的编程实例

 

 

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>");

}*/

 

l  利用Referer请求头阻止“盗链”

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

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

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

l  {

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

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

l  }

l  else

l  {

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

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

l    rd.forward(request,response);

l  }

l  利用Referer请求头隐藏JavaScript源码

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

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

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

l  {

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

l    out.println(

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

l  }

 

 

禁止浏览器缓存当前文档内容

l  response.setDateHeader("Expires",0);

l  response.setHeader("Cache-Control","no-cache"); 

l  response.setHeader("Pragma","no-cache");

l  提交、重置、普通按钮如何传送参数

总结:

①     在一个FORM表单中可以有多个提交按钮,单击任何一个提交按钮都可以提交表单,只有被单击的提交按钮的名称和值才被作为参数传递,其它提交按钮的信息不会作为参数传递。

②     表单中的普通按钮与重置按钮的名称和值不会作为参数传递。

③     没有设置name属性的表单字段元素的信息不会作为参数传递。

单行与多行文本输入框如何传送参数

总结:

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

l  单选按钮与复选框如何传送参数

总结:

①     只有被选中的复选框和单选按钮的信息才会作为参数传递,未被选中的复选框和单选按钮的信息不会作为参数传递。

②     对于多个名称相同的复选框,它们可以同时被选中;对于多个名称相同的单选按钮,只能同时选中其中的任意一个。

③     对于被选中的多个同名复选框,它们的信息将以多个名称相同的参数进行传递,即参数列表中会出现多个名称相同的参数。

④     对于没有设置value属性的单选按钮和复选框,当它们被选中时,它们传递的默认参数值为“on”。 

列表框如何传送参数

总结:

①     没有作出选择的列表框的信息不会作为参数传递,就象表单中没有这个列表框的情况一样。

②     如果设置了列表框字段元素的multiple属性,可以选择列表中的多个选项。对于选中的每个选项,它们都会与列表框的名称分别组合成单独的参数后进行传递,这样,参数列表中会出现多个名称为列表框名的同名参数 。

③     当选中没有设置value属性的列表选项时,浏览器使用该选项的标题作为参数值。

使用Javascript防止重复提交表单

<script>

var isCommitted = false;

function checkPost()

{

  if(!isCommitted)

  {

         isCommitted = true;

         return true;

  }

  else

  {

         alert("不能重复提交表单");

         return false;

  }

}

</script>

<form action="servlet/RepeateFormServlet" method="POST" οnsubmit="return checkPost()">...

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值