网络商城的开发准备与注册模块的编写

         还是几年前的写过网上商城的项目,今天一个人在家,准备写一点东西,然后就翻出来老东西了。这里只是简单的介绍一下开发前的准备工作和注册模块的写法。

1.准备工作


系统开发环境 :
eclipse neno  + JDK1.8 + Tomcat8.5 +mysql 5.7

首先你要准备好相关的数据库表的创建,以免在开发的时候出现错误。
(这里创建一个网络书城)
例如在数据库创建4个表:

create database bookStore;
use bookStore;
#用户表
CREATE TABLE `user` (
  `id` INT(11) AUTO_INCREMENT,
  `username` VARCHAR(20) ,
  `PASSWORD` VARCHAR(20) ,
  `gender` VARCHAR(10) ,
  `email` VARCHAR(50) ,
  `telephone` VARCHAR(20) ,
  `introduce` VARCHAR(100),
  `activeCode` VARCHAR(50) ,
  `state` INT(11) ,
  `role` VARCHAR(10) DEFAULT '普通用户',
  `registTime` TIMESTAMP ,
  PRIMARY KEY (`id`)
);

#商品表
CREATE TABLE `products` (
  `id` VARCHAR(100) ,
  `name` VARCHAR(40) ,
  `price` DOUBLE ,
  `category` VARCHAR(40) ,
  `pnum` INT(11) ,
  `imgurl` VARCHAR(100) ,
  `description` VARCHAR(255) ,
  PRIMARY KEY (`id`)
);
#订单表
CREATE TABLE `orders` (
  `id` VARCHAR(100) ,
  `money` DOUBLE ,
  `receiverAddress` VARCHAR(255) ,
  `receiverName` VARCHAR(20) ,
  `receiverPhone` VARCHAR(20) ,
  `paystate` INT(11) ,
  `ordertime` TIMESTAMP ,
  `user_id` INT(11) ,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
);

#订单详情表
CREATE TABLE `orderitem` (
  `order_id` VARCHAR(100) ,
  `product_id` VARCHAR(100),
  `buynum` INT(11) ,
  PRIMARY KEY (`order_id`,`product_id`),
  FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`),
  FOREIGN KEY (`product_id`) REFERENCES `products` (`id`)
);


然后,按照JavaEE 三层结构开始划分开发的结构
       例如:模型:domain,model,pojo,po,entity

在eclipse 项目里面导入需要用到的jar包:

  •  导入mysql驱动 
  •  导入c3p0 
  •  导入dbutils
  •  导入beanutils
  •  导入fileupload 
  •   导入javamail mail.jar
  •  导入jstl jstl.jar standard.jar

 

2.编写页面

  2.1用户注册页面流程图

实现原理:

实现步骤:

Step1: User模型


public class User {

private int id; // 用户编号

private String username; // 用户姓名

private String password; // 用户密码

private String gender; // 用户性别

private String email; // 用户邮箱

private String telephone; // 用户联系电话

private String introduce; // 用户介绍

private String activeCode; // 激活码

private String role; // 用户角色

private int state; // 用户状态

private Date registTime;// 注册时间

}

Step2:接收请求参数

 

Step3:添加请求编码的Filter


public class MyEncodingFilter implements Filter{



@Override

public void init(FilterConfig filterConfig) throws ServletException {}

@Override

public void destroy() {}



@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

//1.设置POST请求中文乱码的问题

request.setCharacterEncoding("UTF-8");

System.out.println("拦截请求:" + request);



//2.解决get请求的中文乱码问题

//request : RequestFacade;

HttpServletRequest hsr = (HttpServletRequest)request;

if(hsr.getMethod().equalsIgnoreCase("get")){

MyRequest myRequest = new MyRequest(hsr);

//放行请求

chain.doFilter(myRequest, response);

}else{

chain.doFilter(request, response);

}

}

}

/**

 * Wrapper包装类,装饰设计模式,内部有个真实对象的引用

 * @author gyf

 *

 */

class MyRequest extends HttpServletRequestWrapper{



private HttpServletRequest request;

private boolean isEncoding = false;//是否已经utf-8编码

public MyRequest(HttpServletRequest request) {

super(request);

this.request = request;

}



@Override

public String getParameter(String name) {

return getParameterMap().get(name)[0];

}



@Override

public Map<String, String[]> getParameterMap() {

Map<String, String[]> map = request.getParameterMap();



if(isEncoding == true){

return map;

}

//遍历vlaue,改成utf-8编码

for(Entry<String, String[]>  entry : map.entrySet()){

//取数组值

String[] values = entry.getValue();

for(int i=0;i<values.length;i++){

 try {

 values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");

 } catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

isEncoding = true;

return map;

}

}

 Step4:配置C3P0
注意:c3p0-config.xml 文件放在src中

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/bookstore
		</property>
		<property name="user">root</property>
		<property name="password">123456</property>
		<!-- 初始化连接池数量 -->
		<property name="initialPoolSize">10</property>
		
		<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
		<property name="maxIdleTime">60</property>

		<!--连接池中保留的最大连接数。Default: 15 -->
		<property name="maxPoolSize">25</property>
		
		<!--连接池中保留的 最小连接数 -->
		<property name="minPoolSize">10</property>
	</default-config>
</c3p0-config>

public class C3P0Utils {
	
	private static DataSource ds  = new ComboPooledDataSource();
	public static DataSource getDataSource(){
		return ds;
	}
	public static Connection getConnection(){
		try {
			return ds.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException("服务器错误");
		}
	}
	public static void closeAll(Connection conn,Statement statement,ResultSet resultSet){
		if(resultSet != null){
			try {
				resultSet.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			resultSet = null;
		}
		if(statement != null){
			try {
				statement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			statement = null;
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				conn = null;
			}
		}
	}
}

 

Step5:添加Service和Dao

UserService:

Dao:

 


Step6:修改RegisterServlet逻辑

SQL修改username性一:alter table user add constraint username_uq unique (username);  

Step7:验证码

注意:你要准备好一个写有验证码的文件。当时的验证码用的是成语,写在一个TXT文件里面

在Register前面添加验证码

这里附加一个生成图片验证码例子的讲解链接:

https://www.cnblogs.com/zhaotiancheng/p/6687103.html

2.2:激活邮件的发送

smtp与pop3

  • SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议
  • SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器
  • POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本
  • POP3服务器则是遵循POP3协议的接收邮件服务器

 

SMTP是发送邮件协议

POP3是接收邮件协议

 

java如何发送邮件

注意:java中需要使用 这个包来发送邮件

package com.bookstore.utils;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendJMail {
		public static boolean sendMail(String email, String emailMsg) {
		String from = "15989566325@163.com"; 				// 邮件发送人的邮件地址
		String to = email; 										// 邮件接收人的邮件地址
		final String username = "xxxx@163.com";  	//发件人的邮件帐户
		final String password = "123456";   					//发件人的邮件密码

		//定义Properties对象,设置环境信息
		Properties props = System.getProperties();

		//设置邮件服务器的地址
		props.setProperty("mail.smtp.host", "smtp.163.com"); // 指定的smtp服务器
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");//设置发送邮件使用的协议
		//创建Session对象,session对象表示整个邮件的环境信息
		Session session = Session.getInstance(props);
		//设置输出调试信息
		session.setDebug(true);
		try {
			//Message的实例对象表示一封电子邮件
			MimeMessage message = new MimeMessage(session);
			//设置发件人的地址
			message.setFrom(new InternetAddress(from));
			//设置主题
			message.setSubject("用户激活");
			//设置邮件的文本内容
			//message.setText("Welcome to JavaMail World!");
			message.setContent((emailMsg),"text/html;charset=utf-8");
			
			//设置附件
			//message.setDataHandler(dh);
			
			//从session的环境中获取发送邮件的对象
			Transport transport=session.getTransport();
			//连接邮件服务器
			transport.connect("smtp.163.com",25, username, password);
			//设置收件人地址,并发送消息
			transport.sendMessage(message,new Address[]{new InternetAddress(to)});
			transport.close();
			return true;
		} catch (MessagingException e) {
			e.printStackTrace();
			return false;
		}
	}
}

在注册的service中,添加发送邮件功能

2.3 激活用户

ActiveServlet:激活的Servlet

UserService:添加激活用户方法

 

UserDao:添加2个方法

 

到此为止,整个开发的准备工作和用户的注册模块算是编写完成了,还有重要的 用户权限,商品的录入,购物车,结算等功能下章在写。

===============================================================================================

一章写完有些困难,因为实际上一个网站的全部工作全部写出来整个文章写得太长,也显得太杂乱了,所以分开来写方便点。也方便阅读和复习。

 

                                                                

本人自己建立的一个QQ群号。还在完善中,期待你的加入!     本人自己建立的一个微信订阅号。还在完善中,期待你的加入! 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值