JSP入门教程之客户端验证、常用输出方式及JSTL基本用法

本文讲述了JSP入门教程之客户端验证、常用输出方式及JSTL基本用法。分享给大家供大家参考。具体如下:

一、目标:

① 掌握客户端验证的基本过程;
② 掌握JSP输出信息的方式;
③ 掌握JSTL的基本用法。

二、主要内容:

① 通过实例介绍客户端验证的基本过程;
② 介绍JSP输出信息的基本方式;
③ 通过实例分析介绍JSTL的基本用法。

客户端验证相关的代码在网络上随处可见,并且非常通用,所以一般情况下不需要大家自己编写,但是需要知道如何使用、如何修改。下面介绍基本的使用过程:

1、如何嵌入JavaScript代码

使用JavaSript代码完成用户输入信息的客户端验证,在页面中嵌入JavaScript代码的过程如下:

<script language="JavaScript">
 // 在此处嵌入JavaScript代码
</script>

JavaScript代码必须在这个开始标识和结束标志之间。

2、如何写JavaScript方法

各种验证过程都是以方法的形式存在,JavaScript方法的定义方式如下:

function 方法名(参数列表)
{
 // 方法体
}

与Java中的方法定义不同,function声明要定义方法,不需要返回值类型,可以返回任意结果,参数列表不需要给出参数的类型。下面是一个方法的例子:

function validate(form)
{
 …
}

下面是一个完成用于判断参数是否是数字的方法:

// 判断是否是数字
function isNumber(str)
{
  for(i=0;i<str.length;i++)
  {
   // 如果要判断小数,需要判断小数点
   if(str.charAt(i)>='0' && str.charAt(i)<='9'
    || str.charAt(i)=="-" && i==0)
    continue;
   else
    return false;
  }
  return true;
}

3、如何建立表单提交与验证方法之间的关联?

使用表单form的onsubmit事件完成。

<form name="form1" method="post"
action="process.jsp" onsubmit="return isValidate(form1)">

其中:onsubmit="return isValidate(form1)"部分是对验证方法的调用。

注意:这时候使用的是form的提交事件,使用的是提交按钮。

也可以把提交按钮修改成普通按钮,然后使用按钮的onClick事件调用验证方法。

4、在进行验证的时候要获取输入的信息,如果获取?

表单的名字直到表单元素,再得到值。例如:

代码如下:

userid = form.userid.value;

变量不需要定义可以直接使用。

5、实例:对注册功能中的用户名和口令进行验证

<%@ page contentType="text/html;charset=gb2312"%>
<script language="JavaScript">
 // 进行验证的方法
 function isValidate(form){
  userid = form.userid.value;
  if(userid==""){
   alert("用户ID不能为空");
   return false;
  }else if(userid.length>8 || userid.length<6){
   alert("长度应该为6-8位");
   return false;
  }
  userpass=form.userpass.value;
  if(userpass.length!=8){
   alert("口令的长度不为8!");
   return false;
  }
  return true;
 }
</script>
请注册<br>
<form name="form1" method="post" action="process.jsp" onsubmit="return isValidate(form1)">
 用户ID:<input type="text" name="userid">用户ID长度为6-8位<br>
 口令:<input type="password" name="userpass">要求口令长度为8<br>
 确认口令:<input type="password" name="userpass1"><br>
 性别:<input type="radio" name="sex" value="男" checked>男
   <input type="radio" name="sex" value="女">女<br>
 爱好:<input type="checkbox" name="fav" value="运动">运动
   <input type="checkbox" name="fav" value="音乐">音乐
   <input type="checkbox" name="fav" value="编程">编程<br>
 学历:
  <select name="degree">
   <option value="本科">本科</option>
   <option value="硕士">硕士</option>
   <option value="专科">专科</option>
   <option value="博士">博士</option>
  </select><br>
 备注:
  <textarea name="comment"></textarea><br>
  <input type="submit" value="提交"><input type="reset" value="重置">
</form>

6、常用的验证:通过regiest.jsp文件介绍

这个验证不是最全面的,也不是最优的,如果你需要可以通过网络查找,另外可以查阅JavaScript相关书籍,有很多现成的JavaScript方法可以使用。另外在进行客户端验证的时候可以使用正则表达式,并且比较方便。

下面的代码供参考:

<%@ page contentType="text/html;charset=gb2312"%>
<script language="JavaScript">
 function isValidate(form)
 {
  // 得到用户输入的信息
  userid = form.userid.value;
  username = form.username.value;
  userpass = form.userpass.value;
  userpass2 = form.userpass2.value;
  birthday = form.birthday.value;
  email = form.email.value;
  address = form.address.value;
  phone = form.phone.value;
  // 判断用户ID长度
  if(!minLength(userid,6))
  {
   alert("用户ID长度小于6位!");
   form.userid.focus();
   return false;
  }
  if(!maxLength(userid,8))
  {
   alert("用户ID长度大于8位!");
   form.userid.focus();
   return false;
  }
  // 判断用户名长度
  if(!minLength(username,6))
  {
   alert("用户名长度小于6位!");
   form.username.focus();
   return false;
  }
  if(!maxLength(username,8))
  {
   alert("用户名长度大于8位!");
   form.username.focus();
   return false;
  }
  // 判断口令长度
  if(!minLength(userpass,6))
  {
   alert("口令长度小于6位!");
   form.userpass.focus();
   return false;
  }
  if(!maxLength(userpass,8))
  {
   alert("口令长度大于8位!");
   form.userpass.focus();
   return false;
  }
  // 判断用户名和口令是否相同
  if(username==userpass)
  {
   alert("用户名和口令不能相等!");
   form.userpass.focus();
   return false;
  }
  // 验证两次口令是否相同
  if(userpass != userpass2)
  {
   alert("两次输入的口令不相同!");
   form.userpass.focus();
   return false;
  }
  // 验证生日的格式是否正确
  if(!isDate(birthday))
  {
   alert("生日的格式不正确!");
   form.birthday.focus();
   return false;
  }
  // 验证email的格式是否正确
  if(!isEmail(email))
  {
   alert("Email格式不正确!");
   form.email.focus();
   return false;
  }
  // 验证电话号码的格式是否正确
  if(!isDigital(phone))
  {
   alert("电话号码的格式不正确");
   form.phone.focus();
   return false;
  }
  // 验证地址的长度是否正确
  if(!maxLength(address,50))
  {
   alert("地址长度大于50位!");
   form.address.focus();
   return false;
  }
  return true;
 }
 // 验证是否是空
 function isNull(str)
 {
  if(str.length==0)
   return true;
  else
   return false;
 }
 // 验证是否满足最小长度
 function minLength(str,length)
 {
  if(str.length>=length)
   return true;
  else
   return false;
 }
 // 判断是否满足最大长度
 function maxLength(str,length)
 {
  if(str.length<=length)
   return true;
  else
   return false;
 }
 // 判断是否是数字
 function isDigital(str)
 {
  for(i=0;i<str.length;i++)
  {
   // 允许使用连字符
   if(str.charAt(i)>='0' && str.charAt(i)<='9'
    || str.charAt(i)=="-" && i!=0 && i!=str.length-1)
    continue;
   else
    return false;
  }
  return true;
 }
 // 判断是否是整数
 function isNumber(str)
 {
  for(i=0;i<str.length;i++)
  {
   // 如果要判断小数,需要判断小数点
   if(str.charAt(i)>='0' && str.charAt(i)<='9'
    || str.charAt(i)=="-" && i==0)
    continue;
   else
    return false;
  }
  return true;
 }
 // 判断是否是日期,日期的格式为1988-1-1
 function isDate(date)
 {
  // 查找分隔符
  index1 = date.indexOf("-");
  // 如果分隔符不存在,则不是合法的时间
  if(index1 == -1)
   return false;
  // 获取时间中的年
  year = date.substring(0,index1);
  // 获取时间中的剩下部分
  date = date.substring(index1+1);
  // 查找第二个分隔符
  index1 = date.indexOf("-");
  // 如果不存在第二个分隔符,则不是合法的时间
  if(index1 == -1)
   return false;
  // 获取时间中的月份
  month = date.substring(0,index1);
  // 获取时间中的日
  day = date.substring(index1+1);
  // 判断是否是数字,如果不是则不是合法的时间
  if(isNumber(year) && isNumber(month) && isNumber(day))
  {
   // 判断基本范围
   if(year<1900 || year>9999 || month<1 || month >12 || day<1)
    return false;
   // 判断31天的月
   if((month==1 || month==3 || month==5 || month==7
   || month==8 || month==10 || month==12) && day>31)
    return false;
   // 判断30天的月
   if((month==4 || month==6 || month==9 || month==11)
    && day>30)
    return false;
   // 如果是2月,判断是否为润年
   if(month==2)
   {
    if(year%400==0 || (year%4==0 && year%100!=0))
    {
     if(day>29)
      return false;
    }else
    {
     if(day>28)
      return false;
    }
   }
  }
  else
   return false;
  return true;
 }
 // 判断是否是Email
 function isEmail(email)
 {
  if(email.length==0)
   return false;
  index1 = email.indexOf('@');
  index2 = email.indexOf('.');
  if(index1 < 1    // @符号不存在,或者在第一个位置
  || index2 < 1   // .符号不存在,或者在第一个位置
  || index2-index1 <2 // .在@的左边或者相邻
  || index2+1 == email.length) // .符号后面没有东西
   return false
  else
   return true;
 }
</script>
<html>
 <head>
 <title>注册界面</title>
 </head>
 <body>
 <h2 align="center">请注册</h2>
 <form name="form1" action="register_confirm.jsp" method="post"
   onsubmit="return isValidate(form1)">
  <table align="center">
   <tr><td> 用户ID:</td><td><input type="text" name="userid" value="${param.userid}"> </td></tr>
   <tr><td> 用户ID:</td><td><input type="text" name="userid"> </td></tr>
  <tr><td> 用户名:</td><td><input type="text" name="username"> </td></tr>
  <tr><td> 口令:</td><td><input type="password" name="userpass"></td></tr>
  <tr><td> 确认口令:</td><td><input type="password" name="userpass2"></td></tr>
  <tr><td> 生日:</td><td><input type="text" name="birthday">格式为:1988-1-1</td></tr>
  <tr><td> 学历:</td><td>
   <input type="radio" name="degree" value="专科">专科
   <input type="radio" name="degree" value="本科" checked>本科
   <input type="radio" name="degree" value="硕士研究生">硕士研究生
   <input type="radio" name="degree" value="博士研究生">博士研究生
   <input type="radio" name="degree" value="其他">其他</td></tr>
  <tr><td> 地区:</td><td>
   <select name="local">
    <option value="华东">华东</option>
    <option value="华南">华南</option>
    <option value="华北">华北</option>
    <option value="东北">东北</option>
    <option value="东南">东南</option>
    <option value="西南">西南</option>
    <option value="西北">西北</option>
    <option value="东北">东北</option>
    <option value="华中">华中</option>
   </select></td></tr>
  <tr><td> E-mail:</td><td><input type="text" name="email"></td></tr>
  <tr><td> 地址:</td><td><input type="text" name="address"></td></tr>
   <tr><td> 电话:</td><td><input type="text" name="phone"></td></tr>
  <tr><td> 备注:</td><td>
   <textarea rows="8" name="comment" cols="40"></textarea></td></tr>
  <tr><td> <input type="reset" value="重置"></td><td>
   <input type="submit" value="提交"></td></tr>
  <table>
 </form>
 </body>
</html>

7、主要的输出信息的方式

1)out.println("");

out是内部对象,可以直接使用,但是必须在脚本(<% %>)之内使用。尽量少用。

2)直接输出

如果是静态信息,可以直接在html语言中使用。包含HTML标签。

3)表达式<%=开始,以%>结束

例如:<%="使用表达式输出的信息"%>

4)表达式语言(EL)

要重点掌握。

基本格式:开始标识 ${ 结束标识 }
可以输出各种信息:字符串类型的信息、对象、错误提示信息。

8、 注释的用法

网页注释: <!-- html注释  -->
Java注释: // 单行注释 /* */多行注释
JSP注释: <%-- JSP注释  --%>

9、 在客户端进行了验证,在服务器段是否需要验证?

需要。

原因:客户端可以不通过输入界面直接访问处理文件,这样可以跳过客户端验证,如果不在服务器验证,数据将会有问题。
在客户端进行的验证主要是格式方面的验证,有些东西是必须在服务器端进行验证的。

10、JSTL概述

标准标签库是一些常用的功能,没有使用Java代码而使用了标签来实现。目标是在页面文件中不出现任何java代码。

标准标签库的组成部分:jstl.jar和standard.jar两个压缩包。

如何使用标准标签库:

1)首先需要把两个压缩包放到WEB-INF/lib下面,两个压缩包是标签库的实现文件和描述文件。

2)在页面中需要先声明:

代码如下:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

通过<%@ taglib %>进行声明。uri属性指出要使用的标记库的uri(唯一标识)。
prefix相当于对这个起的别名,在后面使用的时候使用这个别名。

3)调用标记库中的标记

代码如下:

<fmt:requestEncoding value="gb2312"/>

通过"别名+标签的名字"的方式调用这个标签,并设置相应的属性。

希望本文所述对大家的JSP程序设计有所帮助。

(0)

相关推荐

  • jsp 使用jstl实现翻页实例代码

    使用jstl进行显示相对使用jsp来说代码更显得整齐,也使代码量显得较少 复制代码 代码如下: <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="c"  uri = "http://java.sun.com/jsp/jstl/core"

  • STL priority_queue(优先队列)详解

    构造,析构 priority_queue() //默认构造函数,生成一个空的排序队列 priority_queue(const queue&); //拷贝构造函数 priority_queue(const Compare& comp); //构造生成一个空的priority_queue对象, //使用comp作为priority_queue的comparison priority_queue(const value_type* first, const value_type* last);

  • Listloading.js移动端上拉下拉刷新组件

    listloading是一个移动端的上拉.下拉加载更多的组件.主要依赖于iscroll.js v5.1.2基础上开发的组件,基础库可以使用jquery.js或者zepto.js操作dom节点,目前我是使用了zepto.js作为基础库操作dom,以jquery插件的形式存在.如果不想以插件方式使用,则只需要把listloading直接移植你需要的库里面就ok啦.listloading主要针对移动端而生,在使用浏览器自带滚动,用户体验很不友好,与Android和ios差别甚远,所以选择iscroll

  • C++语言 STL容器list总结

    在使用std::list<>链表时,难免会对数据进行添加删除操作.而遍历链表则有两种方式:通过索引访问,象数组一样处理:通过std::list<>::iterator链表遍历器进行访问 STL 中的list 就是一 双向链表,可高效地进行插入删除元素. list不支持随机访问.所以没有 at(pos)和operator[]. list 对象list1, list2 分别有元素list1(1,2,3),list2(4,5,6) .list< int>::iterator

  • JSP和JSTL获取服务器参数示例

    复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSP和JSTL获取服务器参数</

  • stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)

    算法:用来处理群集内的元素.它们可以出于不同的目的而搜寻,排序,修改,使用那些元素.是一种应用在容器上以各种方法处理其内存的行为或功能,如sort(排序),copy(拷贝)- 算法由模板函数体现,这些函数不是容器类的成员函数,是独立的函数,它们可以用于STL容器,也可以用于普通的C++数组等. 头文件:#include<algorithm> 在STL的泛型算法中有4类基本的算法: 1)变序型队列算法: 可以改变容器内的数据: 2)非变序型队列算法:处理容器内的数据而不改变他们: 3)排序值算法

  • 深入浅析STL vector用法

    本文关于stl vector用法的介绍非常详细,具体内容请看下文 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了. Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之

  • C++在成员函数中使用STL的find_if函数实例

    本文实例讲述了C++在成员函数中使用STL的find_if函数的方法.分享给大家供大家参考.具体方法分析如下: 一般来说,STL的find_if函数功能很强大,可以使用输入的函数替代等于操作符执行查找功能(这个网上有很多资料,我这里就不多说了). 比如查找一个数组中的奇数,可以用如下代码完成(具体参考这里:http://www.cplusplus.com/reference/algorithm/find_if/): #include <iostream> #include <algori

  • JSP入门教程之客户端验证、常用输出方式及JSTL基本用法

    本文讲述了JSP入门教程之客户端验证.常用输出方式及JSTL基本用法.分享给大家供大家参考.具体如下: 一.目标: ① 掌握客户端验证的基本过程: ② 掌握JSP输出信息的方式: ③ 掌握JSTL的基本用法. 二.主要内容: ① 通过实例介绍客户端验证的基本过程: ② 介绍JSP输出信息的基本方式: ③ 通过实例分析介绍JSTL的基本用法. 客户端验证相关的代码在网络上随处可见,并且非常通用,所以一般情况下不需要大家自己编写,但是需要知道如何使用.如何修改.下面介绍基本的使用过程: 1.如何嵌入

  • JSP开发中hibernate框架的常用检索方式总结

    总结hibernate框架的常用检索方式 1.hibernate框架的检索方式有以下几种: OID检索:根据唯一标识OID检索数据 对象导航检索:根据某个对象导航查询与该对象关联的对象数据 HQL检索:通过query接口对象查询 QBC检索:通过criteria接口对象查询 SQL检索:通过SQL语句查询  2.HQL检索方式: 查询全部数据:session.createQuery("from 类名"); 根据条件查询:session.createQuery("from 类名

  • JSP入门教程(1)

    JavaServer Pages (JSP)是基于Java的技术,用于创建可支持跨平台及跨Web服务器的动态网页. JSP可与微软的Active Server Pages (ASP)相媲美,但JSP使用的是类似于HTML的标记和Java 代码片段而不是用VBScript.当你使用不提供ASP本地支持的Web服务器(例如 Apache或Netscape服务器)时,你就可以考虑使用JSP了.你虽然也可以为这些服务器弄一个ASP附加软件模块,但是太昂贵了.现在Sun公司并不会因你使用JSP向你收费(虽

  • JSP入门教程之基本语法简析

    本文分析讲述了JSP基本语法.分享给大家供大家参考,具体如下: 1.指令 <%@ 指令%> JSP指令是JSP的引擎.他们不直接产生任何可视的输出,只是指示引擎对剩下的JSP页面需要做什么.指令由<%@ ?%>标记.主要的两种指令是page和include.本文不讨论指令taglib,但在JSP1.1中创建自定义标签时会用到它. 可以在几乎所有的JSP页面顶部找到指令page.尽管并非必须,你可以通过它定义如到何处寻找Java类支持等事项. <%@ page import=&

  • JSP入门教程(2)

    欢迎使用JavaServer Pages(以下简称JSP)技术-制作动态内容网页的方法. 如果你希望学习这篇教程的话,我想你一定是这项技术的新手.你可能想成为一名利用JSP技术开发网络应用程序的程序员或者网页设计师.本教程中包含了一系列JSP的技巧和一些简单的代码的写法,每一步都举了一组例子来讲述原理. 我建议你在学习本教程之前先去看一看FAQ,了解如果配置你的服务器好让他能支持并运行JSP.那样你就可以跳过前边的内容直接看你感兴趣的内容了. OK,费话少说,Let's go! 第一课:真正的开

  • JSP入门教程(4)

    使用脚本 在有些地方,你大概要加一些好的,成熟的程序到你的JSP页里,JSP的标签虽然很强大,但是完成某些工作还是比较费力的困难的.这时你可以使用脚本语言段来补充JSP标签. 使用的JSP引擎是支持脚本语言的,SUN的JSP参考文说明,必须使用Java程序语言来编写脚本,但是其他第三方的JSP引擎允许使用其他语言来写脚本程. 如何增加脚本 首先,你必须了解一些增加脚本元素到JSP页中的一些基本规则 1. 在JSP页面里用Page指令定义脚本(默认值是Java,一般不需要定义) 2. 声明语法<%

  • JSP入门教程(3)

    第二课:用HTML表单 大多数情况下,商业的网站都要有一些表单,比如说输入一下消费者的姓名啦,地址啦,或者敲一个词来用搜索引擎来查一下啦,或者市场人员从来访者处收集一些数据供参考什么的. 那些表单传回的数据怎么处理的? 来访者通过表单向JSP引擎输入了数据,并保存在了request对象中,那么接下来怎么办? 图2-1向你展示了数据流是如何在服务器和客户之间传递的(至少在SUN的JSP reference implementation是这么做的,别的JSP引擎工作起来可能会有一点点的不同,其实大同

  • Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创

    前面简单介绍了Python基本运算,这里再来简单讲述一下Python字符串相关操作 1. 字符串表示方法 >>> "www.jb51.net" #字符串使用单引号(')或双引号(")表示 'www.jb51.net' >>> 'www.jb51.net' 'www.jb51.net' >>> "www."+"jb51"+".net" #字符串可以用"+&

  • Apache Ant自动化脚本入门教程及常用命令介绍

    一 Ant简介 Apache Ant是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的自动化构建.它是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点: 跨平台性.Ant是纯Java语言编写的,所以具有很好的跨平台性 操作简单.Ant是由一个内置任务和可选任务组成的.Ant运行时需要一个XML文件(构建文件). Ant通过调用target树,就可以执行各种任务.由于Ant构建文件 是XML格式的文件,所以很容易维护和书写,而且结构清晰

  • PHP入门教程之表单与验证实例详解

    本文实例讲述了PHP表单与验证.分享给大家供大家参考,具体如下: Demo1.php <?php ob_start(); //重新导向一个 URL //header() //header('Location:Demo2.php'); //上面这句话可以自动跳转到你所想要的页面. //header('Location:http://www.baidu.com'); //上面这句话自动跳转到百度上面去. echo 'baidu.com'; header('Location:http://www.ba

随机推荐