欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-15 22:52:46
...

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

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 = "aaa@qq.com"; 				// 邮件发送人的邮件地址
		String to = email; 										// 邮件接收人的邮件地址
		final String username = "aaa@qq.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群号。还在完善中,期待你的加入!     本人自己建立的一个微信订阅号。还在完善中,期待你的加入!