public class IndexServlet extends BaseServlet {
@Override
public String execute(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
// 调用业务层的一个功能,获取全部的分类信息,返回集合
Cat 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 egoryService categoryService = new CategoryServiceImpl();
List list = categoryService.getAllCats();
// 将返回的集合放入request内
request.setAttribute(“allCats”, list);
// 转发到真实的首页
return “/jsp/index.jsp”;
}
}
分别创建CategoryServlet,CategoryService,CategoryServiceImpl,CategoryDao,CategoryDaoImpl
public interface CategoryService {
List getAllCats() throws Exception;
}
public class CategoryServiceImpl implements CategoryService {
@Override
public List getAllCats() throws Exception {
CategoryDao categoryDao = new CategoryDaoImpl();
return categoryDao.getAllCats();
}
}
import cn.itzheng.store.domain.Category;
public interface CategoryDao {
List getAllCats() throws Exception;
}
public class CategoryDaoImpl implements CategoryDao {
@Override
public List getAllCats() throws Exception {
String sql = “select * from category”;
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
return qr.query(sql, new BeanListHandler(Category.class));
}
}
在header.jsp页面当中获取IndexServlet发送的List集合
<c:forEach items=“${allCats}” var=“c”>
- ${c.cname }
</c:forEach>
弊端:当访问首页是可以看到全部的分类信息,但是如果访问其它登录页面,看不到分类信息
JSON 相关知识
[https://www.runoob.com/json/json-tutorial.html](()
[](()首页分类版本二(使用json)
步骤实现:
1、/jsp/header.jsp
在页面底部
$.post(url,{},function(data){},“json”){}
2、在CategoryServlet当中创建findAllCats方法
调用业务层的获取全部分类
将全部分类转换为JSON格式的数据
导入json相关的架包(web下的lib当中)
将全部的分类信息响应到客户端
public class CategoryServlet extends BaseServlet {
// findAllCats
public String findAllCats(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// 调用业务层的获取全部分类
CategoryService categoryService = new CategoryServiceImpl();
List list = categoryService.getAllCats();
// 将全部分类的List数据转换为JSON格式的数据(转换之前要引入json相关的架包)
String jsonStr = JSONArray.fromObject(list).toString();
System.out.println(jsonStr);
// 将全部的分类信息响应到客户端
//告诉浏览器本次响应的数据是JSON格式的字符串
resp.setContentType(“application/json;charset=utf-8”);
resp.getWriter().print(jsonStr);//将json格式的字符串响应到客户端
return null;
}
}
3、调试
观察本次的请求和响应网络传输的情况,
目的:排除两端错误
[{“cid”:“1”,“cname”:“手机数码”},
{“cid”:“172934bd636d485c98fd2d3d9cccd409”,“cname”:“运动户外”},
{“cid”:“2”,“cname”:“电脑办公”},
{“cid”:“3”,“cname”:“家具家居”},
{“cid”:“4”,“cname”:“鞋靴箱包”},
{“cid”:“5”,“cname”:“图书音像”},
{“cid”:“59f56ba6ccb84cb591c66298766b83b5”,“cname”:“aaaa”},
{“cid”:“6”,“cname”:“母婴孕婴”},
{“cid”:“afdba41a139b4320a74904485bdb7719”,“cname”:“汽车用品”}]
版本二的弊端:如果用户频繁的访问包含分类信息的页面,每次都要去DB中去获取分类信息,影响性能。
[](()首页分类版本三(使用Redis)
原理分析
步骤实现:
[](()1、导入Redis,jar包
[](()2、及其工具类(修改参数127.0.01)
public class JedisUtils {
//创建连接池
private static JedisPoolConfig config;
private static JedisPool pool;
static{
config=new JedisPoolConfig();
config.setMaxTotal(30);
config.setMaxIdle(2);
pool=new JedisPool(config, “127.0.0.1”, 6379);//链接本地的redis
}
//获取连接的方法
public static Jedis getJedis(){
return pool.getResource();
}
//释放连接