19-Javaweb-实战2(商品分类 分页 浏览记录 IOC)

 

目录

一.案例1-分类展示

1-1.步骤分析

1-1-1.创建分类表

1-1-2.在indexservlet上查询分类信息

1-1-3.调用CategoryService.findAll() 返回值是:list

1-2.信息分类展示--通过发送异步请求

 1-2-0.将jsp头部分开,其他页面包含页面

1-2-1.编写一个单独的 CategorySerlvet

1-2-2.findAll方法用来查询所有

1-2-3.在head.jsp加载成功之后发送一个ajax请求

1-3.常见的缓存技术

1-4.ehcache使用步骤

1-4-1.导入jar包

1-4-2.编写配置文件-src下的ehcache(项目运行时在 classes 目录下)

1-4-3.在service中动态从缓存中获取数据-使用api-service需要序列化

二.案例2-首页上的热门商品和最新商品

2-1.步骤分析

2-1-1.在indexServlet的index方法中实现

2-1-2.页面加载的时候 加载最新商品 和 热门商品即可 

2-2.准备工作

2-2-1.数据库和表

2-2-2.javabean product

三.案例3-查询单个商品的详情

3-1.步骤分析

3-1-1.在首页上 点击每个商品

3-1-2.编写 getById方法

3-1-3.商品详情页面

四.案例4-分页展示商品

4-1.步骤分析

4-1-0.pageBean

4-1-1.在菜单上 点击一个分类 head.jsp

4-1-2.findByPage操作

4-1-3.在productSerivce需要封装成pagebean

4-1-4.在product_list.jsp展示数据

五.扩展 :浏览记录

5-1.步骤分析

5-1-1.获取指定的cookie

5-1-2.判断cookie是否为空

5-1-3.在product_list.jsp需要将cookie里面的商品展示出来

 六.解耦合-ioc


  • 一.案例1-分类展示

    最初的设计
        点击首页的时候,查询分类信息

  • 1-1.步骤分析

  • 1-1-1.创建分类表

    CREATE TABLE `category` (
      `cid` varchar(32) NOT NULL,
      `cname` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`cid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    INSERT INTO `category` VALUES ('1','手机数码'),('172934bd636d485c98fd2d3d9cccd409','运动户外'),('2','电脑办公'),('3','家具家居'),('4','鞋靴箱包'),('5','图书音像'),('59f56ba6ccb84cb591c66298766b83b5','aaaa'),('6','母婴孕婴'),('afdba41a139b4320a74904485bdb7719','汽车用品');

import java.io.Serializable;

/**
 * 分类实体
 * @author Administrator
 *
 */
public class Category implements Serializable {
	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;
	}
	
	
}

 

  • 1-1-2.在indexservlet上查询分类信息

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



/**
 * 和首页相关的servlet
 */
public class IndexServlet extends BaseServlet {
	public String index(HttpServletRequest request, HttpServletResponse response) {
		//去数据库中查询最新商品和热门商品  将他们放入request域中 请求转发
		ProductService ps=(ProductService) BeanFactory.getBean("ProductService");
		
		//最新商品
		List<Product> newList=null;
		List<Product> hotList=null;
		try {
			newList = ps.findNew();
			hotList=ps.findHot();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//热门商品
		
		//将俩个list放入域中
		request.setAttribute("nList", newList);
		request.setAttribute("hList", hotList);
		
		return "/jsp/index.jsp";
	}

}
  • 1-1-3.调用CategoryService.findAll() 返回值是:list

public class CategoryServiceImpl implements CategoryService {

	/**
	 *  查询所有的分类
	 */
	@Override
	public List<Category> findAll() throws Exception {

		//从数据库中获取
		CategoryDao cd=new CategoryDaoImpl();

		
		return cd.findAll();
	}
}
  • 1-2.信息分类展示--通过发送异步请求

完成之后 ,我们发现只有在访问首页的时候才能把分类列表展示出来,怎么办?????
要想让所有的页面上都有分类,只需要将 页面上 logo和菜单部分包含进来.怎么去查询分类信息呢????
只需要在页面加载成功之后 发送一个ajax请求 异步查询所有的分类信息即可
技术:
    json
    包含
    ajax
步骤分析:

  •  1-2-0.将jsp头部分开,其他页面包含页面

  • 静态包含
			<!-- 静态包含 -->
			<%@include file="/jsp/head.jsp" %>
  • 动态包含
	<!-- 动态包含 -->
	<jsp:include page="/jsp/head.jsp"></jsp:include>

 

 

  • 1-2-1.编写一个单独的 CategorySerlvet

  • 导入jar包
  • 添加 JsonUtils

import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.xml.XMLSerializer;

/**
 * 处理json数据格式的工具类
 * 
 * @Date 2013-3-31
 * @version 1.0
 */
public class JsonUtil {
	/**
	 * 将数组转换成String类型的JSON数据格式
	 * 
	 * @param objects
	 * @return
	 */
	public static String array2json(Object[] objects){
		
		JSONArray jsonArray = JSONArray.fromObject(objects);
		return jsonArray.toString();
		
	}
	
	/**
	 * 将list集合转换成String类型的JSON数据格式
	 * 
	 * @param list
	 * @return
	 */
	public static String list2json(List list){
		
		JSONArray jsonArray = JSONArray.fromObject(list);
		return jsonArray.toString();
		
	}
	
	/**
	 * 将map集合转换成String类型的JSON数据格式
	 * 
	 * @param map
	 * @return
	 */
	public static String map2json(Map map){
		
		JSONObject jsonObject = JSONObject.fromObject(map);
		return jsonObject.toString();
		
	}
	
	/**
	 * 将Object对象转换成String类型的JSON数据格式
	 * 
	 * @param object
	 * @return
	 */
	public static String object2json(Object object){
		
		JSONObject jsonObject = JSONObject.fromObject(object);
		return jsonObject.toString();
		
	}
	
	/**
	 * 将XML数据格式转换成String类型的JSON数据格式
	 * 
	 * @param xml
	 * @return
	 */
	public static String xml2json(String xml){
		
		JSONArray jsonArray = (JSONArray) new XMLSerializer().read(xml);
		return jsonArray.toString();
		
	}
	
	/**
	  * 除去不想生成的字段(特别适合去掉级联的对象)
	  *
	  * @param excludes
	  * @return
	*/
	public static JsonConfig configJson(String[] excludes) {
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.setExcludes(excludes);
		jsonConfig.setIgnoreDefaultExcludes(true);
		jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
		return jsonConfig;
	}
	
}
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CategoryServlet
 */
public class CategoryServlet extends BaseServlet {

	/**
	 * 查询所有的分类
	 */
	public String findAll(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 1.调用categoryservice 查询所有的分类 返回值list
		CategoryService cs = CategoryServicImpl();
		List<Category> clist = null;
		try {
			clist = cs.findAll();
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 2.将返回值转成json格式 返回到页面上
		//request.setAttribute("clist", clist);//放入request域中
		String json = JsonUtil.list2json(clist);
		
		//3.写回去
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().println(json);
		
		return null;
	}

}

 

  • 1-2-2.findAll方法用来查询所有

    list通过json返回到页面上

  • 1-2-3.在head.jsp加载成功之后发送一个ajax请求

    $.get(url,params,function(data){},"json");

  • 为ul标签添加id值
				<ul id="menuId" class="nav navbar-nav">
					<%-- <c:forEach items="${clist }" var="c">
						<li><a href="#">${c.cname }</a></li>
					</c:forEach> --%>
				</ul>
  • 遍历数组,写内容
<script>
	$(function(){
		//发送ajax请求
		$.get("${pageContext.request.contextPath}/category?method=findAll",function(data){
			//获取menu的ul标签-----为其添加id值
			var $ul=$("#menuId");
			
			//遍历数组
			$(data).each(function(){
				$ul.append($("<li><a href='${pageContext.request.contextPath}/product?method=findByPage&cid="+this.cid+"&currPage=1'>"+this.cname+"</a></li>"));
			});
		},"json");
	});
</script>


上面的操作我们已经可以在每个页面上查看到分类信息了,但是只要换一次页面就会查询一下数据库,增加服务器的压力,
对于数据不常变化的情况,我们可以使用缓存技术

  • 1-3.常见的缓存技术

ehcache:今天用,hibernate中底层使用了ehcache
memcache
redis

  • 1-4.ehcache使用步骤

  • 1-4-1.导入jar包

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值