文章目录
1、导航功能—界面展示
2、导航后台代码开发
(1)CategoryServiceTest
TestCategoryService.java(src\test\java\service)
import com.smp.domain.Category;
import org.junit.Test;
import java.util.List;
public class TestCategoryService {
@Test
public void test01(){
//创建业务对象
CategoryService categoryService=new CategoryService();
//显示所有的分类
List<Category> categoryList=categoryService.findAll();
//打印出来
System.out.println(categoryList);
}
}
Category.java(src\main\java\domain)
public class Category {
private int cid;//分类id
private String cname;//分类名称
@Override
public String toString() {
return "Category{" +
"cid=" + cid +
", cname='" + cname + '\'' +
'}';
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
(2)CategoryService
CategoryService.java(src\main\java\service)
import com.smp.dao.CategoryDao;
import com.smp.domain.Category;
import com.smp.util.MySessionUtils2;
import java.util.List;
public class CategoryService {
public List<Category> findAll(){
//调用
CategoryDao dao= MySessionUtils2.getMapper(CategoryDao.class);
//查询所有的分类数据
List<Category> list=dao.findAll();
//List<Category> list1=dao.findOneByCid();
//赋返回值
return list;
}
}
(3)CategoryDao
CategoryDao.java(src\main\java\dao)
import com.smp.domain.Category;
import java.util.List;
public interface CategoryDao {
//查找所有的分类
//select * from tab_category order by cid asc;
List<Category> findAll();
//根据id查找分类
//select * from tab_category c where c.cid=1;
Category findOneByCid(int cid);
}
CategoryDao.xml(src\main\sources)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smp.dao.CategoryDao">
<select id="findAll" resultType="category">
select * from tab_category order by cid asc;
</select>
<!-- //select * from tab_category c where c.cid=1;-->
<!-- Category findOneByCid(int cid);-->
<select id="findOneByCid" resultType="category" parameterType="int">
select * from tab_category c where c.cid=#{
cid};
</select>
</mapper>
SqlMapConfig.xml(src\main\resources)
<!-- 一个mapper标签可以指定一个映射文件-->
<mappers>
<mapper resource="UserDao.xml"/>
<mapper resource="CategoryDao.xml"/>
(4)CategoryServlet
CategoryServlet.java(src\main\java\web\servlet)
@WebServlet("/categoryServlet")
public class CategoryServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建业务对象
CategoryService categoryService = new CategoryService();
//所有的分类
List<Category> categoryList=categoryService.findAll();
//显示
ResponseInfo info = new ResponseInfo();
info.setCode(200);
info.setData(categoryList);
String json = new ObjectMapper().writeValueAsString(info);
response.getWriter().println(json);
}
}
3、导航前台代码开发
header.jsp
- 在js中,使用引号号表示字符串,避免生成转译的\
- 在js中的字符串拼接变量
' + 变量名 + '
<!-- 首页导航 -->
<script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
//页面加载成功之后执行
$.get(
"categoryServlet",
function (data) {
//这个data就是服务器返回的字符串
if (data.code == 200) {
var list = data.data;
//定义一个变量,拼接导航的显示内容 li
var lis = "";
//拼接第一项
lis += '<li class="nav-active"><a href="index.jsp">首页</a></li>'
//循环所有的分类
for (var i = 0; i < list.length; i++) {
//在js中,使用引号号表示字符串,避免生成转译的\
var li = '<li><a href="route_list.jsp?cid='+list[i].cid+'">' + list[i].cname + '</a></li>'
lis += li
}
//拼接最后一项
lis += ' <li><a href="favoriterank.html">收藏排行榜</a></li>'
//显示在ul标签里面
$("#nav").html(lis)
}
},
"json"
);
})
</script>
(2)ajax发送get请求
(3)jquery的for循环
(4)html()函数修改界面
4、导航优化
(1)redis缓存json
- (1)哪个地方要优化?为什么?
分类的数据在每一次页面加载后都会重新请求数据库来加载,对数据库的压力比较大,而且分类的数据不会经常产生变化
,所有可以使用redis来缓存这个数据。 - (2)redis缓存的流程
---->先访问redis获取数据
---->对数据进行判断
如果不为null,则直接返回
否则调用service查数据库
(2)redis使用
redis服务器
启动:cmd-->cd redis地址-->startup.bat
jedis.properties(src\main\resources)
host=192.168.21.101
port=6379
maxTotal=100
maxIdle=10
(3)修改CategoryServlet代码
CategoryServlet.java(src\main\java\web\servlet)
@WebServlet("/categoryServlet")
public class CategoryServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//访问redis 较快,但是第一次是没有数据的
//访问service,获取json,将json保存到redis
Jedis jedis = JedisUtil.getJedis();
String json = jedis.get("category_list");
if (json != null) {
System.out.println("redis cache");
response.getWriter().println(json);
} else {
System.out.println("mysql data");
//创建业务对象
CategoryService categoryService = new CategoryService();
//所有的分类
List<Category> categoryList=categoryService.findAll();
//显示
ResponseInfo info = new ResponseInfo();
info.setCode(200);
info.setData(categoryList);
json = new ObjectMapper().writeValueAsString(info);
//将数据保存到redis
jedis.set("category_list",json);
response.getWriter().println(json);
}
//关闭连接
JedisUtil.close(jedis);
}
}