书城项目中继承与接口的使用

书城项目中的继承使用:

  1. 1.1Servlet:

BaseServlet:分发post请求,利用反射可以避免冗杂的if判断语句

public class BaseServlet extends HttpServlet {


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过反射调用方法,可避免if-else的冗余
        //getDeclaredMethod的参数包括方法名,方法的参数类型,以定位方法。
        String action=request.getParameter("action");
        Method method = null;
        try {
            method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this,request,response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

其他Servlet程序都继承BaseServlet程序 ,只需要编写具体的servlet方法,不需要考虑如何调用。

page方法的解释:page方法是刷新页面显示内容的方法,其中每次对页面内容进行更新都要调用此方法。所以该方法应该面向多种类型,故应该使用泛型。page<name page <school


  • 1.2web层
protected void page(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //1 获取请求的参数 pageNo 和 pageSize
    //当前页数    
    int pageNo = WebUtils.parseInt(request.getParameter("pageNo"), 1);
    //页面容纳数量
    int pageSize = WebUtils.parseInt(request.getParameter("pageSize"), Page.PAGE_SIZE);
    //2 调用 BookService.page(pageNo,pageSize):Page 对象
    Page<Book> page = bookService.page(pageNo,pageSize);
    //设置url
    page.setUrl("manager/bookServlet?action=page");
    //3 保存 Page 对象到 Request 域中
    request.setAttribute("page",page);
    //4 请求转发到 pages/manager/book_manager.jsp 页面
    request.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(request,response);
}

Service层

查询当前页的图书项

public Page<Book> page(int pageNo, int pageSize) {
    Page<Book> page = new Page<Book>();
    // 设置每页显示的数量
    page.setPageSize(pageSize);
    // 求总记录数
    Integer pageTotalCount = bookDAO.queryForPageTotalCount();
    // 设置总记录数
    page.setPageTotalCount(pageTotalCount);
    // 求总页码
    Integer pageTotal = pageTotalCount / pageSize;
    if (pageTotalCount % pageSize > 0) {
        pageTotal+=1;
    }
    // 设置总页码
    page.setPageTotal(pageTotal);
    // 设置当前页码
    page.setPageNo(pageNo);
    // 求当前页数据的开始索引
    int begin = (pageNo - 1) * pageSize;
    // 求当前页数据

    List<Book> items = bookDAO.queryForPageItems(begin,pageSize);
    // 设置当前页数据
    page.setItems(items);
    return page;
}

构成重载 ,查询在某个价格区间的图书项

@Override
public Page<Book> pageByPrice(int pageNo, int pageSize, int min, int max) {
    Page<Book> page = new Page<Book>();



    // 设置每页显示的数量
    page.setPageSize(pageSize);
    // 求总记录数
    Integer pageTotalCount = bookDAO.queryForPageTotalCountByPrice(min,max);
    // 设置总记录数
    page.setPageTotalCount(pageTotalCount);
    // 求总页码
    Integer pageTotal = pageTotalCount / pageSize;
    if (pageTotalCount % pageSize > 0) {
        pageTotal+=1;
    }
    // 设置总页码
    page.setPageTotal(pageTotal);
    // 设置当前页码
    page.setPageNo(pageNo);
    // 求当前页数据的开始索引
    int begin = (pageNo - 1) * pageSize;
    // 求当前页数据
    List<Book> items = bookDAO.queryForPageItemsByPrice(begin,pageSize,min,max);
    // 设置当前页数据
    page.setItems(items);



    return page;
}

DAO层
limit关键字是左开右闭的区间

DAO:其中BaseDAO中定义了多个操作数据库的操作,避免了代码的冗余。在其他DAO中只需要书写具体的sql语句并设置占位符即可实现对数据在数据库中的存储。
BaseDAO中的方法实现步骤: 1.获取连接 2.调用queryRunner中的update(增删改)或query(查)方法 3. 关闭连接


jar包DBUtils :简化代码实现连接数据库操作
三个核心功能 :1.QueryRunner提供方法操作数据库 2.ResultSetHandler用于封装结果集 3.工具类DbUtils类
QueryRunner核心类 : {

update(Connection connection,String sql,Object …args) 增删改 query(Connection connection,String sql,ResultSetHandler rsh,Object …args ) 查

  }

ResultSetHandler处理集类:(常用)
ScalaHandler :用于单个数据,例如 select count(*) from表
BeanHandler :用于封装查询的第一条数据到javaBean
BeanListHandler :将结果中的每一条数据都封装到javaBean中, 将这些javaBean封装到List集合中。


书城项目中接口的使用

面向接口编程。
自定义接口包括DAO接口 ,Service接口。
用于规范DAO与Service实现类的方法。

实现其他接口包括HttpServlet接口 filter接口
其中javaweb的三大组件是servlet,filter过滤器,listener监听器
servlet :处理请求与响应 ,用户点击页面后,通过服务器跳转到serlvet程序,在servlet程序中可以实现一定的逻辑
filter:拦截请求,过滤响应。在web.xml中配置拦截文件后,用户访问拦截页面时会到filter页面通过doFilter方法进行权限检查,若通过则执行filterchain方法,进入下一个拦截器或者回传用户想要访问的资源。
listener:监听器 ,在spring中会有涉及。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值