1.界面显示,获取商品分类类别(后端)
数据库表category
访问主页,得到分类,
访问一个servlet,执行相应操作,发送数据到主页显示,
可以直接数据库访问,得到category库得到表内容,封装category类对象,setAttribute,接着foreach+${category.cname }
也可以ajax,
ajax
<script type="text/javascript">
//index.jsp加载完毕后 去服务器端获得所有的category数据
$(function(){
var content = "";
$.post(
"${pageContext.request.contextPath}/categoryList",//发送至servlet
function(data){
//[{"cid":"xxx","cname":"xxxx"},{},{}],从servlet得到的data
//动态创建<li><a href="#">${category.cname }</a></li>
for(var i=0;i<data.length;i++){
content+="<li>"+data[i].cname+</li>";
}
//将拼接好的li放置到ul中
$("#categoryUl").html(content);
},
"json"
);
});
</script>
servlet
public class CategoryListServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ProductService service = new ProductService();
List<Category> categoryList = service.findAllCategory();
Gson gson = new Gson();
categoryListJson = gson.toJson(categoryList);
jedis.set("categoryListJson", categoryListJson);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(categoryListJson);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Category
public class Category {
private String cid;
private String cname;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
service
public class ProductService {
public List<Category> findAllCategory() {
ProductDao dao = new ProductDao();
List<Category> categoryList = null;
try {
categoryList = dao.findAllCategory();
} catch (SQLException e) {
e.printStackTrace();
}
return categoryList;
}
}
dao
public class ProductDao {
public List<Category> findAllCategory() throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from category";
return runner.query(sql, new BeanListHandler<Category>(Category.class));
}
}
大致这样,就能得到分类,然后点击分类,显示相应的商品,
2.显示某类型商品列表
通过分类的cid(product表product类一样有的)查找product
所以需要在ajax得到分类时在分类超链接处顺便发送cid至查找产品servlet
/productListByCid?cid="+data[i].cid+"
select *显示产品按cid分类,
还有上一页下一页,domain包除了建Product类之外还需要建个页面类PageBean类
Product类对应数据库表,
PageBean类
private int currentPage;//当前页数
private int currentCount;//单页面个数,
private int totalCount;//该类型产品总个数
private int totalPage;//总页数,不同产品不同页数
private List<T> list;//产品信息List表示,T-Product
Servlet
public class ProductListByCidServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得cid
String cid = request.getParameter("cid");
String currentPageStr = request.getParameter("currentPage");
if(currentPageStr==null) currentPageStr="1";//刚点类别自动跳第一页
int currentPage = Integer.parseInt(currentPageStr);//转类型
int currentCount = 8;//每页8个商品
ProductService service = new ProductService();
PageBean pageBean = service.findProductListByCid(cid,currentPage,currentCount);//进行业务处理,发送cid,当前页数,页面个数
request.setAttribute("pageBean", pageBean);
request.setAttribute("cid", cid);
//定义一个记录历史商品信息的集合
List<Product> historyProductList = new ArrayList<Product>();
//获得客户端携带名字叫pids的cookie
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
if("pids".equals(cookie.getName())){
String pids = cookie.getValue();//3-2-1
String[] split = pids.split("-");
for(String pid : split){
Product pro = service.findProductByPid(pid);
historyProductList.add(pro);
}
}
}
}
//将历史记录的集合放到域中
request.setAttribute("historyProductList", historyProductList);
request.getRequestDispatcher("/product_list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
service
public class ProductService {
public PageBean findProductListByCid(String cid,int currentPage,int currentCount) {
ProductDao dao = new ProductDao();
//封装一个PageBean 返回web-servlet层
PageBean<Product> pageBean = new PageBean<Product>();
//1、封装当前页pageBean.setCurrentPage(currentPage);
//2、封装每页显示的个数pageBean.setCurrentCount(currentCount);
//3、封装总条数,数据库查int totalCount = 0;
try {
totalCount = dao.getCount(cid);
} catch (SQLException e) {
e.printStackTrace();
}
pageBean.setTotalCount(totalCount);
//4、封装总页数math.ceil-大于当前数的整数
int totalPage = (int) Math.ceil(1.0*totalCount/currentCount);
pageBean.setTotalPage(totalPage);
//5、当前页显示的数据-最重要的,显示的
// select * from product where cid=? limit ?,?
// 当前页与起始索引index的关系
int index = (currentPage-1)*currentCount;
List<Product> list = null;
try {
list = dao.findProductByPage(cid,index,currentCount);
} catch (SQLException e) {
e.printStackTrace();
}
pageBean.setList(list);
return pageBean;
}
}
dao
public int getCount(String cid) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select count(*) from product where cid=?";
Long query = (Long) runner.query(sql, new ScalarHandler(),cid);
return query.intValue();
}//根据cid查询该类型产品数量
public List<Product> findProductByPage(String cid, int index, int currentCount) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from product where cid=? limit ?,?";
List<Product> list = runner.query(sql, new BeanListHandler<Product>(Product.class), cid,index,currentCount);
return list;
}//根据cid,当前页的起始索引,每页个数查显示页显示的内容
view-jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach items="${pageBean.list }" var="pro">
<div >
<img src="${pageContext.request.contextPath }/${pro.pimage}" >
</a>
<p>
${pro.pname }</a>
</p>
<p>
<font>商城价:¥${pro.shop_price }</font>
</p>
</div>
</c:forEach>
<!-- 上一页 -->
<c:if test="${pageBean.currentPage==1 }">
<li class="disabled">
<a href="javascript:void(0);">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=1 }">
<li>
<a href="${pageContext.request.contextPath}/productListByCid?cid=${cid}¤tPage=${pageBean.currentPage-1 }" >
<span>«</span>
</a>
</li>
</c:if>
<!-- 显示每一页 -->
<c:forEach begin="1" end="${pageBean.totalPage }" var="page">
<!-- 判断是否是当前页,是的话不能点击 -->
<c:if test="${page==pageBean.currentPage }">
<li class="active"><a href="javascript:void(0);">${page }</a></li>
</c:if>
<c:if test="${page!=pageBean.currentPage }">
<li><a href="${pageContext.request.contextPath}/productListByCid?cid=${cid}¤tPage=${page }">${page }</a></li>
</c:if>
</c:forEach>
<!-- 下一页 -->
<c:if test="${pageBean.currentPage==pageBean.totalPage }">
<li class="disabled">
<a href="javascript:void(0);" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<c:if test="${pageBean.currentPage!=pageBean.totalPage }">
<li>
<a href="${pageContext.request.contextPath}/productListByCid?cid=${cid}¤tPage=${pageBean.currentPage+1 }" >
<span>»</span>
</a>
</li>
</c:if>
3.点击商品显示商品详情
点击查看商品,查看PageBean类list-Product类对象
<a href="${pageContext.request.contextPath }/productInfo?pid=${pro.pid}}
servlet
//获得要查询的商品的pid
String pid = request.getParameter("pid");
ProductService service = new ProductService();
Product product = service.findProductByPid(pid);
request.setAttribute("product", product);
request.getRequestDispatcher("/product_info.jsp").forward(request, response);
request.getRequestDispatcher("/product_info.jsp").forward(request, response);
service
public Product findProductByPid(String pid) {
ProductDao dao = new ProductDao();
Product product = null;
try {
product = dao.findProductByPid(pid);
} catch (SQLException e) {
e.printStackTrace();
}
return product;
}
dao
public Product findProductByPid(String pid) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from product where pid=?";
return runner.query(sql, new BeanHandler<Product>(Product.class), pid);
}
view-jsp
${product.pname}
${product.。。。}
填充即可