JSP实现表单验证

第一个体现jsp价值的作业,然而在经历重重问题考验后,Ending

  • 注册表单:register
<%--
  Created by IntelliJ IDEA.
  User: Luminary
  Date: 2017/10/20
  Time: 15:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Register</title>
    <style type="text/css">
        ul
        {
            list-style: none;
            margin: 80px auto;
        }
        li
        {
            margin: 20px;
        }
    </style>
<body>
<form action="Post.jsp" onsubmit="return check();" method="post">
    <ul>
</head>
            <li>
                用户名: <input type="text" name="username" id="name" size="25" style="margin-left: 12px;">
            </li>
            <li>
                密   码: <input type="password" name="password" size="25"style="margin-left: 12px;">
            </li>
            <li>籍   贯:
                <select name="home" style="margin-left: 12px;">
                    <option selected value="杭州">杭州</option>
                    <option value="上海">上海</option>
                    <option value="广州">广州</option>
                    <option value="北京">北京</option>
                    <option value="深圳">深圳</option>
                </select>
            </li>
            <li>
                出生年月:<input type="text" name="data" size="25">
            </li>
            <li>
                性   别: 
                <input type="radio" name="sex" value="男">男  
                <input type="radio" name="sex" value="女">女  
            </li>
            <li>
                爱   好: 
                <input type="checkbox" name="habit" value="Book">Book
                <input type="checkbox" name="habit" value="Running">Running
                <input type="checkbox" name="habit" value="Singing">Singing
                <input type="checkbox" name="habit" value="Dancing">Dancing
                <input type="checkbox" name="habit" value="Game">Game
            </li>
            <li>
                身   高: 
                <input type="text" name="height" size="25"> cm
            </li>
            <li>
                邮   箱: 
                <input type="text" name="email" id="mail" size="25">
            </li>
            <li>
                手   机: 
                <input type="text" name="phone" id="phone" size="25">
            </li>
            <li>
                简   介: 
                <textarea maxlength="15" rows="10" cols="25" name="introduce"></textarea>
            </li>
            <li>
                <input type="reset" value="清空">
                <input type="submit" value="提交">
            </li>
        </ul>
    </form>
<script>
    function check()
    {
        //用户名验证
        var n=document.getElementById("name");
        n = n.value;
        if(n.length<6||n.length>10)
        {
            alert("用户名长度必须在6到10位之间!");
            return false;
        }
        if(n.charAt(0)<'A'||n.charAt(0)>'z')
        {
            alert("用户名必须以首字母开头");
            return false;
        }
        //邮箱验证
        var m=document.getElementById("mail");
        m=m.value;
        if(m.indexOf("@") < 0 )
        {
            alert("邮箱中没有包含@字符!");
            return false;
        }
        //手机验证
        var p = document.getElementById("phone");
        p=p.value;
        if(p.length!=11)
        {
            alert("手机号必须为11位!");
            return false;
        }
    }
//    console.log(document.getElementsByTagName("form"));
//    document.getElementsByTagName("form")[0].onsubmit =check();
</script>
</body>
</html>
  • 提交页面:Post.jsp
<%--
  Created by IntelliJ IDEA.
  User: Luminary
  Date: 2017/10/20
  Time: 16:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=gb2312" language="java" errorPage="error.jsp" %>
<html>
<head>
    <title>Title</title>
    <style>
        ul
        {
            list-style: none;
            margin: 50px;
        }
        li
        {
            margin: 10px;
        }
    </style>
</head>
<body>
    <%request.setCharacterEncoding("UTF-8");%>
    <%
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String home = request.getParameter("home");
        String data = request.getParameter("data");
        String sex = request.getParameter("sex");
        String[] habit = request.getParameterValues("habit");
        String height = request.getParameter("height");
        String email = request.getParameter("email");
        String phone = request.getParameter("phone");
        String introduce = request.getParameter("introduce");
    %>
    <ul>
        <li>
            用户名:<%=username%>
        </li>
        <li>
            密码:<%=password%>
        </li>
        <li>
            籍贯:<%=home%>
        </li>
        <li>
            出生年月:<%=data%>
        </li>
        <li>
            性别:<%=sex%>
        </li>
        <li>
            爱好:
                <%
                    if(habit.length==0)
                        throw new Exception( "您没有选择任何爱好!" );
                    for(int i=0;i<habit.length;i++)
                    {out.println(habit[i]);}
                %>
        </li>
        <li>
            身高:
            <%=height%>
        </li>
        <li>
            邮箱:
            <%=email%>
        </li>
        <li>
            手机:
            <%=phone%>
        </li>
        <li>
            简介:
            <%=introduce%>
        </li>
    </ul>
</body>
</html>
  • 错误页面:error.jsp
<%--
  Created by IntelliJ IDEA.
  User: Luminary
  Date: 2017/10/20
  Time: 17:52
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"  isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    当前页面是:error.jsp<br>
    <%out.print("您没有选择任何爱好,请您返回重新选择爱好,至少选择一个!");%>
</body>
</html>
  1. 实现效果
  2. 1.没有选择爱好,跳转到错误页面

java中进行表单验证的方式 jsp表单验证怎么写_表单

  1. 2.选择爱好,跳转到提交页面显示提交结果

java中进行表单验证的方式 jsp表单验证怎么写_表单_02

下面来整理一下遇到的问题和新学的知识点
1.form标签内的onsubmit可以实现跳转前先验证表单的内容是否正确,如果正确会提交post.jsp。js中如果验证不成功就会返回false,不会提交,直到验证成功才会提交。
onsubmit="return check();"
2. 必须先获取对象才能再获取其值
//var m=document.getElementById("mail").value(X)
var m=document.getElementById("mail");
m=m.value;
3. 在浏览器控制台打印某个标签对象的值,当出现bug是可以调试打印出错误信息。可以在浏览器里面设断点调试js代码。
console.log(document.getElementsByTagName("form"));
4.为了在jsp获取值,需要在前面表单中所有不是用户输入的标签,比如select和radio和checkbox,凡是需要用户进行选择的选项时,一定要加上value的值,这样post.jsp页面才会获取到。紧接上一个问题,当value的值为中文时,post.jsp页面是无法争取显示出中文字符的,这时可以在post.jsp页面加上一句下面代码,中文就可以正常显示。
<%request.setCharacterEncoding("UTF-8");%>
5. 索引第一个字符:charAt(0);
    判断是否包含某个字符:indexOf和0比较

 6. 本次联系主要训练方法:
         request.getParameterValues()
         -复选框返回数组循环可以输出,但是要注意可能会出现异常,例如habit.length=0时post.jsp就会出现异常,所以要注意设置异常页面。
         request.getParameter()
         -返回name与括号内容匹配的标签的值,提取数据。
在要抛出异常的页面:errorPage="error.jsp"
在要显示异常的页面:isErrorPage="true"
7. 在js中绑定事件
document.getElementsByTagName("form")[0].onsubmit =check();