一、MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。
用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
最简单的、最经典就是JSP(view) +Servlet(controller) + JavaBean(model)
视图和逻辑隔离开来
M(Model) 模型 JavaBean
V(View) 视图 Html、JSP、Thymeleaf、Volicity、Freemaker
C(Control) 控制器 Servlet,Controller,Action
1.当控制器收到来自用户的请求
2.控制器调用业务层完成JavaBean数据封装
3.完成业务后通过控制器跳转JSP页面的方式给用户反馈信息
4.JSP个用户做出响应。
什么是JavaBean
JavaBean:一种规范,表达实体和信息的规范,便于封装重用
所有属性为private
提供默认无参构造方法
提供getter和setter
实现serializable接口 (用于标识类的对象可以被序列化和反序列化)
二、三层架构
- Controller:负责控制,拿到View传递过来的数据,封装之后交给Service处理,Service处理完了之后,Controller拿到结果之后,将结果交给界面。
- Service:业务逻辑(分页,为了完成分页就要调用两次DAO层)
- DAO:纯粹的JDBC的增删改查操作
上一层可以调用下一层所有代码,并不是StudentServlet只能调用IStudentService代码,也可以调用ITeacherService代码
三、分页
初始记录行的偏移量是 0(而不是 1)
limit offset,rowcount
limit 偏移到那个位置offset,往下数多少个rowcount
做分页首先要规定每页有多少条
每页有5条,取出第1页数据 limit 0,5
每页有5条,取出第2页数据 limit 5,5
每页有5条,取出第3页数据 limit 10,5
pageSize: 5 pageNo: 1 2 3
limit (pageNo-1)*pageSize,pageSize
分页常见的问题:
1.封装一个分页类需要哪些信息(也是面向对象封装体现的很好的例子)
totalPage pageNo,pageSize,list(存放信息)
2.分页需要发送哪两条sql语句
- 查询当前页的数据 select id,name,age,gender from student limit 0,5;
- 查询总的数量,目的是为了算总的页数 select count(*) from student;
分页类:
public class PageInfo<T>{
private List<T> list;
private Integer totalPage;
private Integer pageNo;
private Integer pageSize;
}
四、过滤器的使用
项目开发中,经常会用到重复代码的实现
1、请求每个servlet都要设置编码
2、判断用户是否登录,只有登录了才有操作权限
五、过滤器相关API
interface Filter 过滤器核心接口
1、init(FilterConfig filterConfig) 初始化方法,在服务器启动的时候就执行
2、doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 过滤器拦截的业务逻辑处理
3、destroy() 销毁过滤器实例的时候调用
interface FilterChain 过滤链
doFilter(ServletRequest request, ServletResponse response)
执行下一个过滤器或放行(访问servlet)