表单的验证:客户端验证和服务器端验证
表单的确认
客户端确认:
减少服务器负载
缩短用户等待时间
兼容性难
服务器端确认:
统一确认
兼容性强
服务器负载重
客户端验证例子
首先建立一个表单,在其提交时用JavaScript方法进行验证,若该方法返回true,则进行表单的提交,若返回false,则表单不提交。
其中用于验证的JavaScript方法如下:
在验证有误的时候,弹出对话框提示,并且返回false,不提交表单。
完整的login.jsp如下(在客户端验证的时候可以先不管转向的Servlet):
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
但是客户端的验证是不可靠的,用户可以查看源代码,找到表单action的Servlet,然后转向这个地址,将参数用?连接在地址之后,这时候参数是没有经过客户端校验的。
服务器端验证例子
从表单中获得参数:JSP通过request内置对象获取表单信息,用不同的方法获取不同种类的信息。
服务器端验证程序,先将客户端验证部分去掉,即去掉 表单中的:οnsubmit="return validate()"
那么用户在表单中提交的数据将直接传到服务器端,服务器端Servlet对其进行验证:
方式如下:有错误时将错误信息放在一个String类型的List中,最后判断这个List是否为空,如果为空,转向验证成功页面;如果List不为空,则转向失败页面,显示错误信息。
package com.shengqishiwind.servlet;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ValidateServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); String repassword = req.getParameter("repassword"); Listlist = new ArrayList (); if(null == username || "".equals(username)) { list.add("username can't be blank!"); } if(null == password || password.length()<6 || password.length()>10) { list.add("password should be between 6 and 10"); } if(null == repassword || repassword.length()<6 || repassword.length()>10) { list.add("repassword should be between 6 and 10"); } if(null != password && null != repassword && !password.equals(repassword)) { list.add("password and repassword don't match!"); } //有两种结果:验证通过和不通过 if(list.isEmpty()) { req.setAttribute("username", username); req.setAttribute("password", password); req.getRequestDispatcher("../success.jsp").forward(req, resp); } else { req.setAttribute("error", list); req.getRequestDispatcher("../error.jsp").forward(req, resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); }}
成功页面JSP body部分:
username:<%= request.getAttribute("username") %> password:<%= request.getAttribute("password") %>
失败页面:
login failed
<% Listlist = (List )request.getAttribute("error"); for(String str: list) { out.println(str+" "); } %>