黑马旅游网——》前台

1、显示用到的异步提交技术

1.1 ajax异步提交技术

1.1.1 语法

		$.post("请求路径",{请求参数(json格式),回调函数})
		关于请求参数的设置:
		如果是提交整个表单,在jauery中提供了一个序列化方法serialize()
		eg:$(juery对象).serialize()

2、后台相关处理

2.1 关于baseServlet

2.1.1servlet的方法转发(baseServlet)

/**
     * @description:方法的转发执行
     * @param req
     * @param resp
     * @return: void
     * @author: Sw_Ljb
     * @time: 2022/5/29 上午10:44
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //第一步获取请求路径
        String uri = req.getRequestURI();
        //第二部获取请求路径的方法m名
        String methodName = uri.substring(uri.lastIndexOf('/' )+ 1);
        //获取方法对象==》通过反射==》this关键字==》谁调用我 我代表谁
        System.out.println(methodName);
        try {
            Method 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();
        }

    }

2.1.2servlet将后台要返回给前台的数据序列化为json

采用jackson包中的ObjectMapper()对象中的writeValue方法

//序列化方法
    public void writerValue(Object obj,HttpServletResponse resp) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        resp.setContentType("application/json;charset=utf-8");
        mapper.writeValue(resp.getWriter(),obj);

    }
    public String writerValueToString(Object obj,HttpServletResponse resp) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);
    }

2.2 关于其他向外暴露的servlet全部继承baseServlet

2.2.1 关于路径的配置

在@WebServlet(“/自定义目录/*”):/*是匹配自定义目录下的所有

2.2.2 关于方法修饰符与方法名

		修饰符:由于继承了baseServlet,而在这之中,需要获取方法名,如果加上权限修饰符,就会导致外部类 无法访问到该方法,如果必须访问 就需要在反射中暴力破解 (decare方法与set....(true)),但是显然这是不合理的(在该类中 不想被外部访问的方法 在暴力破解后 也会被访问到) 因此最好的解决方法是将方法修饰符改为public ;
		方法名:关于方法名最好的这个方法要干的事来起(在自定义目录下唯一)

2.2.3 关于方法提中的具体操作顺序

1、获取参数
2、处理参数
3、封装数据(封装到莫一个对象中(如果闯过来的json数据都属于一个对象))
4、调用相应service进行处理
5、将service进行处理后的数据序列化为json格式 返回给前台

3.关于前后台联动的分页查询

分析:显而易见、分页查询涉及的部分参数,是需要前台通过异步请求的方式提交给后台的,这部分参数包括:pageSize(每页最多显示条数),currentPage(当前页码);前台将二者传递给后台,后台对二者进行处理(判空(空字符串)给默认值)。将前台传过来的参数方法放到相应service参数中,在service中的对应方法,该方法的方返回值为一个pageBean对象,
这个对象由
private int totalCount;//总记录数
private int totalPage;//总页面
private int currentPage;//当前页面
private int pageSize;//页面吸显示条数
private List list;//每页的数据集合
属性,在方法中分别对以上属性进行set方法设置值 缺啥就去数据库中用sql语法去查询,注意在查询每页的数据集合的sql语法中涉及一个limit ?,?语法 第一个问号是指起始序号(从0开始)后一个是大小
关于起始序号计算公式:(current -1)*pageSize
pageBean

package com.project.travelbg.domain;

import java.util.List;

/**
 * @description:分类查询 基础类
 * @author: Sw_Ljb
 * @PACKAGE_NAME:cn.itcast.travel.domain
 * @time: 2022/5/29 下午6:27
 * @version: 1.0
 */

public class PageBean<T> {
    private int totalCount;//总记录数
    private int totalPage;//总页面
    private int currentPage;//当前页面
    private int pageSize;//页面吸显示条数
    private List<T> list;//每页的数据集合

    public PageBean() {
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }
}

分页查询方法

/**
     * 分页查询
     * @param currentpage
     * @param pageSize
     * @param uid
     * @return
     */
    @Override
    public PageBean<FavoritePro> pageQueryFavorite(int currentpage, int pageSize,int uid) {
        PageBean<FavoritePro> pageBean = new PageBean<>();
        //设置当前页面
        pageBean.setCurrentPage(currentpage);
        //设置页面大小
        pageBean.setPageSize(pageSize);
        //获取总条目
        int totalCount = favoriteProDAO.findAllFavorites(uid);
        //设置总条目
        pageBean.setTotalCount(totalCount);
        //获取总页码
        int totalPage=totalCount%pageSize==0?totalCount/pageSize:(totalCount/pageSize+1);
        //设置总页码
        pageBean.setTotalPage(totalPage);

        int start=(currentpage-1)*pageSize;

        //获取route的list集合
        List<FavoritePro> collectRouteList = favoriteProDAO.findCollectRoutes(start,pageSize,uid);
        List<FavoritePro> favoriteProList = new ArrayList<>();
        for (FavoritePro favoritePro : collectRouteList) {
            Route route = routeDAO.selectOneRouteByRid(favoritePro.getRid());
            favoritePro.setRoute(route);
            favoriteProList.add(favoritePro);
        }
        //设置所有
        pageBean.setList(favoriteProList);
        return pageBean;
    }

4.关于前后台联动的模糊查询

分析:模糊查询主要设置对前台传过来的数据进行判空处理,以及在sql语法的拼接操作

项目下载:(需要自建表)
「travel」https://www.aliyundrive.com/s/zemnFHis2z3 提取码: 3b0k
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值