MVC和分页

复习

1、写出Cookie的
2、写出Servlet实现页面跳转的方式
3、写出Servlet的生命周期
4、写出Servlet的两种配置方式
5、写出ServletContext的常用方法

回顾

1、Cookie的使用
2、Session的使用

内容

1、什么是过滤器
2、过滤器链
3、过滤器的优先级和参数
4、过滤器的典型应用
5、什么是监听器
6、常用的监听器

目标

1、熟悉什么是过滤器
2、掌握过滤器链
3、掌握过滤器的优先级和参数
4、掌握过滤器的典型应用
5、熟悉什么是监听器
6、掌握常用的监听器

第一章 MVC模式简介

1.1 MVC的概念

首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。它是一种软件设计的典范,最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式

1.2 MVC模式详解

虽然MVC并不是Java当中独有的,但是现在几乎所有的B/S的架构都采用了MVC框架模式,但是MVC在B/S架构中并没有完全地实现,其实我们根本不需要掌握未实现的部分。

1.3 MVC高级框架应用

​ MVC模式被广泛用于Java的各种框架中,比如Struts2、spring MVC等等都用到了这种思想。

Struts2是基于MVC的轻量级的web应用框架。基于MVC,说明基于Struts2开发的Web应用自然就能实现MVC,也说明Struts2着力于在MVC的各个部分为我们的开发提供相应帮助

第二章 JavaWeb的三层架构

2.1 JavaWeb经历三个时期
2.1.1 JSP Model1第一代

JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有的操作都在JSP页面中,连访问数据库的API也在JSP页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。

model1

2.1.2 JSP Model1第二代

JSP Model1第二代有所改进,把业务逻辑的内容放到了JavaBean中,而JSP页面负责显示以及请求调度的工作。虽然第二代比第一代好了些,但还让JSP做了过多的工作,JSP中把视图工作和请求调度(控制器)的工作耦合在一起了。

mode12

2.1.3 JSP Model2

JSP Model2模式已经可以清晰的看到MVC完整的结构了。

JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户;

Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图;

JavaBean:模型层,完成具体的业务工作,例如:开启、转账等。

model2

小结:这就是javaweb经历的三个年代,JSP Model2适合多人合作开发大型的Web项目,各司其职,互不干涉,有利于开发中的分工,有利于组件的重用。但是,Web项目的开发难度加大,同时对开发人员的技术要求也提高了。

第三章 MVC结合事务练习

通过结合事务和MVC知识,练习一个转账demo

3.1 项目准备

​ c3p0-0.9.1.2.jar

​ commons-beanutils-1.8.3.jar

​ commons-dbutils-1.4.jar

​ commons-logging-1.1.1.jar

 

3.2 编写前端页面
 

3.3 准备编写java代码

因为要使用到mvc模式,要对项目代码进行分包

3.3.1 项目分包

​ com.itqf.dao

​ com.itqf.service

​ com.itqf.controller

​ com.itqf.utils

3.3.2 编写DatasourceUtils工具类

DatasoutceUtils工具类,优化获取连接,优化事务操作

 

3.3.3 编写Dao层代码

dao层进行具体数据库操作

 

3.3.4 编写业务层代码
 
3.3.5 编写servlet代码
 

第四章 分页概述

分页是web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的,不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据在页面上所占的空间每页显示若干行,比如一般20行是一个比较理想的显示状态。

4.1 分页实现思路

分页的方法主要有以下两种思路

1.取出符合条件的数据,放到数据集或者内存当中,然后逐页浏览。例如,有可能每页只浏览20条记录,但使用这种分页方法需要把所有记录取出来。这种分页的方法叫做“指针分页或假分页”。

2.对于海量的数据查询,看多少就取多少,显然是最佳的解决方法,假如某个表中有200万条记录,第一页取前20条,第二页取21~40条记录。此时可以使用。

select top 当前页每页记录数查询字段列表 from 表A where 主键字段 not in (select top (当前页-1)当前页记录数主键字段 from 表A)

这样的语句来实现,因为这种查询方式要使用主键,所以叫他做“主键分页”

4.2 分页代码实现

步骤:

1.确定每页显示的数据数量

2.确定分页显示所需的总页数

3.编写SQL查询语句,实现数据查询

4.在JSP页面中进行分页显示设置

代码实现如下:

4.2.1 数据库表语句如下

create database day20_student;

 
4.4.2创建工程和程序包

4.4.3 C3p0配置文件
 
4.4.4 创建实体类和工具类

Student类

 

PageBean类

 

DbUtils类

 
4.4.5 创建Dao和实现类

StudentDao接口

package com.qf.myschool.dao;

import java.util.List;

import com.qf.myschool.domain.Student;

public interface StudentDao {
	/**
	 * 
	 * @param pageIndex 当前页码  1 
	 * @param pagesize  页大小  10
	 * @return
	 * 
	 */
	public List<Student> findByPage(int pageIndex,int pagesize);
	
	//获取总的数据个数
	public int getTotalCount();
	
}	

StudentDaoImpl类

 

4.4.6 创建Servie和实现类

StudentService接口

 

StudentServiceImpl实现类

 
4.4.7 listStudent.jsp页面
 

界面效果如图:

作业题

1、实现一个签到管理系统
要求:注册、登录、签到、签到信息查询

面试题