商城项目(1.0版本)第一篇

主要内容: 环境的准备工作 用户注册,邮箱放送验证码,点击激活用户

环境的准备工作
一、创建数据仓库.创建3个表结构,插入数据

-- 1.1 创建用户表
CREATE TABLE `user` (
  `uid` varchar(32) NOT NULL,  #用户编号
  `username` varchar(20) DEFAULT NULL,		#用户名
  `password` varchar(20) DEFAULT NULL,		#密码
  `name` varchar(20) DEFAULT NULL,			#昵称
  `email` varchar(30) DEFAULT NULL,			#电子邮箱
  `telephone` varchar(20) DEFAULT NULL,		#电话
  `birthday` date DEFAULT NULL,				#生日
  `sex` varchar(10) DEFAULT NULL,			#性别
  `state` int(11) DEFAULT 0,				#状态:0=未激活,1=已激活
  `code` varchar(64) DEFAULT NULL,			#激活码
  PRIMARY KEY (`uid`)
) ;

-- 2.1 创建分类表
CREATE TABLE `category` (
  `cid` varchar(32) NOT NULL,
  `cname` varchar(20) DEFAULT NULL,	#分类名称
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- 3.1 创建商品表
CREATE TABLE `product` (
  `pid` varchar(32) NOT NULL,
  `pname` varchar(50) DEFAULT NULL,		#商品名称
  `market_price` double DEFAULT NULL,	#市场价
  `shop_price` double DEFAULT NULL,		#商城价
  `pimage` varchar(200) DEFAULT NULL,	#商品图片路径
  `pdate` date DEFAULT NULL,			#上架时间
  `is_hot` int(11) DEFAULT NULL,		#是否热门:0=不热门,1=热门
  `pdesc` varchar(255) DEFAULT NULL,	#商品描述
  `pflag` int(11) DEFAULT 0,			#商品标记:0=未下架(默认值),1=已经下架
  `cid` varchar(32) DEFAULT NULL,		#分类id
  PRIMARY KEY (`pid`),
  KEY `product_fk_0001` (`cid`),
  CONSTRAINT `product_fk_0001` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

项目中表的关系:
在这里插入图片描述二、创建一个通用的servlet

1、从客户端向服务器端发起请求,调用功能的方式:

第一种方式:form 表单
<br>
<form action="/BaseServlet/ServletDemo01?method=add" method="post">
 用户:<input type="text" name = "username"><br>
 <input type = "submit" value = "提交">
</form>
<br>
第二种方式:a标签 链接的方式
<br>
<a href="/BaseServlet/ServletDemo01?method=del"></a>
<br>

第三种方式:Ajax 的方式
<button onclick = "fun()">点击我</button>
<script >
 	function fun(){
		$.post( "/BaseServlet/ServletDemo01" ,{"method":"find","username","tom" },function(data){
			alert(data);
		},"jsou" );
	}
</script>

2、BaseServlet的两种实现方式
a、普通的请求

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取客户端提交到服务端的method对应的值
		String md=request.getParameter("method");
		//定义变量,存放功能执行完毕之后要转发的路径
		String path=null;
		
		//通过判断md中不同的内容来决定本次功能
		if("addStu".equals(md)){
			path=addStu(request, response);
		}else if("delStu".equals(md)){
			path=delStu(request, response);
		}else if("checkStu".equals(md)){
			path=checkStu(request, response);
		}else if("".equals(md)){
			
		}
		if(null!=path){
			//服务端的转发
			request.getRequestDispatcher(path).forward(request, response);
		}
		
	}

	public String addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("添加学生");
		return "/test.html";
		
	}
	public String delStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("删除学生");
		return "/test.html";
		
	}
	public String checkStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("检查学生");
		response.getWriter().println("DDDDDD");
		return null;
	}

弊端:若有多个则需要添加多个if语句进行判断.

b、通过反射来实现

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取客户端提交到服务端的method对应的值
		String md=request.getParameter("method");
		//定义变量,存放功能执行完毕之后要转发的路径
		String path=null;
		//获取到当前字节码对象(ServletDemo02.class在内存中对象)
		Class clazz = this.getClass();
		try {
			//获取clazz上名称为md方法
			Method method=clazz.getMethod(md, HttpServletRequest.class,HttpServletResponse.class);
			if(null!=method){
				//调用找到的方法
				path=(String)method.invoke(this, request,response);
			}
			if(null!=path){
				//服务端的转发
				request.getRequestDispatcher(path).forward(request, response);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

	public String addStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("添加学生");
		return "/test.html";
		
	}
	public String delStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("删除学生");
		return "/test.html";
		
	}
	public String checkStu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("检查学生");
		response.getWriter().println("DDDDDD");
		return null;
	}

将其抽取为工具类:

public class BaseServlet extends HttpServlet {
	@Override
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service.....");
		//获取客户端提交到服务端的method对应的值
				String md=request.getParameter("method");
				//定义变量,存放功能执行完毕之后要转发的路径
				String path=null;
				//获取到当前字节码对象(ServletDemo02.class在内存中对象)
				Class clazz = this.getClass();
				try {
					//获取clazz上名称为md方法
					Method method=clazz.getMethod(md, HttpServletRequest.class,HttpServletResponse.class);
					if(null!=method){
						//调用找到的方法
						path=(String)method.invoke(this, request,response);
					}
					if(null!=path){
						//服务端的转发
						request.getRequestDispatcher(path).forward(request, response);
					}
				} catch (Exception e) {
					e.printStackTrace();
				} 
	}
}

三、环境的搭建

1、jar包与工具类的引用
2、用户模块的创建:User 与数据库表对应
3、导入JSP页面
4、创建了用户模块相关程序

用户注册,邮箱放送验证码,点击激活用户
四、用户实现登入的功能

开发约定
为了项目管理方便,不会从客户端直接发起请求到JSP页面.
先请求到Servlet,在由Servlet转发到JSP页面.哪怕此次为空的跳转

注册功能原理图
在这里插入图片描述根据功能图实现注册功能的实现

五、搭建邮件服务器

*_邮件服务器:
公司服务器上安装软件,管理各个邮箱账户中的邮件 接收/发送
*_电子邮箱:
各个账户在服务器上开辟一段空间
*_邮件协议: 发送SMTP 接收:pop3/pop/imap
作用:约定了邮件在网络中传输格式
*_搭建邮件服务器
使用

六、激活功能的实现
在这里插入图片描述根据原理图,完成代码的实现.

七、用户登录与退出功能

在这里插入图片描述
在这里插入图片描述
根据原理图,完成代码的实现.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值