java商品展⽰页⾯代码_java学习(⼗四)实现商品的展⽰、
curd以及分页展⽰
本⽂主要完成使⽤jdbc完成购物⽹站中实现:展⽰所有商品、添加商品、删除商品、修改单个商品、删除多个商品、分页展⽰的功能实现。
1.展⽰所有商品
本章节主要实现点击⾸页上展⽰所有商品的超链接,实现在页⾯上展⽰所有的商品信息。
1.1创建数据库和表
create database day14;
use day14;
create table `product` (
`pid` varchar (96),
`pname` varchar (150),
`market_price` double ,
`shop_price` double ,
`pimage` varchar (600),
`pdate` date ,
`pdesc` varchar (765)
);
INSERT INTO `product` VALUES('1','⼩⽶ 4c 标准版','1399','1299','products/1/c_0001.jpg','2015-11-02','⼩⽶ 4c 标准版 全⽹通 ⽩⾊ 移动联通电信4G⼿机 双卡双待');
INSERT INTO `product` VALUES('10','华为 Ascend Mate7','2699','2599','products/1/c_0010.jpg','2015-11-02','华为 Ascend Mate7 ⽉光银 移动4G⼿机 双卡双待双通6英⼨⾼清⼤屏,纤薄机⾝,智能超⼋核,按压式指纹识别!!选择下⽅“移动⽼⽤户4G飞享合约”,⽆需换号,还有话费每⽉返还!');
INSERT INTO `product` VALUES('11','vivo X5Pro','2399','2298','products/1/c_0014.jpg','2015-11-02','移动联通双4G⼿机 3G 运存版 极光⽩【购机送蓝⽛⽿机+蓝⽛⾃拍杆】新升级3G运⾏内存·双2.5D弧⾯玻璃·眼球识别技术');
INSERT INTO `product` VALUES('12','努⽐亚(nubia)My 布拉格','1899','1799','products/1/c_0013.jpg','2015-11-02','努⽐亚(nubia)My 布拉格 银⽩ 移动联通4G⼿机 双卡双待【嗨11,下单⽴减100】⾦属机⾝,快速充电!布拉格相机全新体验!');
INSERT INTO `product` VALUES('13','华为 麦芒4','2599','2499','products/1/c_0012.jpg','2015-11-02','华为 麦芒4 晨曦⾦ 全⽹通版4G⼿机 双卡双待⾦属机⾝ 2.5D弧⾯屏 指纹解锁 光学防抖');
INSERT INTO `product` VALUES('14','vivo X5M','1899','1799','products/1/c_0011.jpg','2015-11-02','vivo X5M 移动4G⼿机双卡双待 ⾹槟⾦【购机送蓝⽛⽿机+蓝⽛⾃拍杆】5.0英⼨⼤屏显⽰·⼋核双卡双待·Hi-Fi移动KTV');
INSERT INTO `product` VALUES('15','Apple iPhone 6 (A1586)','4399','4288','products/1/c_0015.jpg','2015-11-02','Apple iPhone 6 (A1586) 16GB ⾦⾊ 移动联通电信4G⼿机长期省才是真的省!点击购机送费版,⽉⽉送话费,⽉⽉享优惠,畅享4G⽹络,就在联通4G!');
1.2 新建项⽬,导⼊jar包,创建包结构
其中导⼊的jar包
驱动⽂件
dbutils
c3p0
jstl和standard
beanutils
包结构中需要增加⼯具类包
utils⼯具类:datasourceutils
导⼊c3p0的配置⽂件
1.3 创建Product对象
在domain包内创建Product.java⽂件,并⽣成get/set⽅法
package com.itcast.domain;
import java.util.Date;
public class Product {
private String pid;
private String pname;
private Double market_price;
private Double shop_price;
private String pimage;
private Date pdate;
private String pdesc;
.
..
各属性的get/set⽅法
}
1.4 创建index.jsp⽂件
1.5 创建FindAllServlet⽂件
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //调⽤service查询所有商品
List plist = null;
try {
plist = new ProductService().findAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将List放⼊request域中
request.setAttribute("list", plist);
//请求转发
}
1.6 创建ProductService
public class ProductService {
/**
* 查询所有商品
* @return list
* @throws SQLException
*/
public List findAll() throws SQLException {
return new ProductDao().findAll();
}
}
1.7 创建ProductDao
public class ProductDao {
public List findAll() throws SQLException {
QueryRunner qr = new DataSource());
String sql = "select * from product";
return qr.query(sql, new BeanListHandler<>(Product.class));
}
}
1.8 创建product_list.jsp⽂件
...
pid商品图⽚商品名称市场价超市价商品描述操作
${p.pid }${p.pname
}
${p.market_price
}
${p.shop_price
}
${p.pdesc }修改|删除
2. 添加商品
本案例实现在index.jsp页⾯增加⼀个超链接,点击跳转到另⼀页⾯,⽤于填写商品信息,点击保存按钮,将商品保存在数据库中。
2.1 修改index.jsp⽂件
在页⾯上增加“增加商品信息”的内容
2.2 创建add.jsp⽂件
主要完成form的action配置和input的name属性配置,形成增加商品信息的表单。
商品名称
市场价
超市价
商品描述
2.3 ⾃动⽣成ID值
在添加商品时,需要让商品⽣产⾃动的id值,因此,需要使⽤如下代码
public class UUIDUtils {
public static String getId() {
return UUID.randomUUID().toString().replace("-", "").toUpperCase();
}
}
该段代码会根据系统和硬件,⾃动⽣成包含"-"字符的32位字符串ID值。
2.4 创建addproductservlet⽂件
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置编码,因为接受请求中含有中⽂
request.setCharacterEncoding("utf-8");
//1.封装数据
Product p = new Product();
try {
BeanUtils.populate(p, ParameterMap());
//1.1 设置pid
p.Id());
//1.2设置时间
p.setPdate(new Date());
//2.调⽤service完成添加
new ProductService().addProduct(p);
//3.页⾯跳转
//请求转发
}catch (Exception e) {
e.printStackTrace();
request.setAttribute("msg", "添加商品失败");
}
}
在⽣成addproductservlet⽂件时,当添加商品失败时,为了增强⽤户体验,增加msg.jsp⽤于提醒⽤户。
${msg }
2.5 ProductService实现商品添加
public void addProduct(Product p) throws SQLException {
new ProductDao().addProduct(p);
}
2.6 创建addProduct⽅法
public void addProduct(Product p) throws SQLException {
QueryRunner qr = new DataSource());
String sql = "insert into product(pid,pname,market_price,shop_price,pdate,pdesc) values(?,?,?,?,?,?)";
qr.update(sql, p.getPid(),p.getPname(),p.getMarket_price(),
}
2.7 令牌机制
有表单使⽤的时候,若使⽤请求转发会出现重复提交的问题,因此需要使⽤如下两种⽅法:
1.重定向;
2.令牌机制
2.7.1 令牌机制原理
服务器端在处理到达的request之前,会将request中的Token值与保存在当前⽤户session中的令牌值进⾏⽐较,看是否匹配。在处理完该request后,且在response发送给客户端之前,将会产⽣⼀个新的Token,该Token除传给客户端以外,也会将⽤户session中保存的旧的Token进⾏替换。这样,如果⽤户会退到刚才的提交页⾯并再次提交的话,客户端传过来的Token值和服务器端的不⼀致,从⽽有效地防⽌了重复提交地发⽣。
2.7.2 实施过程
在添加页⾯上随机⽣成⼀个字符串,放⼊session中⼀份,放⼊表单中⼀份,提交的时候在后台获取这两个token,然后移除session中的token(只使⽤⼀次),然后判断两个token是否⼀致,若不⼀致就是重复提交了。
2.7.3 应⽤实例
在UUIDUtils.java⽂件中增加⽣成随机码⽅法
public static String getCode() {
jsp创建return getId();
}
在add.jsp⽂件中,增加⽣成session中的token的⽅法
String code = Code();
//将code放⼊到session 后台进⾏验证
session.setAttribute("s_token", code);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论