展示所有商品
需求:
点击首页上的超链接,在页面上展示所有的商品信息
步骤分析:
1.数据库和表
create database web2;
use web2;
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!');
2.新建一个项目
3.导入jar包
驱动 dbutils c3p0 jstl beanutils
4.包结构
utils工具类:datasourceutils
导入c3p0配置文件
5.新建一个首页index.jsp
添加一个超链接
6.点击超链接 发送一个servlet上(FindAllServlet)
7.FindAllServlet:
调用service,查询所有的商品 返回值:list
将list放入request域中,请求转发 prodouct_list.jsp
8、将内容所需图片放入项目中
代码:
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2><a href="${pageContext.request.contextPath }/findAll">展示所有商品</a></h2>
</body>
</html>
-------------------------------------------------------------------------------
FindAllServlet:
package com.feizhu.web.servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.feizhu.domain.Product;
import com.feizhu.service.ProductService;
/**
* 展示所有商品
*/
public class FindAllServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//调用service 查询所有商品 返回值list
List<Product> plist = null;
try {
plist = new ProductService().findAll();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将list放入request域中
request.setAttribute("list", plist);
//请求转发
request.getRequestDispatcher("/product_list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
----------------------------------------------------------------------
ProductService:
package com.feizhu.service;
import java.sql.SQLException;
import java.util.List;
import com.feizhu.dao.ProductDao;
import com.feizhu.domain.Product;
public class ProductService {
/**
* 查询所有商品
* @return list集合
* @throws SQLException
*/
public List<Product> findAll() throws SQLException {
return new ProductDao().findAll();
}
}
----------------------------------------------------------------------------------
Product:
package com.feizhu.domain;
import java.util.Date;
public class Product {
/**
* `pid` varchar (96),
`pname` varchar (150),
`market_price` double ,
`shop_price` double ,
`pimage` varchar (600),
`pdate` date ,
`pdesc` varchar (765)
*/
private String pid;
private String pname;
private Double market_price;
private Double shop_price;
private String pimage;
private Date pdate;
private String pdesc;
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public Double getMarket_price() {
return market_price;
}
public void setMarket_price(Double market_price) {
this.market_price = market_price;
}
public Double getShop_price() {
return shop_price;
}
public void setShop_price(Double shop_price) {
this.shop_price = shop_price;
}
public String getPimage() {
return pimage;
}
public void setPimage(String pimage) {
this.pimage = pimage;
}
public Date getPdate() {
return pdate;
}
public void setPdate(Date pdate) {
this.pdate = pdate;
}
public String getPdesc() {
return pdesc;
}
public void setPdesc(String pdesc) {
this.pdesc = pdesc;
}
}
----------------------------------------------------------------------------
ProductDao:
package com.feizhu.dao;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.feizhu.domain.Product;
import com.feizhu.utils.DataSourceUtils;
public class ProductDao {
/**
* 查询所有商品
*
* @return
* @throws SQLException
*/
public List<Product> findAll() throws SQLException {
QueryRunner qr= new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from product";
return qr.query(sql, new BeanListHandler<>(Product.class));
}
}
----------------------------------------------------------------------------
工具类:
package com.feizhu.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DataSourceUtils {
private static ComboPooledDataSource ds=new ComboPooledDataSource();
private static ThreadLocal<Connection> tl=new ThreadLocal<>();
/**
*获取数据源
* @return 连接
*/
public static DataSource getDataSource() {
return ds;
}
/**
* 从 当前线程上获取连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
Connection conn=tl.get();
if(conn==null) {
//第一次获取 创建一个连接和当前的线程绑定
conn=ds.getConnection();
//绑定
tl.set(conn);
}
return conn;
}
/**
* 释放连接
* @param conn 连接
*/
public static void closeConn(Connection conn) {
if(conn!=null) {
try {
conn.close();
//和当前的线程解绑
} catch (SQLException e) {
e.printStackTrace();
}
conn=null;
}
}
/**
*释放语句执行者
* @param st 执行者
*/
public static void closeStatement(PreparedStatement st) {
if(st!=null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
st=null;
}
}
/**
*释放结果集
* @param rs 结果集
*/
public static void closeResultSet(ResultSet rs) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs=null;
}
}
/**
*
* @param conn
* @param st
* @param rs
*/
public static void closeRouse(Connection conn,PreparedStatement st,ResultSet rs) {
closeRouse(st,rs);
closeConn(conn);
}
public static void closeRouse(PreparedStatement st,ResultSet rs) {
closeResultSet(rs);
closeStatement(st);
}
/**
* 开启事物
* @throws SQLException
*/
public static void startTransaction() throws SQLException {
//获取连接//开启事物
getConnection().setAutoCommit(false);
}
//事物提交
public static void commitAndClose() {
//获取连接
try {
Connection conn=getConnection();
//提交事物
conn.commit();
//释放资源
conn.close();
//解除绑定
tl.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 事物回滚
* @throws SQLException
*/
//事物提交
public static void rollbackAndClose() {
//获取连接
try {
Connection conn=getConnection();
//事物回滚
conn.rollback();
//释放资源
conn.close();
//解除绑定
tl.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
-----------------------------------------------------------------------
product_list.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center" width="88%">
<tr>
<th>pid</th>
<th>商品图片</th>
<th>商品名称</th>
<th>市场价</th>
<th>商场价</th>
<th>商品描述</th>
<th>操作</th>
</tr>
<c:forEach items="${list }" var="p">
<tr>
<td width="8%">${p.pid }</td>
<td width="8%"><img alt="" src="${pageContext.request.contextPath}/${ p.pimage}" width="80"></td>
<td width="8%">${p.pname }</td>
<td width="8%">${p.market_price }</td>
<td width="8%">${p.shop_price }</td>
<td >${p.pdesc }</td>
<td width="8%">
修改|删除
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
-----------------------------------效果展示-------------------------------------