java EE 项目:petstore 从一个简单项目看 java web 如何在本jsp页面上对用户输入的格式进行限制与验证

本文主要是介绍java EE 项目:petstore 从一个简单项目看 java web 如何在本jsp页面上对用户输入的格式进行限制与验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目说明:
在我们写一些类似于登入注册页面,需要用户输入信息时,往往要对用户的输入信息的格式进行验证与限制。一般我们会将表单提交后在另一个Servlet或jsp页面上进行验证,但是一出错页面就会重新刷新,使得之前输入的信息丢失,这样用户体验就会很差。
现在的一些流行的网页,都是在输入未提交之前就会提醒用户,使用户能及时的进行修改。

接下来,我们就通过一个小的练习,来看看 如何实现在本jsp页面上对用户输入信息的格式进行限制与验证。
比如:提醒用户名不能为空,电话格式不对,时间格式不对,或者是通过局部刷新来验证是否用户名重复等等效果。

相关的技术:JQuery ,正则表达式, AJAX (本实验还没有涉及到,这是关于局部刷新的技术)

注意:本博客重点在于后面的add.jsp的实现

项目需求:
这里写图片描述
这里写图片描述

项目实现:

(1)数据库设计:
这里写图片描述
这里写图片描述

(2)效果图:
按种类查找:
这里写图片描述
昵称不能为空:
这里写图片描述
日期不能为空:
这里写图片描述
日期格式验证:
这里写图片描述
正确输入全部信息:
这里写图片描述
插入成功:
这里写图片描述

数据库更新
这里写图片描述

源代码:

(1)项目整体结构:三层结构 数据层,业务层,表示层
这里写图片描述

本文重点
表示层:
这里写图片描述
这里写图片描述

showPet.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head></head><body><div id = "pet"><form id="pets" action="showPetAction.jsp" method="post"><table colspan = "2" align="center" ><tr><td><strong>品种 </strong></td><td><select style = "width:150px;" name = "breed" id = "breed"><option value = ""> --请选择--</option><option value = "狗"></option><option value = "猫"></option><option value = "鸟"></option><option value = "蛇"></option></td><td><input id="btnSubmit" type="submit" name="btnSubmit" value="查询" /><a href="addPet.jsp">新增宠物</a></td></tr></table>    </form><table border = "1" align="center"><tr><td style = "width:150px;"><strong>宠物名称 </strong></td><td style = "width:150px;"><strong>出生日期</strong></td><td style = "width:150px;"><strong>性别</strong></td></tr><c:forEach var="pet" items="${pets}"><tr><td style = "width:150px;"><strong>${pet.pet_Name}</strong></td><td style = "width:150px;"><strong>${pet.getBirthday()}</strong></td><td style = "width:150px;"><strong>${pet.pet_Sex}</strong></td></tr></c:forEach></table></div></body>
</html>

showPetAction.jsp:

<%@page import="com.petstore.biz.impl.PetBizImpl"%>
<%@page import="com.petstore.biz.PetBiz"%>
<%@page import="com.petstore.entity.Pet"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%request.setCharacterEncoding("utf-8");String breed = request.getParameter("breed");List<Pet> pets = new ArrayList<Pet>();PetBiz petBiz = new PetBizImpl();pets = petBiz.getPetsByBreed(breed);if(pets.size() > 0){request.setAttribute("pets", pets);request.getRequestDispatcher("showPet.jsp").forward(request, response);}else {request.getRequestDispatcher("showPet.jsp").forward(request, response);}%>

addPet.jsp:
请注意head中的script中的JQuery函数的申明与注册:
要想运行JQuery的函数,需要添加一下内容:
这里写图片描述

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><link type="text/css" rel="Stylesheet" href="style/front.css"/><script type="text/javascript" src="script/jquery-1.4.1.js"></script><script type="text/javascript">function checkPetName(){var pet_name = $("#pet_name").val();if(pet_name == ""){$("#pet_name").next(".error").text("昵称不能为空!");alert("昵称不能为空!");return false;}else {$("#pet_name").next(".error").text("");return true;}}function checkBirthday(){var birthday = $("#birthday").val();if(birthday == ""){$("#birthday").next(".error").text("birthday不能为空");return false;}else {$("#birthday").next(".error").text("");var reg = /^[1-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]$/;if(reg.test(birthday)) //验证格式是否匹配{$("birthday").next(".error").text("");return true;}else {alert("birthday格式不正确");return false;}}}$(function(){$("#pet_name").blur(checkPetName);$("#birthday").blur(checkBirthday);});</script></head><body ><form id="" action="AddServlet" method="post" ><table border = "1" align="center" style = "width:420px;"><tr><td align="center" colspan = "2"><strong>宠物的基本信息</strong></td></tr><tr><td><strong>昵称:</strong></td><td><input class="txt" type="text" id="pet_name" name="pet_name" style = "width:180px;"/> <label class="error"></label></td></tr><tr><td><strong>品种:</strong></td><td><select style = "width:180px;" name = "pet_breed" id = "pet_breed"><option value = ""> --请选择--</option><option value = "狗"></option><option value = "猫"></option><option value = "鸟"></option><option value = "蛇"></option></td></tr><tr><td><strong>性别:</strong></td><td><input  type="radio" name="pet_sex" value="雄" />雄 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input  type="radio" name="pet_sex" value="雌" /></td></tr><tr><td>出生日期:</td><td><input class="txt" type="text" id="birthday" name="birthday" style = "width:180px;"/> 日期格式:yyyy-mm-dd  <label class="error"></label></td></tr><tr><td>宠物描述:</td><td><textarea  id="description" name="description" style = "width:350px;"> </textarea> <label class="error"></label></td></tr><tr><td></td><td ><input id="btnSubmit" type="submit" name="btnSubmit" value="提交" /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" name="reset" id="reset" value="重置" /></td></tr><tr><td colspan="2" align="center" ><label class="error">${error}</label></td></tr></table></form></body></html>

AddServlet:

package com.petstore.servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.text.SimpleAttributeSet;import com.petstore.biz.PetBiz;
import com.petstore.biz.impl.PetBizImpl;
import com.petstore.entity.Pet;public class AddServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset = utf-8");request.setCharacterEncoding("utf-8");String pet_name = request.getParameter("pet_name");String pet_breed = request.getParameter("pet_breed");String pet_sex = request.getParameter("pet_sex");String description = request.getParameter("description");DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {Date date = sdf.parse(request.getParameter("birthday"));Pet pet = new Pet(pet_name,pet_breed,pet_sex,date,description);PetBiz petBiz = new PetBizImpl();int count = petBiz.addPet(pet);if(count > 0){request.setAttribute("error", "插入新的宠物!");request.getRequestDispatcher("addPet.jsp").forward(request, response);}else {request.setAttribute("error", "插入失败!");request.getRequestDispatcher("addPet.jsp").forward(request, response);}} catch (Exception e) {e.printStackTrace();}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

业务层:

接口:PetBiz.java:

package com.petstore.biz;import java.util.List;import com.petstore.entity.Pet;public interface PetBiz {List<Pet> getPetsByBreed(String breed);int addPet(Pet pet);
}

实现:PetBizImpl.java:

package com.petstore.biz.impl;import java.util.List;import com.petstore.biz.PetBiz;
import com.petstore.dao.PetDao;
import com.petstore.dao.impl.PetDaoImpl;
import com.petstore.entity.Pet;public class PetBizImpl implements PetBiz{PetDao petDao = new PetDaoImpl();public List<Pet> getPetsByBreed(String breed) {return petDao.getPetsByBreed(breed);}public int addPet(Pet pet) {return petDao.addPet(pet);}}

数据层:

实体 Pet.java:

package com.petstore.entity;import java.util.Date;public class Pet {private int pet_Id;private String pet_Name;private String pet_Breed;private String pet_Sex;private Date Birthday;private String description;public Pet(){}public Pet(String pet_Name, String pet_Breed, String pet_Sex,Date birthday, String description) {super();this.pet_Name = pet_Name;this.pet_Breed = pet_Breed;this.pet_Sex = pet_Sex;Birthday = birthday;this.description = description;}public int getPet_Id() {return pet_Id;}public void setPet_Id(int pet_Id) {this.pet_Id = pet_Id;}public String getPet_Name() {return pet_Name;}public void setPet_Name(String pet_Name) {this.pet_Name = pet_Name;}public String getPet_Breed() {return pet_Breed;}public void setPet_Breed(String pet_Breed) {this.pet_Breed = pet_Breed;}public String getPet_Sex() {return pet_Sex;}public void setPet_Sex(String pet_Sex) {this.pet_Sex = pet_Sex;}public Date getBirthday() {return Birthday;}public void setBirthday(Date birthday) {Birthday = birthday;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}

接口 PetDao.java:

package com.petstore.dao;import java.util.List;import com.petstore.entity.Pet;public interface PetDao {List<Pet> getPetsByBreed(String breed);int addPet(Pet pet);
}

实现 PetDaoImpl.java:

package com.petstore.dao.impl;import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import com.petstore.dao.PetDao;
import com.petstore.entity.Pet;public class PetDaoImpl extends BaseDao implements PetDao{public List<Pet> getPetsByBreed(String breed) {List<Pet> pets = new ArrayList<Pet>();String sql = "select * from pet where Pet_Breed = ?";try {openConnection();ResultSet rs = executeQuery(sql, new Object[]{breed});while(rs.next()){Pet pet = new Pet();pet.setPet_Id(rs.getInt("Pet_ID"));pet.setPet_Name(rs.getString("Pet_Name"));pet.setPet_Sex(rs.getString("Pet_Sex"));pet.setPet_Breed(rs.getString("Pet_Breed"));pet.setBirthday(rs.getDate("Birthday"));pet.setDescription(rs.getString("Description"));pets.add(pet);}} catch (Exception e) {e.printStackTrace();}finally{closeResource();}return pets;}public static void main(String[] args) {PetDao petDao = new PetDaoImpl();/*Pet pet = new Pet();pet.setPet_Name("花花");pet.setPet_Breed("狗");pet.setPet_Sex("雌");DateFormat sdf = new SimpleDateFormat("yyy-MM-dd");try {Date birthday = sdf.parse("2016-02-02");pet.setBirthday(birthday);int count = petDao.addPet(pet);System.out.println(count);} catch (Exception e) {e.printStackTrace();}*/List<Pet> pets = petDao.getPetsByBreed("狗");System.out.println(pets.size());for(Pet pet : pets){System.out.println(pet.getBirthday());}}public int addPet(Pet pet) {int count = 0;try {String sql = "insert into pet (pet_name,pet_sex,pet_breed,birthday,description) values(?,?,?,?,?)";Object[] params = new Object[]{pet.getPet_Name(),pet.getPet_Sex(),pet.getPet_Breed(),pet.getBirthday(),pet.getDescription()};openConnection();count = executeUpdate(sql, params);sql = "select last_insert_id()";ResultSet rs = executeQuery(sql, null);if(rs.next()){pet.setPet_Id(rs.getInt(1));}} catch (Exception e) {e.printStackTrace();}finally{closeResource();}return count;}}

实现 BaseDao.java:数据库函数的封装

package com.petstore.dao.impl;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class BaseDao {String className = "com.mysql.jdbc.Driver";String dbUrl = "jdbc:mysql://localhost:3306/musicdb";Connection connection;  //连接PreparedStatement statement; //命令ResultSet resultSet; //结果集//打开连接public void openConnection() throws ClassNotFoundException, SQLException {//加载驱动类Class.forName(className);connection = DriverManager.getConnection(dbUrl,"root","root");}//增public int executeUpdate(String sql, Object[] params) throws SQLException{statement = connection.prepareStatement(sql);if(params != null) //追加参数{int i = 1;for(Object object : params){statement.setObject(i, object);i++;}}//执行sqlint count = statement.executeUpdate();return count;}//查询public ResultSet executeQuery(String sql,Object[] params) throws SQLException{statement = connection.prepareStatement(sql);if(params != null) //追加参数{int i = 1;for(Object object : params){statement.setObject(i, object);i++;}}resultSet  = statement.executeQuery();return resultSet;}//释放资源public void closeResource(){try {if(resultSet != null){resultSet.close();}if(statement != null){statement.close();}if(connection != null){connection.close();}} catch (Exception e) {e.printStackTrace();}}
}

这篇关于java EE 项目:petstore 从一个简单项目看 java web 如何在本jsp页面上对用户输入的格式进行限制与验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679491

相关文章

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定