黑马旅游网-分类数据显示(六)

目录

一、效果

二、分析

三、前端实现

修改header.html

四、后端实现

修改CategoryServlet

修改CategoryService

categoryServiceImpl

CategoryDao

CategoryDaoImpl

修改BaseServlet

五、测试 

六、对分类数据进行优化

windows下安装

七、遇到bug


一、效果

二、分析

 

三、前端实现

修改header.html

<script>
    $(function () {
        $.post("user/findUser",{},function (data) {
            if (data.name!="undefined" && data.name!=null){
                var msg = "欢迎回来,"+data.name;
                $("#span_username").html(msg);
                $(".login").css("display","block");
            }else{
                $(".login").css("display","none");
            }

        });

        //通过ajax获取分类数据
        $.get("category/findAll",{},function (data) {
            var lis = '<li class="nav-active"><a href="index.html">首页</a></li>';
            //数据遍历
            for(var i=0;i<data.length;i++){
                var li = '<li><a href="route_list.html?cid='+data[i].cid+'">'+data[i].cname+'</a></li>';
                lis +=li;
            }

            lis+='<li><a href="favoriterank.html">收藏排行榜</a></li>';

            //往ul标签下插入html代码块
            $("#category").html(lis);

        });

    });
</script>

<!-- 头部 start -->
    <header id="header">
        <div class="top_banner">
            <img src="images/top_banner.jpg" alt="">
        </div>
        <div class="shortcut">
            <!-- 未登录状态  -->
            <div class="login_out">
                <a href="login.html">登录</a>
                <a href="register.html">注册</a>
            </div>
            <!-- 登录状态  -->
                <div class="login" style="display:none;">
            	
                <span id="span_username">欢迎回来,admin</span>
                <a href="myfavorite.html" class="collection">我的收藏</a>
                    <a href="javascript:location.href='user/exit';">退出</a>
            </div>
        </div>
        <div class="header_wrap">
            <div class="topbar">
                <div class="logo">
                    <a href="/"><img src="images/logo.jpg" alt=""></a>
                </div>
                <div class="search">
                    <input name="" type="text" placeholder="请输入路线名称" class="search_input" autocomplete="off">
                    <a href="javascript:;" class="search-button">搜索</a>
                </div>
                <div class="hottel">
                    <div class="hot_pic">
                        <img src="images/hot_tel.jpg" alt="">
                    </div>
                    <div class="hot_tel">
                        <p class="hot_time">客服热线(9:00-6:00)</p>
                        <p class="hot_num">400-618-9090</p>
                    </div>
                </div>
            </div>
        </div>
    </header>
    <!-- 头部 end -->
     <!-- 首页导航 -->
    <div class="navitem">
        <ul class="nav">
            <li class="nav-active"><a href="index.html">首页</a></li>
            <li><a href="route_list.html">门票</a></li>
            <li><a href="route_list.html">酒店</a></li>
            <li><a href="route_list.html">香港车票</a></li>
            <li><a href="route_list.html">出境游</a></li>
            <li><a href="route_list.html">国内游</a></li>
            <li><a href="route_list.html">港澳游</a></li>
            <li><a href="route_list.html">抱团定制</a></li>
            <li><a href="route_list.html">全球自由行</a></li>
            <li><a href="favoriterank.html">收藏排行榜</a></li>
        </ul>
    </div>
    

四、后端实现

修改CategoryServlet

package com.hotdas.travel.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hotdas.travel.domain.Category;
import com.hotdas.travel.service.CategoryService;
import com.hotdas.travel.service.impl.CategoryServiceImpl;
import com.sun.xml.internal.rngom.parse.host.Base;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/category/*")
public class CategoryServlet extends BaseServlet {

    private CategoryService categoryService = new CategoryServiceImpl();
    /**
     * 查询所有分类数据
     */
    public void findAll(HttpServletRequest request, HttpServletResponse response) throws Exception {

        List<Category> categoryList = categoryService.findAll();

        //返回数据到页面
//        ObjectMapper objectMapper = new ObjectMapper();
//        response.setCharacterEncoding("utf-8");
//        response.setContentType("application/json;charset=utf-8");
//        objectMapper.writeValue(response.getOutputStream(),categoryList);
        writeValue(categoryList,response);
    }

}

修改CategoryService

package com.hotdas.travel.service;

import com.hotdas.travel.domain.Category;

import java.util.List;

public interface CategoryService {

    List<Category> findAll();
}

categoryServiceImpl

package com.hotdas.travel.service.impl;

import com.hotdas.travel.dao.CategoryDao;
import com.hotdas.travel.dao.impl.CategoryDaoImpl;
import com.hotdas.travel.domain.Category;
import com.hotdas.travel.service.CategoryService;

import java.util.List;

public class CategoryServiceImpl implements CategoryService {
    private CategoryDao categoryDao = new CategoryDaoImpl();
    @Override
    public List<Category> findAll() {
        return categoryDao.findAll();
    }
}

CategoryDao

package com.hotdas.travel.dao;

import com.hotdas.travel.domain.Category;

import java.util.List;

public interface CategoryDao {

    List<Category> findAll();
}

CategoryDaoImpl

package com.hotdas.travel.dao.impl;

import com.hotdas.travel.dao.CategoryDao;
import com.hotdas.travel.domain.Category;
import com.hotdas.travel.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class CategoryDaoImpl implements CategoryDao {
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<Category> findAll() {
        String sql = "select * from tab_category";

        List<Category> list =jdbcTemplate.query(sql,new BeanPropertyRowMapper<Category>(Category.class));
        return list;
    }
}

修改BaseServlet

package com.hotdas.travel.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

public class BaseServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("service 已经运行...");
        //1.获取请求路径
        String requestURI = request.getRequestURI();// /travel/user/add ...
        //2.获取方法名
        String methodName = requestURI.substring(requestURI.lastIndexOf("/") + 1);

        System.out.println("methodName="+methodName);
        //3.让调用的servlet执行它自已该方法
        //谁调用谁是this
        System.out.println(this);
        try {
            //获取调者的方法
            Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);

            //暴力反射
            //method.setAccessible(true);
            //通过反射调用方法
            method.invoke(this,request,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //封装对象转字符串输出到客户端
    public void writeValue(Object obj,HttpServletResponse response) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=utf-8");
        objectMapper.writeValue(response.getOutputStream(),obj);
    }
}

五、测试 

 

六、对分类数据进行优化

1. 为了减少数据库的压力,使用redis缓存分类数据

package com.hotdas.travel.service.impl;

import com.hotdas.travel.dao.CategoryDao;
import com.hotdas.travel.dao.impl.CategoryDaoImpl;
import com.hotdas.travel.domain.Category;
import com.hotdas.travel.service.CategoryService;
import com.hotdas.travel.util.JedisUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class CategoryServiceImpl implements CategoryService {
    private CategoryDao categoryDao = new CategoryDaoImpl();
    @Override
    public List<Category> findAll() {
        //1.连接redis
        Jedis jedis = JedisUtil.getJedis();

        List<Category> lists =null;

        //redis中有一个得分实现排序功能
        //zrangeWithScores有作用范围的,start从0条件记录开始读取,end是排序.
        Set<Tuple> categorys = jedis.zrangeWithScores("category",0,-1);

        List<Category> cs = null;
        if (categorys==null || categorys.size()==0){
            System.out.println("从数据库中读取....");
            cs=categoryDao.findAll();

            for(int i =0 ;i<cs.size();i++){
                jedis.zadd("category",cs.get(i).getCid(),cs.get(i).getCname());
            }

        }else{
            System.out.println("从redis中读取数据");
            cs=new ArrayList<>();
            for(Tuple t : categorys){
                Category category = new Category();
                category.setCid((int)t.getScore());
                category.setCname(t.getElement());
                cs.add(category);
            }
        }
        return cs;
    }
}

 2.安装redis

windows下安装

下载安装包

解压安装包

输入redis-server.exe redis.windows.conf命令。

 验证输入ping,PONG连接成功

七、遇到bug

1.redis未连接,

Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
	at redis.clients.jedis.Connection.connect(Connection.java:154)
	at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:83)
	at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1643)
	at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:85)
	at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861)
	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
	at redis.clients.util.Pool.getResource(Pool.java:48)
	... 26 more
Caused by: java.net.SocketTimeoutException: connect timed out
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at redis.clients.jedis.Connection.connect(Connection.java:148)
	... 33 more

连接成功redis,问题就解决了

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.itcast.parent</groupId> <artifactId>itcast-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>cn.itcast</groupId> <artifactId>travel</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!-- Jackson Json处理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lambda-小张

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

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

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

打赏作者

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

抵扣说明:

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

余额充值