主页面
登录页面
注册页面
个人信息页面
商品详细信息页面
购物车页面
结算页面
function FocusItem(obj) {
var focus=$(obj).next('span');
if (focus.attr('class')=='error'){
obj.value="";
}
focus.html("");
focus.removeClass("error");
}
function BlueItem(obj) {
var msgBox=$(obj).next('span');
switch ($(obj).attr('name')) {
case "userName":
if (obj.value==""){
msgBox.addClass('error');
msgBox.html('用户名不能为空');
}else{
var url="userIdCheck?useName="+encodeURI($(obj).val())+"&"+new Date().getTime();
$.get(url,function (data) {
if (data>0){
msgBox.addClass('error');
msgBox.html("用户名已存在,请登录");
}
})
}
break;
case "name":
if (obj.value==""){
msgBox.addClass('error');
msgBox.html('姓名不能为空');
}
break;
case "passWord":
if (obj.value==""){
msgBox.addClass('error');
msgBox.html('密码不能为空');
}
break;
case "rePassWord":
if (obj.value==""){
msgBox.addClass('error');
msgBox.html('确认密码不能为空');
}else if (obj.value!=$("input[name='passWord']").val()){
msgBox.addClass('error');
msgBox.html('两次输入的密码不一致');
}
break;
}
}
function CheckFrom(obj) {
var ress=$("input[name='userName']").next('span').attr("class");
var res=$("input[name='rePassWord']").next('span').attr("class");
if (res=="error"||ress=="error"){
return false;
}
return true;
}
package com.feng.util;
import java.sql.*;
/**
* 封装
* Jdbc工具类,简化Jdbc编程
*/
public class JdbcUtil {
final String URL="jdbc:mysql://localhost:3306/shop2?useSSL=true&serverTimezone=GMT";
final String USERNAME="root";
final String PASSWORD="333";
Connection conn=null;
PreparedStatement ps=null;
//将jar包中的driver实现类加载到JVM中
//静态代码块在类加载时执行,并且只执行一次
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接对象
* @return 连接对象Conn
*/
private Connection getConn(){
try {
conn= DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return conn;
}
/**
* 获取数据库操作对象
* @param
* @return ps
*/
public PreparedStatement getPs(String sql){
try {
ps=getConn().prepareStatement(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return ps;
}
/**
* 关闭资源
*/
public void close(){
if (ps != null) {
try {
ps.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
public void close(PreparedStatement ps) {
if (ps != null) {
try {
ps.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
public void close(PreparedStatement ps, ResultSet rs){
if (ps != null) {
try {
ps.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
首先,这个项目一个人来做工作量真的大(要考虑很多东西),因为我最开做登录注册在一部分慢慢精挑细作,仔细到每个输入框都判断一次,然后写完这一块我发现我已经用了很多很多时间。导致后面购物车没有多少时间来完成。
工作量大,但是实际写代码还是比较简单的,比如很多servlet用到的都是差不多的代码,数据库查询也是这样。总结就是技术不难,不过对整个网页要考虑周全,却很难,也很费时间。(比如我在大屏幕显示器注册页面可以展示,但是换到我的笔记本,小屏幕下注册页面就显示不全,界面不够友好。)等等很多类似问题,时间花在这些细小修改上的才是最多的。
一个小体会、小总结:整体项目主要功能代码书写并不难,难的是不断修改页面,修改代码这一块,也是最耗时间的。
ajxa的局部刷新很好用,例如我在写注册信息判断用户注册id是否合法的时候。代码书写的时候很多地方我是用JQuery来写的,代码因此简洁了很多。
这项目还有一个难点就是前期准备工作,对数据库表的创建和规划。我在用户表和购物车表的基础上,用了一个商品信息表使总体思路清晰了很多。
时间有限,还有很多可以优化的地方都没有时间写,简单记录一下目前我想到的可以优化的地方:
本文地址:https://blog.csdn.net/weixin_44354613/article/details/107372138
如对本文有疑问, 点击进行留言回复!!
同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!
【JavaScript笔记(一)】万丈高楼平地起 - 基本概念篇
轻松解决 org.apache.taglibs.standard.tlv.JstlCoreTLV 困惑
网友评论