10_商品分类展示

商品分类展示

  • 需求设计步骤分析
  • 步骤实现

1)需求设计步骤分析

设计

进入首页时显示分类信息
在这里插入图片描述

步骤分析
  1. 创建数据表环境
  2. 在IndexServlet上查询分类信息
  3. 实现service与dao的findAll方法

2)步骤实现

① 分类表
CREATE TABLE `category` (
  `cid` varchar(32) NOT NULL,
  `cname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
② 分类实体
public class Category implements Serializable{
	private static final long serialVersionUID = 8552469714968114104L;
	private String cid;
	private String cname;
	//getter和setter方法略...
}
③ 创建Dao层和Service接口和实现类

在这里插入图片描述

④ 完成首页跳转

IndexServlet的映射路径为"/index/*",修改web.xml中的< welcome-file-list >

<welcome-file-list>
  <welcome-file>/index.jsp</welcome-file>
</welcome-file-list>

在WebContent下新建index.jsp,重定向到/store/index/

<body>
	<%
		response.sendRedirect(request.getContextPath()+"/index/");
	%>
</body>

在IndexServlet中处理路径,重定向到首页,展示分类:

@WebServlet("/index/*")
public class IndexServlet extends HttpServlet{

	private static final long serialVersionUID = -387379765209282143L;
	//service层对象
	CategoryService categoryService=new CategoryServiceImpl();
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//得到URI
		String uri=request.getRequestURI();
		//处理各个方法抛出的异常
		try {
			if(uri.endsWith("/")) {
				index(request,response);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			//抛出自定义异常
			throw new MyException();
		} 
	}
	/**
	 * 首页
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void index(HttpServletRequest request, HttpServletResponse response) throws Exception {
		//1、调用service查询所有的分类,返回值list
		List<Category> categoryList=categoryService.findAll();
		
		//2、将返回值放入request域中
		request.setAttribute("categoryList", categoryList);
		
		//请求转发
		request.getRequestDispatcher("/jsp/index.jsp").forward(request, response);
	}
	
}
⑤ 完成service层

CategoryService接口:

public interface CategoryService {
	/**
	 * 查询所有
	 * @return
	 */
	List<Category> findAll() throws Exception;
}

CategoryServiceImpl实现类:

public class CategoryServiceImpl implements CategoryService{
	//dao
	CategoryDao categoryDao=new CategoryDaoImpl();
	
	@Override
	public List<Category> findAll()  throws Exception{
		return categoryDao.findAll();
	}
}
⑥ 完成dao层

CategoryDao接口:

public interface CategoryDao {
	/**
	 * 查询所有
	 * @return
	 */
	List<Category> findAll()  throws Exception;
}

CategoryDaoImpl实现类:

public class CategoryDaoImpl implements CategoryDao{
	//QueryRunner
	private QueryRunner qr=new QueryRunner(DBUtil.getDataSource());

	@Override
	public List<Category> findAll() throws Exception {
		String sql="select * from category";
		return qr.query(sql, new BeanListHandler<>(Category.class));
	}
}
⑦ 使用静态导入的方式把logo区导入到各界面中

在jsp/constant/下新建一个head.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<div class="container-fluid">
	<div class="col-md-4">
		<img src="${path}/img/20180824125427.png" />
	</div>
	<div class="col-md-5">
		<img src="${path}/img/header.png" />
	</div>
	<!-- 登录状态 -->
	<div class="col-md-3" style="padding-top: 20px">
		<ol class="list-inline">
			<c:if test="${empty user }">
				<li><a href="${path}/user/toLogin">登录</a></li>
				<li><a href="${path}/user/toRegister">注册</a></li>
			</c:if>
			<c:if test="${not empty user }">
							${user.username }:您好
							<li><a href="${path}/user/logout">退出</a></li>
				<li><a href="${path}/user/">我的订单</a></li>
			</c:if>
			<li><a href="cart.htm">购物车</a></li>
		</ol>
	</div>
</div>

<div class="container-fluid">
	<nav class="navbar navbar-inverse">
		<div class="container-fluid">
			<!-- Brand and toggle get grouped for better mobile display -->
			<div class="navbar-header">
				<button type="button" class="navbar-toggle collapsed"
					data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
					aria-expanded="false">
					<span class="sr-only">Toggle navigation</span> <span
						class="icon-bar"></span> <span class="icon-bar"></span> <span
						class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="#">首页</a>
			</div>

			<!-- Collect the nav links, forms, and other content for toggling -->
			<div class="collapse navbar-collapse"
				id="bs-example-navbar-collapse-1">
				<!-- 分类展示 -->
				<ul class="nav navbar-nav">
					<c:forEach items="${categoryList }" var="category">
						<li><a href="#">${category.cname }</a></li>
					</c:forEach>
					<!-- <li class="active"><a href="product_list.htm">手机数码<span class="sr-only">(current)</span></a></li>
								<li><a href="#">电脑办公</a></li>
								<li><a href="#">电脑办公</a></li>
								<li><a href="#">电脑办公</a></li> -->
				</ul>

				<form class="navbar-form navbar-right" role="search">
					<div class="form-group">
						<input type="text" class="form-control" placeholder="Search">
					</div>
					<button type="submit" class="btn btn-default">Submit</button>
				</form>

			</div>
			<!-- /.navbar-collapse -->
		</div>
		<!-- /.container-fluid -->
	</nav>
</div>

在需要展示的jsp中使用include标签静态导入:

<!-- logo展示 -->
<%@include file="constant/head.jsp" %>

注意:把其他需要替换的jsp中全部使用静态导入的方式引入该文件

⑧ 测试

进入首页
在这里插入图片描述
进入登录和注册界面,会发现在商品分类展示处没有分类展示,因为没有数据转发过来,需要使用Ajax在logo.jsp中动态加载。
在这里插入图片描述


3)使用Ajax动态展示展品分类

步骤分析:

  1. 编写一个CategoryServlet用来处理关于分类的请求
  2. 编写findAll方法用来查询所有—list通过json返回到页面上
  3. 在head.jsp加载成功之后发送一个ajax请求,用来展示分类
① 新建CategoryServlet,完成ajax路径的处理

其中要把findAll中查询到的list转为json格式发送带页面,需要导入json的jar包。

@WebServlet("/category/*")
public class CategoryServlet extends HttpServlet{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 3173523047984241611L;
	private CategoryService categoryService=new CategoryServiceImpl();
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//得到URI
		String uri=request.getRequestURI();
		//处理各个方法抛出的异常
		try {
			if(uri.endsWith("/findAll")) {
				findAll(request,response);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			//抛出自定义异常
			throw new MyException();
		} 
	
	}
	private void findAll(HttpServletRequest request, HttpServletResponse response) throws Exception {
		//1、调用categoryService执行查询所有
		List<Category> list=categoryService.findAll();
		//2、将返回值转成json格式返回到页面
		String json=JsonUtil.list2json(list);
		
		//3、写回去
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().println(json);
	}
	
}
② 在head.jsp页面添加ajax
<script>
	//页面加载之后完成
	$(function(){
		//发送Ajax请求
		$.ajax({
			type:"GET"
			,url:"${path}/category/findAll"
			,dataType:"json"
			,success:function(data){
				//data为后台穿过来的list的json格式数据
				//1、获取ul 给ul一个id为menuId
				var $ul=$("#menuId");
				//2、遍历数组
				$(data).each(function(){
					$ul.append($("<li><a href='#'>"+this.cname+"</a></li>"));
				});
			}
		}
		);
	});
</script>
③ 重启服务器测试:

在这里插入图片描述
首页,登录界面,和注册界面都使用include导入head.jsp。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robona

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值