filter案例:页面静态化(图书馆)
页面静态化:
1.第一步: 写一个小项目,图书管理
**页面:
jsp:
-link.jsp链接页面,四个超链接
///查询所有
///查看SE分类.
///查看EE分类
///查看框架分类3
-show.jsp .
显示查询结果
servlet:
-BookServlet
--findAll() -->查看所有图书
--findByCategory --> 按照分类进行查询
BOOKServlet: 略
BookDao :
--List<Book> findAll()
--List<Book> findByCategory (int category)
domain :Book 类
2.第二步: 什么事页面静态化
首次访问去数据库获取数据,然后把数据保存到一个HTML页面中,
二次访问,就不再去数据库获取了,而是直接显示HTML
页面静态化:
1.目标
给出一个过滤器,把servlet请求的资源所做输出保存到html中,重定向到html页面。
两次访问时,这个html已经存在,则直接重定向,无需再访问servlet!
(第一次访问时,查找请求对应的html页面是否存在。若存在,则重定向到html;若不存在,则放行,放行的目的,即把servlet访问数据库后,输出给客户端的数据保存到一个html文件中,再重定向到html)
一.获取category参数
category的四种可能:
1. null--->null.html
2. 1--->1.html
3. 2--->2.html
4. 3--->3.html
html页面保存路径应放在htmls目录下
判断对应的html文件是否存在,若存在,直接重定向
页面静态之生成html页面
一、如果html文件不存在,需要生成html
1.放行
show.jsp 会做出许多输出,阻止它输出给客户端而输出到指定的 html 文件
2、调包 response
使 getwriter()与一个 html 文件绑定,show.jsp会输出到了 html 文件中
3、调包 StaticResponse
创建一个流对象使它与 html 文件路径绑定,返回一个与html绑定在一起的printwriter 对象,jsp 会使用它进行输出,使得数据均输出到 html 文件中
4、完成调包工作
创建 StaticResponse,因为不存在才放行,所以在给予出 response 之后,需给予不存在的绝对文件路径(注意:构造器会自动生成文件)继而完成放行,放行之后即回城。
Statcresponse sr = new statcresponse (res, destrile.getAbsolutePath());chain.doFilter (request, sz);//放行,即生成了 html 文件
//这时页面已经存在,重定向到 htm 文件。
res. sendRedirect(req. get 文本路径 () + "/ htmls / " = html 页面);