基于JavaWeb的旅游项目--导航功能




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);

    }
}

猜你喜欢

转载自blog.csdn.net/qq_41209886/article/details/109081181