旅游门户网站02

优化Servlet

减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同的方法,完成用户的请求。
在这里插入图片描述

BaseServlet:

public class BaseServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");

        String uri = req.getRequestURI();
//        System.out.println("请求uri:"+uri);
        String methodName = uri.substring(uri.lastIndexOf('/') + 1);
//        System.out.println("方法名称:"+methodName);
        Method method = null;
        try {
            method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }

    public void writeResponse(Object data,HttpServletResponse response) throws IOException {
        ObjectMapper mapper= new ObjectMapper();
        String json ="";
        try {
            json = mapper.writeValueAsString(data);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        response.getWriter().write(json);
    } 
}

分类数据的展示:

功能分析:

在这里插入图片描述

CategoryServlet

@WebServlet("/category/*")
public class CategoryServlet extends BaseServlet {
    CategoryService service = new CategoryServiceImpl();

    public void findAll(HttpServletRequest request,HttpServletResponse response) throws IOException {
        List<Category> list= service.findAll();
        ResponseInfo responseInfo = new ResponseInfo();
        if(list==null ||list.size()==0){
            responseInfo.setFlag(false);
            responseInfo.setErrorMsg("分类查询失败!");
        }else {
            responseInfo.setFlag(true);
            responseInfo.setData(list);
        }
        writeResponse(responseInfo,response);
    }
}

CategoryService

public class CategoryServiceImpl implements CategoryService {
    CategoryDao dao = new CategoryDaoImlp();

    @Override
    public List<Category> findAll() {
        Jedis jedis = JedisUtil.getJedis();
        Set<Tuple> categorys = jedis.zrangeWithScores("category", 0, -1);
        List<Category> cs = null;
        if (categorys == null || categorys.size() == 0) {
            System.out.println("from database......");
            cs = dao.findAll();
            for (int i = 0; i < cs.size(); i++) {

                jedis.zadd("category", cs.get(i).getCid(), cs.get(i).getCname());
            }
        }else {
            System.out.println("from redis......");
            cs = new ArrayList<Category>();
            for (Tuple t : categorys) {
                Category category = new Category();
                category.setCname(t.getElement());
                category.setCid((int) t.getScore());
                cs.add(category);

            }
        }
        return cs;
    }
}

CategoryDao

JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils.getDataSource());
@Override
public List<Category> findAll() {
    List<Category> list = null;
    try{
        list = jdbcTemplate.query("select * from tab_category order by cid asc",new BeanPropertyRowMapper<Category>(Category.class));
    }catch (Exception e){

    }
    return list;
}
$.get("category/findAll",{},function(data) {
    var cid = getParameter("cid");
    var lis='<li ><a href="index.html">首页</a></li>';
    for(var i=0;i<data.data.length;i++){
        if (cid==data.data[i].cid){
            lis+='<li class="nav-active"></li>';
        }else {
            lis+='<li ></li>';

        }
        lis+='<li><a href="route_list.html?cid='+data.data[i].cid+'">'+data.data[i].cname+'</a></li>';
    }
    lis+='<li><a href="favoriterank.html">收藏排行榜</a></li>';
    $("#nav").html(lis);
},"json");

根据id查询不同类别的旅游线路

$(function() {
    var cid =getParameter("cid");
    //获取rname的参数值
    var rname = getParameter("rname");
    if(rname){
        //url解码
        rname = window.decodeURIComponent(rname);
    }
    var currentPage = getParameter("currentPage");
    if(currentPage){
        load(cid,currentPage,rname);
    }else {
        load(cid,1,rname);
    }
    // load(cid,1);
});
function load(cid,currentPage,rname) {
    $.get("route/listPage",{cid:cid,currentPage:currentPage,rname:rname},function (data) {

        $("#totalPage").html(data.data.totalPage);
        $("#totalCount").html(data.data.totalSize);


        var pages='<li οnclick="javascipt:load('+cid+','+1+',\''+rname+'\')"><a href="javascript:void(0)">首页</a></li>\n' + '<li οnclick="javascipt:load('+cid+','+(data.data.currentPage-1)+',\''+rname+'\')" class="threeword"><a href="javascript:void(0)">上一页</a></li>';

        var begin;
        var end;
        if(data.data.totalPage < 10){
            //总页码不够10页

            begin = 1;
            end = data.data.totalPage;
        } else {
            begin = data.data.currentPage - 5 ;
            end = data.data.currentPage + 4 ;
            if (begin<1){
                begin=1;
                end=10;
            }
            if (end>data.data.totalPage){
                end=data.data.totalPage;
                begin=end-9;
            }

        }

        for (var i=begin;i<=end;i++){
            if(data.data.currentPage == i){

                li = '<li class="curPage" οnclick="javascipt:load('+cid+','+i+',\''+rname+'\')"><a href="javascript:void(0)">'+i+'</a></li>';

            }else{
                //创建页码的li
                li = '<li οnclick="javascipt:load('+cid+','+i+',\''+rname+'\')"><a href="javascript:void(0)">'+i+'</a></li>';
            }
            pages+=li;
        }
        pages+=' <li οnclick="load('+cid+','+(data.data.currentPage+1)+',\''+rname+'\')" class="threeword"><a href="javascript:void(0);">下一页</a></li>\n' +
            '                            <li οnclick="load('+cid+','+data.data.totalPage+',\''+rname+'\')" class="threeword"><a href="javascript:void(0);">末页</a></li>';

        $("#page").html(pages);

        var lis ='';
        for (var i=0;i<data.data.list.length;i++){
            lis+='<li>\n' +
                '                            <div class="img"><img width="299" height="169" src="'+data.data.list[i].rimage+'" alt=""></div>\n' +
                '                            <div class="text1">\n' +
                '                                <p>'+data.data.list[i].rname+'</p>\n' +
                '                                <br/>\n' +
                '                                <p>'+data.data.list[i].routeIntroduce+'</p>\n' +
                '                            </div>\n' +
                '                            <div class="price">\n' +
                '                                <p class="price_num">\n' +
                '                                    <span>&yen;</span>\n' +
                '                                    <span>'+data.data.list[i].price+'</span>\n' +
                '                                    <span>起</span>\n' +
                '                                </p>\n' +
                '                                <p><a href="route_detail.html?rid='+data.data.list[i].rid+'&currentPage='+data.data.currentPage+'">查看详情</a></p>\n' +
                '                            </div>\n' +
                '                        </li>';
        }
        $("#list").html(lis);
        window.scrollTo(0,0);

    },"json");

}

PageBean对象

public class PageBean<T> implements Serializable {
    private int totalSize;//总条数   查询数据库
    private int pageSize;//每页显示的条数  页面传递,固定
    private int totalPage;//总页数   计算   totalSize/pageSize
    private int currentPage;//当前页码   页面传递
    private List<T> list;//  查询数据库  limit
}

RouteServlet

public void listPage(HttpServletRequest request,HttpServletResponse response) throws IOException {
    String cid_ = request.getParameter("cid");
    String currentPage_ = request.getParameter("currentPage");
    String rname_ = request.getParameter("rname");
    Integer cid;
    Integer currentPage;
    String rname="";
    if(StringUtils.isEmpty(rname_)||rname_.equals("null")){
    }else {
        byte[] bytes = rname_.getBytes("iso-8859-1");
        rname=new String(bytes,"utf-8");
    }

    if(StringUtils.isEmpty(cid_)||cid_.equals("null")){
        cid= 4;
    }else {
        cid = Integer.parseInt(cid_);
    }
   if(StringUtils.isEmpty(currentPage_)||currentPage_.equals("null")||Integer.parseInt(currentPage_)==0){
        currentPage= 1;
    }else {
        currentPage = Integer.parseInt(currentPage_);
    }
    PageBean<Route> pb = service.findBycid(cid,currentPage,rname);
    ResponseInfo info = new ResponseInfo();

    if (pb.getList()==null||pb.getList().size()==0){
        info.setFlag(false);
        info.setErrorMsg("线路查询失败");
    }else {
        info.setFlag(true);
        info.setData(pb);

    }
    writeResponse(info,response);

}

RouteService:

@Override
public PageBean<Route> findBycid(Integer cid, Integer currentPage,String rname) {
    PageBean<Route> pb = new PageBean<>();
    pb.setCurrentPage(currentPage);
    Integer totalCount = routeDao.findCountBycid(cid,rname);
    List<Route> list = routeDao.findPageBycid(cid,currentPage,rname,10);
    pb.setList(list);
    pb.setPageSize(10);
    pb.setTotalPage(totalCount%10 == 0?totalCount/10:totalCount/10+1);
    pb.setTotalSize(totalCount);
    return pb;
}

RouteDao:

@Override
public Integer findCountBycid(Integer cid,String rname) {
    Integer count = jdbcTemplate.queryForObject("select count(1) from tab_route where cid = ? and rname like ?", Integer.class, cid,"%"+rname+"%");
    return count;
}

@Override
public List<Route> findPageBycid(Integer cid, Integer currentPage, String rname,int pagesize) {
    List<Route> list = jdbcTemplate.query("select * from tab_route where cid = ? and rname like ? limit ? , ? ", new BeanPropertyRowMapper<Route>(Route.class), cid,"%"+rname+"%" ,(currentPage - 1) * pagesize, pagesize);

    return list;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值