`

[code]表单验证_2.用java在服务器端验证

阅读更多
因为做的是wap端的网站,所以不能用到js,所以验证的工作就要放在服务器端,太麻烦了.

regedit.jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>

<%   
    String path = request.getContextPath();   
    String basePath = request.getScheme() + "://"  
            + request.getServerName() + ":" + request.getServerPort()   
            + path + "/";   
%> 
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

  <head>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/>
    
<title>注册页面</title>

<jsp:include page="include/css.jsp" flush="true" />

</head>
<body>

	<jsp:include page="include/head2.jsp" flush="true" />
	
	<form action="<%=basePath%>servlet/GetCheckno">
	<div>
	手机号:<br/>
	<c:choose>
	<c:when test="${mobno2==1}">
	<span style="color:red;"><b>手机号码格式不正确</b></span><br/>
	</c:when>
	<c:when test="${mobno2==3}">
	<span style="color:red;"><b>注册手机不能为空</b></span><br/>
	</c:when>
	</c:choose>
	<input type="text" name="mobile" value="" /><br/>
	
	<input class="submit" type="submit" value="获取验证码" />
	</div>
	
	</form>
	
	<form action="<%=basePath%>servlet/RegeditServlet" method=post>
	<div>
	
	用户名:<br/>
	<c:choose>
	<c:when test="${userno==1}">
	<span style="color:red;"><b>会员名在5-20个字符内,仅可由中英文、数字、下划线组成</b></span><br/>
	</c:when>
	<c:when test="${userno==2}">
	<span style="color:red;"><b>该用户名已经存在</b></span><br/>
	</c:when>
	<c:when test="${userno==3}">
	<span style="color:red;"><b>用户名不能为空</b></span><br/>
	</c:when>
	</c:choose>
	
	<input type="text" name="username" value="" /><br/>
	
	用户密码:<br/>
	<c:choose>
	<c:when test="${psw1no==1}">
	<span style="color:red;"><b>密码最少不能少于6位字符</b></span><br/>
	</c:when>
	<c:when test="${psw1no==3}">
	<span style="color:red;"><b>密码不能为空</b></span><br/>
	</c:when>
	</c:choose>
	
	<input type="password" name="password" value="" /><br/>
	
	确认密码:<br/>
	<c:choose>
	<c:when test="${psw2no==1}">
	<span style="color:red;"><b>两次输入的密码不相同</b></span><br/>
	</c:when>
	<c:when test="${psw2no==3}">
	<span style="color:red;"><b>确认密码不能为空</b></span><br/>
	</c:when>
	</c:choose>
	
	<input type="password" name="password2" value="" /><br/>
	
	注册手机:<br/>
	<c:choose>
	<c:when test="${mobno==1}">
	<span style="color:red;"><b>手机号码格式不正确</b></span><br/>
	</c:when>
	<c:when test="${mobno==3}">
	<span style="color:red;"><b>注册手机不能为空</b></span><br/>
	</c:when>
	</c:choose>
	
	<input type="text" name="mobile" value="" /><br/>
	
	验证码:<br/>
	<c:choose>
	<c:when test="${chkno==1}">
	<span style="color:red;"><b>验证码格式不正确</b></span><br/>
	</c:when>
	<c:when test="${chkno==3}">
	<span style="color:red;"><b>验证码不能为空</b></span><br/>
	</c:when>
	</c:choose>
	
	<input type="text" name="checkno" value="" /><br/>
	
	注册邮箱:<br/>
	<c:choose>
	<c:when test="${email==1}">
	<span style="color:red;"><b>邮箱格式不正确</b></span><br/>
	</c:when>
	<c:when test="${email==3}">
	<span style="color:red;"><b>邮箱不能为空</b></span><br/>
	</c:when>
	</c:choose>
	
	<input type="text" name="email" value="" /><br/>
	
	<a href="<%=basePath%>servlet/ShowGreetMent">阅读服务协议</a><br/>
	<input class="submit" type="submit" value="同意并注册" />
	</div>
	
	</form>

	<jsp:include page="include/foot.jsp" flush="true" />
	
</body>
</html>


处理的servlet.
package com.mobile.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.MDC;

import com.mobile.dao.jdbc.AccountDaoJdbc;
import com.mobile.dao.jdbc.ChecknoJdbc;
import com.mobile.object.Account;
import com.mobile.service.impl.AccountManagerImpl;
import com.zhao.util.UtilBean;

public class RegeditServlet extends HttpServlet {
	private Log logger = LogFactory.getLog(this.getClass());//日志操作
	private AccountDaoJdbc accountj;
	private ChecknoJdbc checkj;
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request,response);
	}

	/*
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		boolean flat = true;
		int fail = 0;
		String mobile = request.getParameter("mobile");
		String checkno = request.getParameter("checkno");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String password2 = request.getParameter("password2");
		String email = request.getParameter("email");
		
		String checknoSystem = checkj.getCheckno(mobile);
		
		String address="/RegeditSuccess.jsp";
		
		if(checkno.equals(checknoSystem)&&password.equals(password2))
		{
		Account account = new Account();
		
		account.setMob(mobile);
		account.setUser(username);
		account.setPsw(password);
		account.setEmail(email);
		
		accountj.create(account);
		}
		else
		{
			address = "/RegeditFail.jsp";
			if(!password.equals(password2)){
				fail=1;//两次密码不同	
				address=address+"?fail=1";
			}
			else if(!checkno.equals(checknoSystem))
			{
				fail=2;//验证密不对
				address=address+"?fail=2";
			}
			
		}
		
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(address);
		dispatcher.forward(request, response);
		
	}
	*/
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		 MDC.put("method", "用户操作");//日志操作
		String address="/RegeditSuccess.jsp";
		
		boolean flat = true;
		int userno = 0;
		int psw1no =0 ;
		int psw2no =0;
		int mobno =0;
		int chkno =0;
		int emailno =0;
		
		String mobile = request.getParameter("mobile");
		String checkno = request.getParameter("checkno");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String password2 = request.getParameter("password2");
		String email = request.getParameter("email");
		
		
		
		if(username.equals("")||username==null)
		{
			userno=3;
			flat=false;
		}
		else
		{
			if(!UtilBean.checkUser(username))
			{
				userno=1;
				flat = false;
			}
			
			if(!AccountDaoJdbc.checkAccount(username))
			{
				userno=2;
				flat = false;
			}
		}
		
		if(password.equals("")||password==null)
		{
			psw1no=3;
			flat = false;
		}
		else
		{
			if(!UtilBean.checkPsw(password))
			{
				psw1no=1;
				flat = false;
			}
		}
		
		if(password2.equals("")||password2==null)
		{
			psw2no=3;
			flat = false;
		}
		else
		{
			if(!password.equals(password2))
			{
				psw2no=1;
				flat = false;
			}
		}
		
		if(mobile.equals("")||mobile==null)
		{
			mobno=3;
			flat = false;
		}
		else
		{
			if(!UtilBean.checkMobile(mobile))
			{
				mobno=1;
				flat = false;
			}
		}
		
		if(checkno.equals("")||checkno==null)
		{
			chkno=3;
			flat = false;
		}
		else
		{
			String checknoSystem = checkj.getCheckno(mobile);
			if(!checkno.equals(checknoSystem))
			{
				chkno=1;
				flat = false;
			}
		}
		
		if(email.equals("")||email==null)
		{
			emailno=3;
			flat = false;
		}
		else
		{
			if(!UtilBean.checkEmail(email))
			{
				emailno=1;
				flat = false;
			}
		}
		
		//System.out.println(emailno);
		
		if(flat==true)
		{
			Account account = new Account();
			
			account.setMob(mobile);
			account.setUser(username);
			account.setPsw(password);
			account.setEmail(email);
			
			accountj.create(account);
			MDC.put("username",username);//日志操作
			MDC.put("ip","127.0.0.1");//日志操作
			MDC.put("system", "前台WAP端");//日志操作
			logger.info("用户:"+username+"注册");//日志操作
			address="/RegeditSuccess.jsp";
		}
		else
		{
			address = "/regedit.jsp";
			request.setAttribute("userno", userno);
			request.setAttribute("psw1no", psw1no);
			request.setAttribute("psw2no", psw2no);
			request.setAttribute("mobno", mobno);
			request.setAttribute("chkno", chkno);
			request.setAttribute("emailno", emailno);
		}
		RequestDispatcher dispatcher = request.getRequestDispatcher(address);
		dispatcher.forward(request, response);
		
	}

	public void init() throws ServletException {
		accountj = new AccountDaoJdbc();
		checkj = new ChecknoJdbc();
	}

}


工具类

package com.zhao.util;

import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UtilBean {

	/**
	 * 判断字符串是否是整数
	 */
	public static boolean isInteger(String value) {
		try {
			Integer.parseInt(value);
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}
	
	//得到前几天,后几天(月,年)的时间
	//年月日标记,正数前几天,负数后几天
	public static Timestamp getBeforeTime(int nyr,int nyrNum)
	{
		long newlong = System.currentTimeMillis();
		Calendar calendar = GregorianCalendar.getInstance(); 
		calendar.setTimeInMillis(newlong);
		
		calendar.add(nyr,nyrNum);
		Timestamp time = new Timestamp(calendar.getTimeInMillis());
		
		
		//System.out.println(UtilBean.getBeforeTime(Calendar.DAY_OF_MONTH, 100));
		//calendar.add(Calendar.MONTH, 1)
		
		return time;
	}
	
	public static boolean isFloat(String value) {
		try {
			Float.parseFloat(value);
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}
	
	
	
	public static String getSixIntStr()
	{
		Random r = new Random();
		int sint = r.nextInt(1000000);
		DecimalFormat dfInt=new DecimalFormat("000000"); 
		String str = dfInt.format(sint);
		return str;
	}
	
	public static boolean regex(String regex, String value)
	{ 
		Pattern p = Pattern.compile(regex); 
		Matcher m = p.matcher(value); 
		return m.find(); 
	} 
	
	public static boolean checkMobile(String value)
	{
		//手机号码
		String regex = "\\d{11}"; //11位
		return regex(regex,value);	
	}
	
	public static boolean checkUser2(String value)
	{
		String regex = "[a-zA-Z1-9_]{5,20}";
		return regex(regex,value);		
	}
	
	public static boolean checkUser(String value)
	{
		String regex = "\\w{5,20}";
		return regex(regex,value);		
	}
	
	public static boolean checkEmail(String value)
	{
		String regex = "[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+";
		return regex(regex,value);	
	}
	
	public static boolean checkPsw(String value)
	{
		String regex = "\\w{6}";
		return regex(regex,value);		
	}
	
	public static boolean checkStr(String content,String filter)  
	{
		//要过虑的字符,用|分隔
		Matcher m=Pattern.compile(filter).matcher(content);
		if(m.find())
		{
			return true;   //有非法字符
		}
		else
		{
			return false;
		}
	}
	
	public static boolean checkPostNo(String value)
	{
		String regex = "[0-9]{6}";
		return regex(regex,value);		
	}
	
	public static boolean checkCertificate(String value)
	{
		String regex = "^[0-9]{15}$|^[0-9]{18}$";
		return regex(regex,value);		
	}
	
	public static boolean checkTelno(String value)
	{
		//电话
		String regex = "^[0-9]{6,20}$";
		return regex(regex,value);		
	}
	public static boolean checkAddress(String value)
	{
		//地址
		//String regex = "^\\w{1,100}$";
		//return regex(regex,value);	
		
		if(value.length()<100&&value.length()>0)
			return true;
		return false;
	}
	
	public static boolean checkPerson(String value)
	{
		//String regex = "^\\w{1,20}$";
		//return regex(regex,value);	
		if(value.length()<20&&value.length()>0)
			return true;
		return false;
	}
	
	public static boolean isFloat2(String value) //价格不超过10位数字(可含两位小数)
	{
		String regex ="^[0-9]{1,10}$|^[0-9]{1,9}[.][0-9]{1}$|^[0-9]{1,8}[.][0-9]{1,2}$";
		return regex(regex,value);		
	}
	
	public static boolean isFloat7(String value) //价格不超过7位数字(可含两位小数)
	{
		String regex ="^[0-9]{1,7}$|^[0-9]{1,6}[.][0-9]{1}$|^[0-9]{1,5}[.][0-9]{1,2}$";
		return regex(regex,value);		
	}
	
	public static boolean String20(String value)
	{
		//String regex = "^\\w{1,20}$";
		//return regex(regex,value);	
		if(value.length()<20&&value.length()>0)
			return true;
		return false;
	}
	
	public static boolean String7int(String value)
	{
		//String regex = "^\\w{1,20}$";
		//return regex(regex,value);	
		if(value.length()<7&&value.length()>0&&isInteger(value))
			return true;
		return false;
	}
	
	public static boolean String500(String value)
	{
		
		if(value.length()<500&&value.length()>0)
			return true;
		return false;
	}
	
	public static boolean String30(String value)
	{
		
		if(value.length()<30&&value.length()>0)
			return true;
		return false;
	}
	
	public static boolean checkNum(String value)
	{
		String regex = "^[0-9]{1,4}$";
		return regex(regex,value);		
	}
	
	public static boolean checkskren(String value)
	//收货人
	{
		//String regex = "^\\w{1,20}$";
		//return regex(regex,value);	
		if(value.length()<25&&value.length()>0)
			return true;
		return false;
	}	
	
}


思路是servlet传参数回表单页面,控制错误信息的显示.
分享到:
评论

相关推荐

    Validate_code.rar_struts valida_struts valida_struts validate_v

    在`struts validate`中,验证过程通常分为两个阶段:客户端验证和服务器端验证。客户端验证通常使用JavaScript进行,可以即时反馈错误,提高用户体验;而服务器端验证则是必需的,因为它能确保数据安全,不受恶意...

    shopxx_src.zip

    3. **JavaScript文件**:实现网页交互功能,如表单验证、动态效果,扩展名为.js。 4. **图片资源**:可能包括.png、.jpg、.gif等格式的图片,用于网站的视觉设计。 5. **字体文件**:.ttf或.otf,用于自定义网页字体...

    abc_2.zip_ABC

    3. **后端处理**:在服务器端,接收到登录请求后,代码会检查输入的有效性,如果认证成功,则触发打印“hello”的逻辑。 4. **编程语言**:“abc”文件的扩展名没有给出,但根据描述,它可能是一段用任何常见编程...

    蚂蚁课堂电商项目-mayikt_code.zip

    - JavaScript:用于交互逻辑,通常与jQuery或其他库/框架(如React, Vue, Angular)结合使用,实现动态加载、表单验证、路由管理等功能。 - AJAX:用于异步数据请求,提升用户体验。 - Bootstrap或自定义CSS框架...

    Web_JSP_FileUpload.zip_fileupload

    5. **文件处理**:在服务器端,接收到文件后,需要进行合法性检查,如文件类型、大小等。然后可能需要将文件保存到特定的服务器目录,或者存储到数据库中。 6. **异常处理**:文件上传过程中可能会遇到各种问题,如...

    oracle_project.rar_hospital

    描述中的“source code”提示我们,这个压缩包内含有编程代码,可能包括了服务器端和客户端的应用程序。医院系统通常会涉及多个模块,如后台服务器端处理逻辑,前端用户界面展示,以及数据库接口设计。开发者可能...

    JQuery表单验证控件结合struts1的例子

    在Web开发中,数据验证是不可或缺的一环,它...客户端验证可以即时反馈错误,减少不必要的服务器请求,而服务器端验证则作为最后一道防线,保证数据的正确性。在实际开发中,结合使用两者可以构建高效且健壮的Web应用。

    Jsp-color-code.rar_java 验证码_jsp_汉字验证码_随机验证码_验证码

    本项目“Jsp-color-code.rar”关注的是使用Java和JSP技术生成彩色汉字验证码,这涉及到多个关键知识点,下面将详细阐述。 首先,Java验证码的实现通常基于Servlet和JSP技术。Servlet是Java服务器端编程的基础,可以...

    JSP教程_免费.pdf

    Java脚本代码用于处理服务器端逻辑;JSP指令用于控制JSP页面的行为。 - **变量和方法的声明**: - **声明变量**:在JSP页面中,可以使用`和`%&gt;`之间的代码来声明变量。例如,`! int num; %&gt;`声明了一个名为num的...

    java自定义实现验证码功能

    验证码的核心在于生成一段随机字符串,并将其图像化,同时将该字符串保存在服务器端。当用户提交表单时,服务器会验证用户输入的字符串是否与之前生成的字符串一致。 1. **生成随机字符串**: 我们可以使用`Random...

    表单字段类型验证方法

    在开发Web应用时,表单验证是不可或缺的一部分,它确保用户输入的数据符合预期的格式和规则,从而提高数据质量和安全性。Java作为后端语言,通常处理由前端提交的已验证数据,而前端验证则主要通过JavaScript来实现...

    JSP-login-code.rar_login

    通过学习和理解这个实例,开发者可以掌握如何在JSP中处理用户输入,执行服务器端验证,以及如何根据用户操作反馈不同的页面。对于初学者来说,这是一个很好的实践项目,可以帮助他们理解JSP在实际Web开发中的应用。...

    java动态验证码

    本篇文章将深入探讨如何在Java中实现动态验证码的生成与验证。 首先,验证码的核心在于它的随机性和不可预测性。在Java中,我们可以使用`java.util.Random`类来生成随机数字和字符。为了增加复杂性,可以结合使用...

    验证码 验证码例子 jcaptcha jcaptcha例子

    2. 创建验证码:在服务器端,使用jCaptcha API生成验证码,并将其存储在会话(Session)中。 3. 显示验证码:将生成的验证码图像发送到客户端,一般通过HTTP响应流的方式。 4. 用户输入:用户在前端页面输入看到的...

    java源码:Java (Jsp)制作简单的表单程序.rar

    2. **JSP生命周期**:JSP页面在服务器端经历翻译、编译、加载和实例化四个阶段。最终,它会被转换为一个Servlet类,由Web容器执行。 3. **动作指令**:例如`&lt;jsp:include&gt;`、`&lt;jsp:forward&gt;`和`&lt;jsp:useBean&gt;`,...

    谷歌验证码kaptcha安装与使用教程

    - 当用户提交表单时,服务器端会收到用户输入的验证码,通过比较用户输入的验证码与之前保存在session中的验证码来验证其有效性。如果一致,表示验证通过;如果不一致,提示用户重新输入。 5. **使用Kaptcha的其他...

    eform_表单_

    2. **表单生成**:表单生成通常涉及编程技术,例如HTML、JavaScript、CSS以及服务器端语言(如ASP.NET、PHP、Java等)。在这个例子中,文件名如show.aspx、save.aspx和data.aspx可能对应着显示、保存和处理数据的...

    ajx验证代码

    通过AJAX可以实现在不刷新页面的情况下与服务器进行交互,从而完成各种表单验证操作。这种方式不仅能够提升用户体验,还能减轻服务器端的压力。 ### 二、AJAX 验证实现原理 AJAX验证主要通过以下步骤实现: 1. **...

    JAVA上百实例源码以及开源项目源代码

    Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...

    kaptcha com.google.code

    5. 验证输入:在客户端提交表单时,验证输入的验证码是否与服务器端保存的一致。 三、Kaptcha的高级特性 1. 文本配置:Kaptcha支持自定义字符集,可以控制生成的验证码包含哪些字符,如数字、字母或特殊符号。 2. ...

Global site tag (gtag.js) - Google Analytics