day14-jdbc案例(简单的curd&分页)
分页:
将数据按照页码划分,提高用户的体验度.
分类:
逻辑分页:一次性将内容加载到内存(list),获取自己想要的数据 sublist截取.缺点:维护起来麻烦
物理分页:(经常使用) 每次只去查询当前页需要的数据 缺点:和数据库交互多
mysql: limit
格式:
select ..... limit m,n;
[m+1,m+n]
规律:
查看第n也数据: limit (n-1)*pageSize,pageSize
每页中需要的数据:
5个
当前页内容 list 通过limit查询
当前页 currPage 前台传递过来
每页显示的条数 pagesize 固定
总条数 totalCount count(*)查询
总页数 Math.ceil(totalCount*1.0/pageSize)
封装成一个pagebean
在前台展示:
1.当前页数据 遍历 pb.list
2.展示首页 上一页... 然后给他们添加超链接
3.判断是否是第一页 若是:不展示 首页和上一页
4.判断是否是最后一页 若是:不展示 尾页和下一页
5.将所有的页码展示
forEach begin="1" end="${pb.totaoPage}"
6.判断是否是当前页
若是:则不加超链接
若不是:加超链接
day15-AJAX&Jquery
原生ajax:
1.获取核心对象 XMLHttpRequest
2.编写回调函数
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
alert(xmlhttp.responseText);
}
}
3.open操作 设置访问的方式和路径
xmlhttp.open("get","url");
4.send操作
xmlhttp.send("post的参数")
若有参数需要设置一个头
xmlhttp.setRequestHeader("content-type","form表单enctype属性")
////////////////////////
jquery中ajax
掌握的:
$.get(url,params,fn,type);
type:"json"
$.post(url,params,fn,type);
理解:
$.ajax(选项);
选项:
url:
type:
data:
success:fn
error:
dataType:"json"
json:轻量级的数据格式
格式1:
{"key":value,"key1":value}
格式2:
[e1,e2]
jsonlib:
1.导入jar包
2.使用api
JSONArray.formObject(数组或者list);
JSONObject.formObject(bean或者map);
//////////////////////////////////////////
获取jquery对象:
$("选择器") jQuery("选择器");
jquery对象>>dom对象
方式1:
jquery对象.get(index);
方式2:
jquery对象[index]
dom对象>>jquery对象
$(dom对象)
页面载入
$(function(){})
派发事件
jquery对象.事件(function(){...});
选择器:
#id值 .class值 标签名 [属性] [属性='值']
a b:后代 a>b:孩子 a+b:大弟弟 a~b:所有弟弟
:first :last :odd :even :eq|gt|lt(index)
:hidden
:checked :selected
属性和css:
prop|attr
css
文本 标签体
val()
html() text()
文档处理
内部插入
append prepend
外部插入
after before
删除
remove
效果:
隐藏|显示
show() hide()
淡入淡出
fadeIn() fadeOut()
滑入滑出
slideDown() slideUp()
遍历
jquery对象.each(function(){
});
day16-Listener&Filter
listener(了解)
监听器,监听javaweb中三个域对象
监听对象的创建和销毁
ServletContextListener
在项目启动的时候加载配置文件
ServletRequestListener
HttpSessionListener
监听对象的属性的变化
ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener
监听javabean在session中状态
注意:让javabean自动感知在session中的状态,不需要在配置文件配置
HttpSessionActivationListener(钝化和活化)
HttpSessionBindingListener(绑定和解绑)
编写:
1.编写监听器
2.编写配置文件
<listener>
<listener-class>
</listener>
///////////////////////////////////
filter(★)
过滤器,过滤请求和响应
filter编写步骤:
1.编写一个类
必须实现Filter接口
必须重写方法
2.编写配置文件
注册filter
绑定路径
filter生命周期方法:
doFilter(request,response,chain)
使用步骤:
1.强转
2.编写自己的业务
3.放行
url-pattern的配置:
完全匹配
目录匹配
后缀名匹配
多个filter都匹配到的时候,执行时机是根据在xml中的filter-mapping顺序决定
filter-mapping中的两个子标签
servlet-name:过滤指定的servlet
dispatcher:过滤那种方式过来的请求
REQUEST:只过滤从浏览器发送过来的请求 (默认) 一旦显式的写出来disparcher 默认的就不起作用了
FORWARD::只过滤请求转发过来的请求
////////////////////////////////////////////////////////////////////
注解:了解注解,可以使用注解
servlet3.0:体验下注解,完成文件上传
类加载器(了解)
动态代理(★):加强方法
day17-基础加强
注解:
注释:给程序员看的
注解:给jvm看的
java中三个注解:
@Override:声明该方法是从父类上继承过来的
@SuppressWarnings:抑制警告
@Deprecated:声明该方法不赞成使用
自定义注解:
注解属性
类型:
基本类型
string
class
annotation
enum
以上类型的一维数组
若有属性,使用的时候必须有值
元注解
@Retention:声明注解保留到那个阶段
SOURCE:
CLASS:
RUNTIME:
@Target:声明注解作用在那个部分
TYPE:
METHOD:
FILED:
注解的格式:
@interface 注解名{
}
///////////////////////////////////
///////////////////////////////////
servlet3.0
注解开发
@WebServlet(urlPatterns="/demo1")
@WebListener
@WebFilter(urlPatterns="/demo2")
文件上传
浏览器端的要求:
表单的提交方式必须是post
表单必须有文件上传组件
表单的enctype属性值为 multipart/form-data
服务器获取的时候
servlet3.0要求
添加一个@MultipartConfig
获取普通的组件
request.getParameter(name属性的值)
获取文件上传组件
Part part=request.getPart("name属性的值")
//获取文件的名称
Stirng sss=part.getHeader("content-disposition")
//然后截取才能获取文件名称
sss.substring(sss.indexof("filename=")+10,sss.length-1);
//获取文件流
part.getInputStream();
//删除临时文件
part.delete()
上传时候需要注意的问题:
文件重名 随机名称
文件安全 重要的文件放在 web-inf meta-inf 服务器磁盘
目录分离
时间
用户
文件个数
随机目录
//////////////////////////////////////////
动态代理(★)
jdk中proxy
前提:实现接口
Proxy.newProxyInstance(被代理对象.getClass().getClassLoader(),
被代理对象.getClass().getInterfaces(),new InvocationHandler(){
invoke(代理对象,当前执行的方法,需要的参数){
}
});