一个验证用户名唯一性的例子

过滤器 Filter

Filter,Listener

监听器和过滤器,都是一种特殊的Servlet,其中监听器是用来处理服务器端事件,过滤器是在请求送出以后,响应到达客户端之前的事情进行处理。

用户的请求到达Servlet(JSP)之前,先经过过滤器处理,服务器的响应到达客户浏览器之前,也要先经过过滤器的处理。

过滤器可以有多个,形成过滤器链filter chain。

一、可以设置对哪些页面或Servlet使用过滤器

1.应用程序中所有资源 /*
2.指定的类型文件资源 *.html
3.指定的目录下的所有文件 /folder_name/*
4.指定的servlet myfilter.LoggerServlet
6./simplefilter.html
7.指定目录下指定类型的单一文件 /dir_name/index.jsp

以上都要注意是否有斜杠“/”

二、可以设置对何种请求方式使用过滤器,请求方式包括(request,forward,include,exception)

request

href=”a.jsp”

response.sendRedirect(“a.jsp”);

window.open(“a.jsp”);

location.href=”a.jsp”;

src=”a.jsp”

………

forward 页面跳转

<%jsp:forward ….

sendForward …

include

有两种include其他页面的方法,一种是指令标签<%@ include file=”xxx.jsp”%>,一种是动作标签

execetion

……

一个验证用户名唯一性的例子:

register.jsp功能
1.用户输入用户名密码
2.注册按钮
3.检查用户按钮
4.post uname到CheckIt

CheckIt功能:
1.获得用户名
2.取得Map
3用户名与Map钟的Key比较(contain)

welcome.jsp功能
1.欢迎界面

问题
(注:有一个隐藏按钮,它的值flag有三种状态
0代表用户没按过检测
1代表用户名不能通过(Map中已存在)
3代表用户名能通过

有一种可能,用户写了个可以通过检测的Map中不存在的用户名,通过检测后,改为一个Map中已经存在的用户名,此时不按检测用户名,直接注册,它还是能通过到welcome.jsp 既造成用户名重复。

解法1:
只要有修改用户民输入框就要强迫用户再次检测,——>有修改——>用户名输入框就有获得焦点与失去焦点的过程——>每次用户名输入框失去了焦点都强制flag变为0,让用户再检测。
代码:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="jslib/jquery.js">
</script>
<script type="text/javascript">
$(document).ready(function(e) {

    $("input[type='text'][name='uname']").blur(function(e) {
        $("input[type='hidden'][name='flg']").val(0);
    });
    $("#info").css("color","red");
    $("input[type='button'][name='check']").click(function(e) {
        if($.trim($("input[type='text'][name='uname']").val()).length==0)
        {
            $("#info").html("请先输入用户名");
            return false;
        }//把用户名传到servlet先保证不为空
        $.post("CheckIt",{uname:$("input[type='text'][name='uname']").val()},function(data)
        {
            var s=new Array();
            s=data.split("$");
            $("input[type='hidden'][name='flg']").val(s[0]);
            $("#info").html(s[1]);

        })//传到servlet,得到返回
    });
    $("form[name='f1']").submit(function(e) {

        if($("input[type='hidden'][name='flg']").val()==0)
        {
            $("#info").html("请先检查用户名");
            return false;
        }//一开始的flg为0,必须要检查改变flg值

        //if($.trim($("input[type='text'][name='uname']").val()).length==0)
        //{
        //  $("#info").html("请先输入用户名");
        //  return false;
        //}
        //$.ajax({async:false});
        //var s=new Array();
        //var tips=" ";
        //$.post("CheckIt",{uname:$("input[type='text'][name='uname']").val()},function(data)
                //{

                    //s=data.split("$");
                    //$("input[type='hidden'][name='flg']").val(s[0]);
                    //tips=s[1];
                    //alert(tips);//有执行

                        //});
        //alert(tips);
        if($("input[type='hidden'][name='flg']").val()==1)
         {
             //tips=s[1];
             $("input[type='hidden'][name='flg']").val(0);
             //alert(tips);
             $("#info").html("用户名重复!");
             return false;

         }
         if(($("input[type='hidden'][name='flg']").val()==2)&&($.trim($("input[type='password'][name='pwd']").val()).length==0))
         {



                $("#info").html("请输入密码"); 

                $("input[type='hidden'][name='flg']").val(0);//若不想再次检查用户名就不用加
                return false;
         }
         return true;
        // if((($.trim($("input[type='password'][name='pwd']").val()).length!=0)&&($("input[type='hidden'][name='flg']").val()==2)))
             //{



                //$("#info").html(s[1]);
                //return false;

                //return false;
                //return false;
                //else
                    //{
                    //return true;
                    //}



            // }



    });
});
</script>
</head>
<body>
<form name="f1" action="welcom.jsp">
<input type="hidden" name="flg" value="0"/>
<table border="1">
  <tr>
    <td width="80">用户名</td>
    <td width="94"><input type="text" name="uname"/></td>
  </tr>
  <tr>
    <td>密码</td>
    <td><input type="password"  name="pwd"/></td>
  </tr>
  <tr>
    <td><input type="button" name="check" value="检查用户名"/></td>
    <td><input type="submit"  value="注册"/></td>
  </tr>
</table>
<div id="info"></div>
</form>
</body>

解法2:在注册按钮中,每次按注册都再一次提交都后台检测验证用户名

代码:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
<script type="text/javascript" src="jslib/jquery.js">
</script>
<script type="text/javascript">
$(document).ready(function(e) {

    $("#info").css("color","red");
    $("input[type='button'][name='check']").click(function(e) {
        if($.trim($("input[type='text'][name='uname']").val()).length==0)
        {
            $("#info").html("请先输入用户名");
            return false;
        }//把用户名传到servlet先保证不为空
        $.post("CheckIt",{uname:$("input[type='text'][name='uname']").val()},function(data)
        {
            var s=new Array();
            s=data.split("$");
            $("input[type='hidden'][name='flg']").val(s[0]);
            $("#info").html(s[1]);

        })//传到servlet,得到返回
    });
    $("form[name='f1']").submit(function(e) {

        if($("input[type='hidden'][name='flg']").val()==0)
        {
            $("#info").html("请先检查用户名");
            return false;
        }//一开始的flg为0,必须要检查改变flg值
        if($.trim($("input[type='text'][name='uname']").val()).length==0)
        {
            $("#info").html("请先输入用户名");
            return false;
        }
        var s=new Array();
        var tips="";

        $.ajax({//注意一定要用这个方式传数据到后台
            async:false,
            url:"CheckIt",
            type:"POST",
            data:{uname:$("input[type='text'][name='uname']").val()},
            success: function(data){
                alert(data+"1");//得到数据
                tips=data;
                alert(tips+"2");//得到数据
            }

        });
        alert(tips+"3");//得到数据
        s=tips.split("$");
        alert(s[0]+"4");
        if(s[0]==1){
            $("#info").html(s[1]);
            return false;
        } 
        if((s[0]==2)&&($.trim($("input[type='password'][name='pwd']").val()).length==0))
        {
            $("#info").html("密码不能为空");
            return false;

        }
        return true;
    });
});
</script>
</head>
<body>
<form name="f1" action="welcom.jsp">
<input type="hidden" name="flg" value="0"/>
<table border="1">
  <tr>
    <td width="80">用户名</td>
    <td width="94"><input type="text" name="uname"/></td>
  </tr>
  <tr>
    <td>密码</td>
    <td><input type="password"  name="pwd"/></td>
  </tr>
  <tr>
    <td><input type="button" name="check" value="检查用户名"/></td>
    <td><input type="submit"  value="注册"/></td>
  </tr>
</table>
<div id="info"></div>
</form>
</body>

从这个问题钟要认识到一个问题:
可以通过alert一步一步接近问题的根源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值