javaweb项目笔记

异步提交表单

在这里插入图片描述

后台获取并处理数据

将数据封装为map

Map<String, String[]> map = req.getParameterMap();

封装对象,将map封装为user对象

BeanUtils.populate(user,map)

将注册结果序列化为json,利用Jackson中的ObjectMapper对象

//        将结果序列化为json返回
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(resultInfo);
//      resp.getOutputStream().write(json.getBytes());
        resp.setContentType("application/json;charset=utf-8");
        resp.getWriter().write(json);

如上图在返回json数据时一定要加上setContentType,否则中文将会返回失败,为undefined

使用BeanPropertyRowMapper进行封装的时候,若查询结果为null会报异常。需要进行捕获,才能正常执行
在这里插入图片描述

邮件激活部分

获取授权码
在这里插入图片描述
在这里插入图片描述
servlet抽取分发请求

  • 创建BaseServlet继承HttpServlet
  • 创建UserServlet继承BaseServlet
    -在base中通过反射执行方法,注意user中的方法必须为public才能被反射到,否则需要暴力反射
    在这里插入图片描述
    缓存优化(分类Category的数据在每一次加载后,都会重新请求数据库进行加载,对数据库压力较大。并且该数据不会经常发生变化,可以使用redis来进行缓存优化);
    在这里插入图片描述
    在这里插入图片描述
    旅游线路的分页展示_类别id传递
Set<Tuple> categorys = jedis.zrangeWithScores("category", 0, -1);

在这里插入图片描述
线路查询的参数传递
给搜索框绑定click事件,通过跳转至route_List.heml页查询
在这里插入图片描述

$("#search_btn").click(function () {
            //获取要搜索的内容
            var ranme = $("#route_search").val();

            //获取cid
            var cid = getParameter("cid");

            if (cid != null){
                location.href = "http://localhost/travel/route_list.html?cid=" + cid + "&rname=" + ranme;
            }else {
                location.href = "http://localhost/travel/route_list.html?rname=" + ranme;
            }

        });

在servlet中获取rname,rname为中文将会出现乱码需要转码

 if (rname != null && rname.length() > 0){
            rname = new String(rname.getBytes("iso-8859-1"), "utf-8");
        }

更改dao代码
通过StringBuilder构成sql
将所有查询的参数放入Arrays中

 public List<Route> findByPage(int cid, int start, int pageSize, String rname) {

        //定义sql模板
        StringBuilder sql = new StringBuilder("select * from tab_route where 1=1");

        //判断cid, rname分别是否存在
        //存储参数
        List<Object> params = new ArrayList<>();

        if (cid != 0){
            sql.append(" and cid = ?");
            params.add(cid);
        }

        if (rname != null && rname.length() > 0){
            sql.append(" and rname like ?");
            params.add("%"+rname+"%");
        }

        params.add(start);
        params.add(pageSize);

        sql.append(" limit ? , ?");

        try {
            return template.query(sql.toString(), new BeanPropertyRowMapper<Route>(Route.class), params.toArray());
        } catch (Exception e) {

        }
        return null;
    }

分页功能实

页码分页
通过servlet返回的参数获取页码总数

                $("#totalPage").html(pb.totalPage);

设置每次分页开始和结束的页码

 //将页码分页
                var begin = currentPage - 5;
                var end = currentPage + 5;

                if(begin < 0){
                    begin = 0;
                }

                if (currentPage <= 4){
                    end = begin + 10;
                }

                if (end > pb.totalPage){
                    end = pb.totalPage;
                }
``
点击页码时,判断点击的是否为当前页,需要给本页页码加上特定的样式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值