Servlet的应用--Referer请求和参数传递

来源:互联网 发布:约瑟夫环java简单实现 编辑:程序博客网 时间:2024/05/16 07:14

1.referer的应用

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

         第一步:

               建一个MyHtml.html,内容为

               <a href = “http://localhost:8080/demoWeb/test”>retr</a>

        第二步:在servlet中判断是否是本地访问

             //获取请求消息封装的referer头字段的值

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

       //用getServerName()获取localhost

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

   //判断获取的地址是否为空,如果为空,则跳转页到dowm.html,如果不为空,输出

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

          out.println("deading downding");

       }else{    

          RequestDispatcherrequest.

getRequestDispatcher("/down.html");

              rd.forward(request, response);

       }

    第三步:通过地址栏访问

        在第一步有一个超链接,当运行MyHtml.html时,这个页面显示出来之后,点击超链接,应该是跳转到另一个界面。

       请求消息包含referer头字段,超链接所在的html页面的url地址

                    Referrer:http://localhost:8080/demohtmlWeb/MyHtml.Html

如果输入的地址是http://localhost:8080/demohtmlWeb/test

             则输入的地址不包含请求消息头字段referer,为空

注:

             点击超链接的时候,是向web服务器第二次发送了一个servlet请求

 

(2)利用referer可以隐藏javascript 代码:

       第一步:创建一个Hide.html的文件,写一段javascript代码来作为隐藏的脚本

             <body>

           <script text="text/javascript" src="servlet/hide"></script>

         </body>

       第二步:在servlet中判断输入的地址是否为空

             //隐藏javascript代码

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

       //获取的是localhost

       String sitePart ="http://"+request.getServerName();               if(referrer!=null &&referrer.startsWith(sitePart)){

out.println("document.write('这是一段重要的javascript代码')");

    第三步:测试结果

           在地址栏上输入http://localhost:8080/demoWeb/Hide.html

       当输入这个地址之后,页面上不会有任何的显示,其实是有显示的,在打开Hide.html中转向的servlet地址在地址栏中输出,则会显示下载,其结果是下载之后的文件打开是空的,其实是隐藏了。

 

2.浏览器传递参数信息的细节:

(1)提交、重置、普通按钮传送参数

        String button= request.getParameter(“button”);

        注:

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

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

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

 

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

        String text =request.getParameter(“button”); 

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

 

(3)单选按钮与复选框如何传送参数

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

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

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

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

 

(4)隐藏表单字段与图像字段如何传送参数

                    获取:                 

String hidden = request.getParameter("hidden1");

        System.out.println(hidden);

(1)隐藏表单字段元素总是被作为参数传递给WEB服务器。如果要在提交FORM表单时将网页中的JavaScript程序获得的信息或者上次的WEB服务器端程序产生的标记信息传送给WEB服务器,使用隐藏字段就是一个很好的办法。

(2)图像字段元素也可以提交FORM表单,用户单击图像字段元素后,表单中的其他信息和图像上单击处的x、y坐标一起传送给服务器,x坐标对应的参数名是图像元素名后加上.x(如image1.x),y坐标对应的参数名是图像元素名后加上.y(如image1.y)。

 

(5)列表框如何传送参数

             单选的情况:

String department =request.getParameter("department");

          System.out.println(department);  //获取的是value

       多选的情况:

          Stringdepartment[] = request.getParameter("department");

         System.out.println(department);  //获取的是value

    注:

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

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

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

(6)使用Javascript防止重复提交表单

                    在<head></head>标签中插入即可

<script>

var isCommitted = false;

function checkPost()

{

                                  if(!isCommitted)

                                  {

                                        isCommitted = true;

                                        return true;

                                  }

                                  else

                                  {

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

                                        return false;

                          }

}

</script>

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

 

(7)彻底删除和删除的思路分析

1、要彻底删除要在数据库中

             Delete from 表名

             Where id in(‘01’,’02’,’03’);

2、只是删除会垃圾箱里

Update 表名

Set flag=1

Where id in(‘01’,’02’,’03’);

 3、前台所做的事:

获取复选框中的所有制

<input type=”checkbox”value=”001”,name=”booklist”/>

<input type=”checkbox”value=”002”,name=”booklist”/>

<input type=”checkbox”value=”003”,name=”booklist”/>

<input type=”checkbox”value=”004”,name=”booklist”/>

<input type=”checkbox”value=”005”,name=”booklist”/>

4、在servlet中获取

String arr[] = request.getParameterValues(“booklist”):

String s = “”;

if(arr!=null){

           for(Stringarr1:arr){

             System.out.println(arr1);

          }

 

原创粉丝点击