HttpServletRequest

简介

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

请求行 POST /demo/login HTTP/1.1

请求消息头

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

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

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

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

获取请求头信息

getHeader方法

getHeaders方法

getHeaderNames方法

getIntHeader方法

getDateHeader方法

getContentType方法

getContentLength方法

getCharacterEncoding方法

例:

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

     }*/

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

例:

Stringreferrer = request.getHeader("referer");

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

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

{

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

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

}

else

{

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

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

     rd.forward(request,response);

}

利用Referer请求头隐藏JavaScript源码

例:

Stringreferrer = request.getHeader("referer");

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

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

{

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

     out.println(

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

}

客户端身份认证实践

StringencodedAuth = request.getHeader("Authorization");

//要求客户端发送身份认证信息,并且只能是BASIC认证方式中

if(encodedAuth == null ||!encodedAuth.toUpperCase().startsWith("BASIC"))

{

     response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);

     response.setHeader("WWW-Authenticate","BASICrealm=\"it315\"");

     //当用户单击登录框中的“取消”按钮时,将输出下面的内容

     out.println("没有传递用户身份!");

     return ;

}

使用Javascript防止重复提交表单

<script>

varisCommitted = false;

functioncheckPost()

{

     if(!isCommitted)

     {

         isCommitted = true;

         return true;

     }

     else

     {

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

         return false;

     }

}

</script>

<formaction="servlet/RepeateFormServlet" method="POST"onsubmit="return checkPost()">...

分析文件上传的请求消息结构

ServletInputStreamsis = request.getInputStream();

StringfilePath = getServletContext().getRealPath("/body.out");

FileOutputStreamfos = new FileOutputStream(filePath);

byte[]buf = new byte[1024];

intlen = sis.read(buf,0,1024);

while(len!= -1)

{

     fos.write(buf,0,len);

     len = sis.read(buf,0,1024);

}

fos.close();

sis.close();

了解中文字符的URL编码

publicstatic String encode(String s,String enc)
           throwsUnsupportedEncodingException

publicstatic String decode(String s,String enc)
           throwsUnsupportedEncodingException

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值