黑马程序员技术交流社区
标题:
总结
[打印本页]
作者:
software0210
时间:
2019-9-6 16:25
标题:
总结
分页
前台
当前页
每页显示数
后台
PageBean
当前页 前台传递
每页显示数 前台传递
总个数 数据库查询 SELECT COUNT(*) FROM 表 WHERE 条件
数据 数据库查询 SELECT * FROM 表 WHERE 条件 LIMIT index,count
index -> (当前页-1)*每页显示数
count -> 每页显示数
总页数 手动计算 总个数%每页显示数 == 0 ? 总个数/每页显示数 : 总个数/每页显示数+1
前台页面
1.数据显示
2.页码的遍历
3.当前页表示
4.上一页/下一页
6.总条数/总页数
动态sql
根据条件的不同.自动生成对应sql语句
########################################################################################################################
过滤器
对访问进行增强(request,response)
入门
xml
1.创建类实现Filter接口
2.实现doFilter()方法,在改方法中,调用filterChain.doFilter(request,response)放行
3.在web.xml中进行配置
<filter
<filter-name
<filter-class
<filter-mapping
<filter-name
<url-pattern
注解
1.创建类实现Filter接口
2.实现doFilter()方法,在改方法中,调用filterChain.doFilter(request,response)放行
3.在类上加@WebFilter("/*")
过滤器拦截路径最常的:
/user/*
/*
*.do
拦截方式
**REQUEST[默认] 浏览器访问(重定向)
**FORWARD 请求转发
**ASYNC 异步请求
INCLUDE
ERROR
过滤器链
执行顺序
ABCD目标资源DCBA
排列规则
注解
按照字母顺序
xml
按先后顺序
动态代理 -> JDK
注意: 必须实现接口
1.目标对象
2.接口 代理对象 = (接口)Proxy.newProxyInstance(目标对象.getClass().getClassLoader(),目标对象.getClass().getInterfaces(),new InvocationHandler(){
public Obejct invoke(Object proxy,Method method,Object[] args){
Object result = null;
if(method.getName().equals("要被增强的方法")){
//需要被增强
//执行方法之前增强的逻辑
result = method.invoke(目标对象,args);
//执行方法之后增强的逻辑
}else{
result = method.invoke(目标对象,args);
}
return result;
}
});
3.代理对象.目标方法进行增强的逻辑执行
ServletContextListener
监听ServletContext的创建(tomcat服务器启动)
监听ServletContext的销毁(tomcat服务器关闭)
1..回顾
a.列表显示
b.登录
c.添加
d.删除
e.修改(**)
三层架构
web
1.接收前台数据(request.getParamter())
2.把数据进行封装(BeanUtils)
3.把数据传给service (loginUser = loginService.login(u))
4.对service返回的结果进行判断 if(loginUser == null)
5.返回页面
response.getWriter().write()
response.sendRedirect()
request.getRequestDispatcher().forward()
service
1.把数据传给dao(loginUser = loginDao.login(u))
2.接收结果返回给web(return loginUser)
dao
去数据库执行操作(CRUD)
把结果返回service
#########################################################################
2..今天内容
选中删除
******
分页
******
分页?
减轻服务器压力
提升用户体验
分页实现
前台
传递给后台
每页显示数
当前页码
前台页面展示
数据 EL+JSTL
页码 JSTL+EL+总页数
总页数
总条数
当前页 c:if
后台
后台把数据返回给前台
1.数据->List
2.总记录数
3.总页数
4.当前页码
5.每页显示数
把目标数据进行封装->PageBean
1.前台传递给后台 每页显示数,当前页码
2.后台
接收参数 -> 查到对应的数据返回给前台
封装PageBean
如何封装
1.数据->List 数据库查询
SELECT * FROM 表 WHERE 条件 LIMIT index,count
index -> 开始查询的索引
count -> 每页显示的条数 ->每页显示数(已经存在)
index的计算方式
(当前页-1)*每页显示数
2.总记录数 数据库查询
3.总页数 自己计算
总记录数%每页显示数 == 0 ? 总记录数/每页显示数 : 总记录数/每页显示数+1
4.当前页码 前台传递的参数
5.每页显示数 前台传递的参数
把pageBean对象存到request域中,请求转发显示
复杂分页(了解)
动态sql(掌握!!)
根据条件的不同,自由的拼接sql语句
回顾
ServletContext
作用:
1.全局的域对象
context.setAttribute()
context.getAttribute()
context.removeAttribute()
2.获取文件的服务器绝对路径
web目录
context.getRealPath("/文件路径")
WEB-INF目录
context.getRealPath("/WEB-INF/文件路径")
src目录
context.getRealPath("/WEB-INF/classes/文件路径")
3.获取文件的mime类型
context.getMimeType("文件")
text/html
application/json
下载案例(二头一流)
1.获取文件名称 request.getParameter("name")
2.获取文件的服务器路径
3.加载文件,加载到FileInputStream
4.获取文件的mime类型
5.设置Content-Type response.setContentType()
6.判断请求头User-Agent,判断是否是火狐或者谷歌
7.火狐用BASE64,谷歌用URL编码对文件名进行编码
8.设置Content-Disposition头, attachment;filename=文件名
9.用服务器的输出流将文件的输入流对拷到浏览器
会话
概念:多次请求
cookie(浏览器端)和session(服务器端)
cookie的原理
1.第一次访问目标服务器,服务器创建cookie对象
2.服务器将数据回写的时候会通过SET-COOKIE响应头把cookie传到浏览器
3.浏览器会保存该cookie,下次访问目标服务器时会通过COOKIE请求头将cookie发送到服务器
4.服务器接收cookie实现业务逻辑
cookie的特点
1.cookie保存在浏览器,不安全
2.cookie最大4K,最多20个
3.cookie默认关闭浏览器会直接销毁
4.cookie可以一次发送多个
5.cookie在tomcat8开始支持中文,如果必须使用,在出现中文/空格/特殊字符的时候,可以对内容进行URL编码再进行发送
6.cookie支持作用范围(具体访问路径)
7.cookie可以在服务器端对其进行销毁也可以持久化
8.cookie如果本地浏览器清除缓存后,cookie就不存在
API
创建
Cookie c = new Cookie("key","value")
c.setMaxAge()
c.setPath()
c.setDomain()
c.setValue()
response.addCookie(c)
获取
Cookie[] cks = request.getCookies()
遍历
c.getName()
c.getValue()
#############################################################################################
JSP
动态资源
原理
jsp本质就是一个servlet
注意事项
jsp只支持get/post/head这3种请求
脚本
<% %> 代码
<%! %> 全局,有线程安全问题
<%= %> 页面显示
注释
html <!-- -->
css /* */
js // 或者 /* */
jsp <%-- --%>
9大内置对象(背下来)
application -> ServletContext
session -> HttpSession
request -> HttpServletRequest
pageContext -> PageContext
response -> HttpServletResponse
out -> JspWriter
config -> ServletConfig
page -> Object(实际时当前servlet的对象!!!!)
exception -> Throwable
jsp对应的servlet在浏览器第一次访问时创建
SESSION(全部都是重点)
HttpSession
作用
作为域对象进行数据共享
setAttribute()
getAttribute()
removeAttribute()
api
创建
request.getSession()
注意:
request.getSession()
判断是否存在session,如果不存在则创建,存在则获取
原理
session是基于cookie
cookie数据在浏览器,不安全,类型只能是字符串
session数据在服务器,安全,类型是Object
1.第一次访问目标服务器,,服务器调用request.getSession()创建session对象
2.session对象内部有一个属性id,此id唯一,服务器在返回数据的时候,会创建一个JSESSIONID的cookie,cookie的格式 JSESSIONID=session对象的id
3.浏览器接收cookie,JSESSIONID,保存
4.下次访问服务器携带JSESSIONID的cookie到服务器,服务器request.getSession()获取session,根据JSESSIONID的cookie的value值去和session对象的id值去比较
5.如果服务器的session对象中的id值和cookie的value值一样,则是操作同一个session\
session的特点
1.浏览器一旦关闭,会导致cookie被销毁,所以session会被重新创建
2.session实现持久化 -> cookie持久化
c = new Cookie("JSESSIONID",session.getId())
c.setMaxAge(+)
response.addCookie(c)
3.session钝化和活化
tomcat实现
4.session销毁
a.服务器非正常关闭
b.默认销毁时间30分钟
c.自杀 session.invilidate()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2