目录
目录
com.gx.bookstroe.service.impl
FindProductByManyConditionServlet
FindProductByManyConditionServlet
com.gx.bookstroe.dao
Userdaoimpl
package com.gx.bookstroe.dao.impl;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.gx.bookstroe.dao.Userdao;
import com.gx.bookstroe.domain.User;
import com.gx.bookstroe.utils.C3P0Utils;
import com.gx.bookstroe.utils.DataSourceUtils;
public class Userdaoimpl implements Userdao{
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
@Override
public boolean insert(User user) {
String sql = "insert into user(username,password,gender,email,telephone,introduce,activecode) values(?,?,?,?,?,?,?)";
int num=0;
try {
num = runner.update(sql, user.getUsername(), user.getPassword(),
user.getGender(), user.getEmail(), user.getTelephone(),
user.getIntroduce(), user.getActiveCode());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(num>0){return true;}
return false;
}
@Override
public User findUser(String username, String password) {
//2.写SQL语句
String sql="select * from user where username=? and password=?";
//3.调用方法执行SQL语句
User user=null;
try {
user= (User)runner.query(sql, new BeanHandler<User>(User.class),username,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}
@Override
public User findname(String username) {
//2.写SQL语句
String sql="select * from user where username=?";
//3.调用方法执行SQL语句
User user=null;
try {
user= (User)runner.query(sql, new BeanHandler<User>(User.class),username);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}
@Override
public boolean editUser(String uername, String repassword, String telephone)
{
String sql = "update user set PASSWORD=?,telephone=?where username=?";
int num=0;
try {
num=runner.update(sql,repassword,telephone,uername);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(num>0){return true;}
return false;
}
}
OrderItemDaoimpl
package com.gx.bookstroe.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import com.gx.bookstroe.dao.OrderItemDao;
import com.gx.bookstroe.domain.Order;
import com.gx.bookstroe.domain.OrderItem;
import com.gx.bookstroe.domain.Product;
import com.gx.bookstroe.utils.C3P0Utils;
import com.gx.bookstroe.utils.DataSourceUtils;
public class OrderItemDaoimpl implements OrderItemDao{
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
@Override
public void delOrderItems(String id) throws SQLException {
String sql="delect from orderItem where order_id=?";
runner.update(sql,id);
}
@Override
public Order findOrderById(String id) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public List<OrderItem> findOrderItemByOrder(Order order) throws SQLException {
String sql="select* from orderItem,Products where products.id=orderItem.product_id and order.id=?";
return runner.query(sql, new ResultSetHandler<List<OrderItem>>(){
public List<OrderItem> handle(ResultSet rs) throws SQLException {
List<OrderItem> items=new ArrayList<OrderItem>();
while(rs.next()){
OrderItem item=new OrderItem();
item.setOrder(order);
item.setBuynum(rs.getInt("buynum"));
Product p=new Product();
p.setCategory(rs.getString("category"));
p.setId(rs.getString("id"));
p.setDescription("description");
p.setImgurl(rs.getString("imgurl"));
p.setName(rs.getString("name"));
p.setPnum(rs.getInt("pnum"));
p.setPrice(rs.getDouble("price"));
// item.set(p);
items.add(item);
}
return items;
}
},order.getId());
}
}
Orderdaoimpl
package com.gx.bookstroe.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.gx.bookstroe.dao.OrderDao;
import com.gx.bookstroe.domain.Order;
import com.gx.bookstroe.domain.User;
import com.gx.bookstroe.utils.C3P0Utils;
import com.gx.bookstroe.utils.DataSourceUtils;
public class Orderdaoimpl implements OrderDao{
QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
@Override
public Order findOrderById(String id) throws SQLException {
String sql="select* from orders,user where orders.user_id=user.id and order.id=?";
return runner.query(sql, new ResultSetHandler<Order>(){
public Order handle(ResultSet rs) throws SQLException {
Order order=new Order();
while (rs.next()) {
order.setId(rs.getString("orders.id"));
order.setMoney(rs.getDouble("order.money"));
order.setOrdertime(rs.getDate("orders.ordertime"));
order.setPaystate(rs.getInt("orders.paystate"));
order.setReceiverName(rs.getString("orders.receiverName"));
order.setReceiverPhone(rs.getString("orders.receiverPhone"));
User user=new User();
user.setId(rs.getInt("user.id"));
user.setEmail(rs.getString("user.email"));
user.setGender(rs.getString("user.gender"));
user.setActiveCode(rs.getString("user.activecode"));
user.setIntroduce(rs.getString("user.introduce"));
user.setPassword(rs.getString("user.password"));
user.setRegistTime(rs.getDate("user.registtime"));
user.setRole(rs.getString("user.role"));
user.setState(rs.getInt("user.state"));
user.setTelephone(rs.getString("user.telephone"));
user.setUsername(rs.getString("user.username"));
order.setUser(user);
}
return order;
}
},id);
}
@Override
public void delOrderById(String id) throws SQLException {
String sql="delect from orders where id=?";
runner.update(sql,id);
}
@Override
public List<Order> findOrderByUser(User user) throws SQLException {
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from orders where user_id=?";
return runner.query(sql, new BeanListHandler<Order>(Order.class),user.getId());
}
}
Productdaoimpl
package com.gx.bookstroe.dao.impl;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.gx.bookstroe.dao.ProductDao;
import com.gx.bookstroe.domain.OrderItem;
import com.gx.bookstroe.domain.Product;
import com.gx.bookstroe.utils.C3P0Utils;
import com.gx.bookstroe.utils.DataSourceUtils;
public class Productdaoimpl implements ProductDao{
QueryRunner runner=new QueryRunner(C3P0Utils.getDataSource());
@Override
public List<Product> listAll() throws SQLException {
String sql="select * from products";
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
return runner.query(sql, new BeanListHandler<Product>(Product.class));
}
@Override
public List<Product> findProductByManyCondition(String id, String name, String category, String minprice,
String maxprice) throws SQLException {
List<Object> list=new ArrayList<Object>();
String sql="select * from products where 1=1";
if (id!=null&&id.trim().length()>0) {
sql+=" and id=?";
list.add(id);
}
if (name!=null&&name.trim().length()>0) {
sql+=" and name=?";
list.add("%"+name+"%");
}
if (category!=null&&category.trim().length()>0) {
sql+=" and category=?";
list.add(category);
}
if (minprice!=null&&maxprice!=null
&&minprice.trim().length()>0&&maxprice.trim().length()>0) {
sql+=" and price between? and ?";
list.add(minprice);
list.add(maxprice);
}
Object[] params=list.toArray();
return runner.query(sql, new BeanListHandler<Product>(Product.class),
params);
}
@Override
public void addProduct(Product p) throws SQLException {
String sql = "insert into products values(?,?,?,?,?,?,?)";
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
runner.update(sql, p.getId(), p.getName(), p.getPrice(),
p.getCategory(), p.getPnum(), p.getImgurl(), p.getDescription());
}
@Override
public Product findProductById(String id) throws SQLException {
String sql="select * from products where id=?";
return runner.query(sql, new BeanHandler<Product>(Product.class),id);
}
@Override
public void editProduct(Product p) throws SQLException {
List<Object> obj=new ArrayList<Object>();
obj.add(p.getName());
obj.add(p.getPrice());
obj.add(p.getCategory());
obj.add(p.getPnum());
obj.add(p.getDescription());
String sql="update products"+
"set name=?,price=?,category=?,pnum=?,description=?";
//判断是否有图片
if (p.getImgurl()!=null&&p.getImgurl().trim().length()>0) {
sql+=",imgurl=?";
obj.add(p.getImgurl());
}
sql+="where id=?";
obj.add(p.getId());
//5.使用QueryRunner对象的update()方法更新数据
runner.update(sql,obj.toArray());
}
public void delectProduct(String id) throws SQLException {
String sql="DELETE FROM products WHERE id=?";
runner.update(sql,id);
}
@Override
public void delectProduct(Product p) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public List<Object[]> salesList(String year, String month) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateProductNum(List<OrderItem> items) throws SQLException {
String sql="update products set pnum =pnum+? where id=?";
Object[][] params=new Object[items.size()][2];
for(int i=0;i<params.length;i++){
params[i][0]=items.get(i).getBuynum();
params[i][0]=items.get(i).getP().getId();
}
runner.batch(sql, params);
}
}
Userserviceimpl
package com.gx.bookstroe.service.impl;
import com.gx.bookstroe.dao.Userdao;
import com.gx.bookstroe.dao.impl.Userdaoimpl;
import com.gx.bookstroe.domain.User;
import com.gx.bookstroe.service.Userserivice;
public class Userserviceimpl implements Userserivice{
//1.实例化Userdao
Userdao dao=new Userdaoimpl();
@Override
public boolean insert(User user) {
boolean b=dao.insert(user);
return b;
}
@Override
public User findUser(String username, String password) {
return dao.findUser(username,password);
}
@Override
public User findname(String username) {
// TODO Auto-generated method stub
return dao.findname(username);
}
@Override
public boolean editUser(String username, String password, String telephone) {
return dao.editUser(username,password, telephone);
}
}
Orderserviceimpl
package com.gx.bookstroe.service.impl;
import java.sql.SQLException;
import java.util.List;
import com.gx.bookstroe.dao.OrderDao;
import com.gx.bookstroe.dao.OrderItemDao;
import com.gx.bookstroe.dao.ProductDao;
import com.gx.bookstroe.dao.impl.OrderItemDaoimpl;
import com.gx.bookstroe.dao.impl.Orderdaoimpl;
import com.gx.bookstroe.dao.impl.Productdaoimpl;
import com.gx.bookstroe.domain.Order;
import com.gx.bookstroe.domain.OrderItem;
import com.gx.bookstroe.domain.User;
import com.gx.bookstroe.service.Orderservice;
import com.gx.bookstroe.utils.DataSourceUtils;
public class Orderserviceimpl implements Orderservice{
OrderDao orderdao=new Orderdaoimpl();
OrderItemDao orderitemdao=new OrderItemDaoimpl();
ProductDao pdao=new Productdaoimpl();
@Override
public List<Order> findOrderByUser(User user) throws SQLException {
return orderdao.findOrderByUser(user);
}
@Override
public Order findOrderById(String id) throws SQLException {
Order order=null;
order=orderdao.findOrderById(id);
List<OrderItem> items=orderitemdao.findOrderItemByOrder(order);
order.setOrderItems(items);
return order;
}
@Override
public void delOrderById(String id) throws SQLException {
try {
DataSourceUtils.startTransation();
orderitemdao.delOrderItems(id);
orderdao.delOrderById(id);
} catch (Exception e) {
e.printStackTrace();
try {
DataSourceUtils.rollback();
} catch (Exception e2) {
e2.printStackTrace();
}
}finally{
try {
DataSourceUtils.releaseAndCloseConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void delOrderByIdWithClient(String id) throws SQLException {
try {
DataSourceUtils.startTransation();
Order order=new Order();
order.setId(id);
List<OrderItem> items=orderitemdao.findOrderItemByOrder(order);
//
pdao.updateProductNum(items);
orderitemdao.delOrderItems(id);
orderdao.delOrderById(id);
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
DataSourceUtils.releaseAndCloseConnection();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
com.gx.bookstroe.service.impl
com.gx.bookstroe.domain
editUserServlet.java
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
Product p=new Product();
Map<String, String> map=new HashMap<String, String>();
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setRepository(new File(this.getServletContext().getRealPath(
"/temp")));
// 设置上传文件缓存大小为10m
dfif.setSizeThreshold(1024 * 1024 * 10);
// 创建上传组件
ServletFileUpload upload = new ServletFileUpload(dfif);
// 处理上传文件中文乱码
upload.setHeaderEncoding("utf-8");
try {
// 解析request得到所有的FileItem
List<FileItem> items = upload.parseRequest(request);
// 遍历所有FileItem
for (FileItem item : items) {
// 判断当前是否是上传组件
if (item.isFormField()) {
// 不是上传组件
String fieldName = item.getFieldName(); // 获取组件名称
String value = item.getString("utf-8"); // 解决乱码问题
map.put(fieldName, value);
} else {
// 是上传组件
// 得到上传文件真实名称
String fileName = item.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
// fileName = FileUploadUtils.subFileName(fileName);
fileName=UUID.randomUUID().toString()+"_"+fileName;
SimpleDateFormat sdFormat=new SimpleDateFormat("yyyyMMdd");
String date=sdFormat.format(new Date());
fileName=date+fileName;
// 图片存储父目录
String imgurl_parent = "/productImg" ;
File parentDir=new File(this.getServletContext()
.getRealPath(imgurl_parent));
// 验证目录是否存在,如果不存在,创建出来
if (!parentDir.exists()) {
parentDir.mkdirs();
}
String imgurl=imgurl_parent+"/"+fileName;
map.put("imgurl", imgurl);
IOUtils.copy(item.getInputStream(), new FileOutputStream(
new File(parentDir, fileName)));
item.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
} try {
// 将数据封装到javaBean中
BeanUtils.populate(p, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Productservice service = new Productserviceimpl();
try {
// 调用service完成添加商品操作
service.addProduct(p);
response.sendRedirect(request.getContextPath()
+ "/listProduct");
return;
} catch (Exception e) {
e.printStackTrace();
response.getWriter().write("添加商品失败");
return;
}
}}
findOrderByIdservlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String type=request.getParameter("type");
String id=request.getParameter("id");
Orderservice service=new Orderserviceimpl();
Order order=null;
try {
order=service.findOrderById(id);
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("order", order);
if (type!=null) {
request.getRequestDispatcher("/admin/orders/view.jsp").forward(request, response);
return;
}
request.getRequestDispatcher("/client/orderInfo.jsp").forward(request, response);
}
}
FindOrderByUserServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user=(User)request.getSession().getAttribute("user");
Orderservice service=new Orderserviceimpl();
List<Order> orders=null;
try {
orders=service.findOrderByUser(user);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("orders", orders);
request.getRequestDispatcher("/client/orderlist.jsp").forward(request, response);
}
}
FindProductByManyConditionServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
String id=request.getParameter("id");
String name=request.getParameter("name");
String category=request.getParameter("category");
String minprice=request.getParameter("minprice");
String maxprice=request.getParameter("maxprice");
//创建Productservice对象
Productservice productservice=new Productserviceimpl();
List<Product> ps=null;
try {
ps=productservice.findProductByManyCondition(id, name, category, minprice, maxprice);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("ps", ps);
request.getRequestDispatcher("/admin/products/list.jsp").forward(request, response);
}}
loginservlet
logoutservlet
注册-registerservlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//2.将参数封装到注册表单相关的RegisterFormBean中
RegisterFormBean formBean=new RegisterFormBean();
try {
BeanUtils.populate(formBean, request.getParameterMap());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//3.判断参数是否符合格式
if(!formBean.validate()){
request.setAttribute("formBean", formBean);
request.getRequestDispatcher("/client/register.jsp").forward(request, response);
return;
}
// 4.参数符合要求,将表单提交的数据封装到javaBean
User user = new User();
try {
BeanUtils.populate(user, request.getParameterMap());
// 封裝激活码
user.setActiveCode(ActiveCodeUtils.createActiveCode());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//5.查找检验账号是否已经存在
Userserivice userservice=new Userserviceimpl();
User reuser = new User();
reuser=userservice.findname(user.getUsername());
if(reuser!=null){
//账号已经存在,提示用户名已经存在
request.setAttribute("mm", "您注册的用户已经存在");
request.getRequestDispatcher("/client/register.jsp").forward(request, response);
return;
}
//6.调用service的插入方法
boolean b=false;
try {
b=userservice.insert(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//6.判断是否注册成功
if(b==true){
response.sendRedirect(request.getContextPath() + "/client/registersuccess.jsp");
}
else{response.getWriter().write("注册失败");
}}
}
验证码
addProduct
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
// 创建javaBean,将上传数据封装.
Product p = new Product();
Map<String, String> map = new HashMap<String, String>();
// 封装商品id
map.put("id", IdUtils.getUUID());
DiskFileItemFactory dfif = new DiskFileItemFactory();
// 设置临时文件存储位置
dfif.setRepository(new File(this.getServletContext().getRealPath(
"/temp")));
// 设置上传文件缓存大小为10m
dfif.setSizeThreshold(1024 * 1024 * 10);
// 创建上传组件
ServletFileUpload upload = new ServletFileUpload(dfif);
// 处理上传文件中文乱码
upload.setHeaderEncoding("utf-8");
try {
// 解析request得到所有的FileItem
List<FileItem> items = upload.parseRequest(request);
// 遍历所有FileItem
for (FileItem item : items) {
// 判断当前是否是上传组件
if (item.isFormField()) {
// 不是上传组件
String fieldName = item.getFieldName(); // 获取组件名称
String value = item.getString("utf-8"); // 解决乱码问题
map.put(fieldName, value);
} else {
// 是上传组件
// 得到上传文件真实名称
String fileName = item.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
// fileName = FileUploadUtils.subFileName(fileName);
fileName=UUID.randomUUID().toString()+"_"+fileName;
SimpleDateFormat sdFormat=new SimpleDateFormat("yyyyMMdd");
String date=sdFormat.format(new Date());
fileName=date+fileName;
// 图片存储父目录
String imgurl_parent = "/productImg" ;
File parentDir=new File(this.getServletContext()
.getRealPath(imgurl_parent));
// 验证目录是否存在,如果不存在,创建出来
if (!parentDir.exists()) {
parentDir.mkdirs();
}
String imgurl=imgurl_parent+"/"+fileName;
map.put("imgurl", imgurl);
IOUtils.copy(item.getInputStream(), new FileOutputStream(
new File(parentDir, fileName)));
item.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
} try {
// 将数据封装到javaBean中
BeanUtils.populate(p, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Productservice service = new Productserviceimpl();
try {
// 调用service完成添加商品操作
service.addProduct(p);
response.sendRedirect(request.getContextPath()
+ "/listProduct");
return;
} catch (Exception e) {
e.printStackTrace();
response.getWriter().write("添加商品失败");
return;
}
}
}
delectProduct
delOrderByIdServlet
EditProductServlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
Product p=new Product();
Map<String, String> map=new HashMap<String, String>();
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setRepository(new File(this.getServletContext().getRealPath(
"/temp")));
// 设置上传文件缓存大小为10m
dfif.setSizeThreshold(1024 * 1024 * 10);
// 创建上传组件
ServletFileUpload upload = new ServletFileUpload(dfif);
// 处理上传文件中文乱码
upload.setHeaderEncoding("utf-8");
try {
// 解析request得到所有的FileItem
List<FileItem> items = upload.parseRequest(request);
// 遍历所有FileItem
for (FileItem item : items) {
// 判断当前是否是上传组件
if (item.isFormField()) {
// 不是上传组件
String fieldName = item.getFieldName(); // 获取组件名称
String value = item.getString("utf-8"); // 解决乱码问题
map.put(fieldName, value);
} else {
// 是上传组件
// 得到上传文件真实名称
String fileName = item.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
// fileName = FileUploadUtils.subFileName(fileName);
fileName=UUID.randomUUID().toString()+"_"+fileName;
SimpleDateFormat sdFormat=new SimpleDateFormat("yyyyMMdd");
String date=sdFormat.format(new Date());
fileName=date+fileName;
// 图片存储父目录
String imgurl_parent = "/productImg" ;
File parentDir=new File(this.getServletContext()
.getRealPath(imgurl_parent));
// 验证目录是否存在,如果不存在,创建出来
if (!parentDir.exists()) {
parentDir.mkdirs();
}
String imgurl=imgurl_parent+"/"+fileName;
map.put("imgurl", imgurl);
IOUtils.copy(item.getInputStream(), new FileOutputStream(
new File(parentDir, fileName)));
item.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
} try {
// 将数据封装到javaBean中
BeanUtils.populate(p, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Productservice service = new Productserviceimpl();
try {
// 调用service完成添加商品操作
service.addProduct(p);
response.sendRedirect(request.getContextPath()
+ "/listProduct");
return;
} catch (Exception e) {
e.printStackTrace();
response.getWriter().write("添加商品失败");
return;
}
}
}
listProduct
com.gx.bookstroe.utils