书城练习

书城练习

我学习Java基础的练习书城有所借鉴Javaweb是借鉴的。
对于书城的编写我采用的
系统环境是Eclipse neno+jdk1.8+tomcat8.5+mysal
1.包的划分
在这里插入图片描述
2.jar包
导入mysql驱动
导入c3p0
导入dbutils
导入beanutils
导入fileupload
导入javamail mail.jar
导入jstl jstl.jar standard.jar
3.页面采用的别人的(有一定改变)
4.后台模块
4.1用户模块
4.1.1用户注册
流程图

   4.1.2代码
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;// 注册时间

}

4.2激活邮件的发送
smtp与pop3
 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议
 SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器
 POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本
 POP3服务器则是遵循POP3协议的接收邮件服务器
SMTP是发送邮件协议
POP3是接收邮件协议
java如何发送邮件
 java中需要使用 这个包来发送邮件
 帐号准备【注册一个163邮箱,以后公司会有自己的邮件服务器,到时改公司公司的即可】
帐号:15989566325@163.com
密码: gyfitedu

发送邮件代码
package com.gyf.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 = “15989566325@163.com”; //发件人的邮件帐户
final String password = “gyfitedu”; //发件人的邮件密码

	//定义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中,添加发送邮件功能
在这里插入图片描述

4.3 激活用户
ActiveServlet:激活的Servlet
在这里插入图片描述

UserService:添加激活用户方法
在这里插入图片描述

UserDao:添加2个方法

在这里插入图片描述

4.4 用户登录
UserDao.java
在这里插入图片描述

UserService.java
在这里插入图片描述

LoginServlet.java
在这里插入图片描述

4.5 权限管理
 添加一个权限功能,登录成功后,如果是管理员,进行后台,如果是普通用户进入商品首页
LoginServlet.java
在这里插入图片描述

5.6 我的帐号
在这里插入图片描述

4.7 修改用户信息
显示用户信息
在这里插入图片描述

FindUserByIdServlet
在这里插入图片描述

UserService

UserDao

modifyuserinfo.jsp
<input type=“radio” name=“gender” value=“男” ${u.gender == “男” ? “checked=‘checked’” : ‘’} />男
<input type=“radio” name=“gender” value=“女” ${u.gender == “女” ? “checked=‘checked’” : ‘’}/> 女

修改用户信息
ModifyUserInfoServlet.java
在这里插入图片描述

UserService
在这里插入图片描述

UserDao
在这里插入图片描述

4.8用户退出

在这里插入图片描述

5.商品的数据建设
5.1数据库表创建(在开始就该创建的刚刚忘记了因为在用户代码时会对数据库的调用)
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)
);
5.2初始化产品数据
INSERT INTO products (id,name,price,category,pnum,imgurl,description)
VALUES (1,‘JavaF’,168.88,‘计算机’,3,null,‘good book’);
INSERT INTO products (id,name,price,category,pnum,imgurl,description)
VALUES (2,‘HTML’,168.88,‘计算机’,3,null,‘good book’);
。。。。。。。。。
(添加数据库数据)

5.2.1添加产品模型
public class Product {
private int id;
private String name;//书名
private double price;//价格
private String category;//分类
private int pnum;//数量
private String imgurl;//图片
private String description;//描述
}

页面查询和分页代码Javaweb知识点
ProductDao
public class ProductDao{
//查询类别的总记录数
public long count(String category) throws SQLException{
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql = “select count(*) from products where 1=1”;
long count = 0;
if(category != null && !"".equals(category)){
sql+= " and category = ?";
count = (long) qr.query(sql, new ScalarHandler(1), category);
}else{
count = (long) qr.query(sql, new ScalarHandler(1));
}

	return count;
}

//分页查找数据
public  List<Product> findBooks(int currentPage,int pageCount,String category) throws SQLException{
	QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
	//定义参数
	List<Object> prmts = new ArrayList<>();
	
	//查询的sql语句
	String sql = "select * from products where 1=1";
	
	//条件
	if(category!=null && !"".equals(category)){
		sql += " and category = ?";
		prmts.add(category);
	}
	
	//分页
	sql += " limit ?,?";
	int start = (currentPage - 1) * pageCount;
	prmts.add(start);
	prmts.add(pageCount);
	
	return qr.query(sql, new BeanListHandler<Product>(Product.class), prmts.toArray());
}

}

ProductService
public class ProductService {
ProductDao productDao = new ProductDao();
public PageResult findPageBooks(int currentPage,int pageCount,String category){
try {
//1.创建PageResult
PageResult pr = new PageResult();

		//2.获取总记录数
		long totalCount = productDao.count(category);
		
		//3.计算总页数
		int totalPage = (int) Math.ceil(totalCount * 1.0 / pageCount) ;
		
		//4.查询数据库
		List<Product> list = productDao.findBooks(currentPage, pageCount, category);
		
		//5.设置PageResult
		pr.setCurrentPage(currentPage);//当前页
		pr.setPageCount(pageCount);//每页显示记录数
		pr.setTotalCount(totalCount);//总记录数
		pr.setTotalPage(totalPage);//总页数
		pr.setList(list);
		
		return pr;
	} catch (SQLException e) {
		// TODO: handle exception
		e.printStackTrace();
	}
	return null;
}

}

ShowProductByPageServlet
@WebServlet("/showProductByPage")
public class ShowProductByPageServlet extends HttpServlet{

ProductService productService = new ProductService();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// TODO Auto-generated method stub
	//获取参数
	 String category = request.getParameter("category");//分类
	 String page = request.getParameter("page");//显示页数
	 
	 //2.判断
	 int currentPage = 1;
	 int pageCount = 4;//每页显示5条数据,这个内部定义,不让外面传参数
	 if(page != null){
		 currentPage = Integer.parseInt(page);
	 }
	
	 
	 //3.调用service
	 PageResult<Product> pr = productService.findPageBooks(currentPage, pageCount, category);
	 
	 //4.跳转
	 request.setAttribute("pr", pr);
	 request.setAttribute("category", category);
	 request.getRequestDispatcher("/product_list.jsp").forward(request, response);
}

}
PageResult
 提供get/set方法
public class PageResult {
private List list;//集合
private long totalCount;//总记录数
private int totalPage;//总页数
private int currentPage;//当前页
private int pageCount = 5;//每页显示的条数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值