一.监听器
1.定义
- 作用域事件发生的时间往往是不确定的,当事件发生的时候需要进行一些处理时,就可以使用监听器。
2.Servlet API中定义了6种事件类型
- 上下文相关的事件
- ServletContextEvent:该类表示上下文事件,当应用上下文对象发生改变,如创建或销毁上下文时将触发上下文事件
- ServletContextAttributeEnven:该类表示上下文属性事件,当应用上下文的属性改变,如增加、删除、覆盖上下文的属性事件
- 请求相关的事件
- ServletRequestEvent:该类表示请求事件,当请求对象发生改变,如创建或销毁请求对象时(发起请求时或请求结束后),将触发请求事件
- ServletRequestAttributeEvent:该类表是请求属性事件,当请求属性中的属性改变,如增加、删除、覆盖请求中的属性时,触发请求属性事件。
- 会话相关事件
- HttpSessionEvent:该类表示会话事件,当会话对象发生改变,如创建或销毁会话对象、活化或钝化会话对象时,将触发会话事件。
- HttpSessionAttributeEvent:该类表示会话绑定事件,当会话中的属性发生变化时,如增加、删除、覆盖会话中的属性对象时,将会触发会话绑定事件
3.8种监听器
- 会话监听器(4种)
- HttpSessionListeber:会话监听器,监听HttpSessionEvent
- HttpSessionAttribute:会话监听器,监听HttpSessionAttributeEvent
二.过滤器
1. 配置
<listener>
<listenser-class>com.csi.MyRequestListener</listener-class>
</listener>
2.使用
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("请求结束");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("请求开始");
}
三.分页
package com.csi.domain;
import java.io.Serializable;
import java.util.List;
public class PageInfo<T> implements Serializable {
private Integer perPage;
private Integer currentPage;
private Integer totalPage;
private Integer totaldate;
private List<T> list;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public Integer getPerPage() {
return perPage;
}
public void setPerPage(Integer perPage) {
this.perPage = perPage;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
if(currentPage<=0){
currentPage=1;
}
this.currentPage = currentPage;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public Integer getTotaldate() {
return totaldate;
}
public void setTotaldate(Integer totaldate) {
this.totaldate = totaldate;
int num = totaldate%perPage==0?totaldate/perPage:(totaldate/perPage)+1;
setTotalPage(num);
if(currentPage>totalPage){
setCurrentPage(totalPage);
}
}
public Integer getPrevious() {
if (currentPage <= 0) {
return 1;
} else {
return currentPage - 1;
}
}
public Integer getNextPage() {
if (currentPage >= totalPage) {
return totalPage;
} else {
return currentPage + 1;
}
}
}
public class ProductDaoImpl implements ProductDao{
@Override
public PageInfo<One> select(PageInfo pageInfo) throws SQLException {
Connection connection = getConnection();
int ret = 0;
PreparedStatement ps = connection.prepareStatement("SELECT count(*) FROM one");
ResultSet rs = ps.executeQuery();
if (rs.next()){
ret = rs.getInt(1);
}
pageInfo.setTotaldate(ret);
ps = connection.prepareStatement("SELECT name, yuwen,shuxue,yingyu,(yuwen+yingyu+shuxue) as result ,(yuwen+yingyu+shuxue)/3 as avgscore FROM one limit ?,?");
ps.setInt(1,(pageInfo.getCurrentPage()-1)*pageInfo.getPerPage());
ps.setInt(2,pageInfo.getPerPage());
rs = ps.executeQuery();
List<One> list = new ArrayList<>();
while (rs.next()){
One one = new One();
one.setName(rs.getString("name"));
one.setYingyu(rs.getInt("yingyu"));
one.setYuwen(rs.getInt("yuwen"));
one.setShuxue(rs.getInt("shuxue"));
one.setAvgScore(rs.getFloat("avgscore"));
one.setResult(rs.getInt("result"));
list.add(one);
}
pageInfo.setList(list);
release(rs,ps,connection);
return pageInfo;
}
}
四.AJAX与JSON
1. ajax介绍
- Ajax全称为Asynchronous JavaScript And XML异步
- Ajax不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式
- 通过Ajax可以在浏览器中向服务器发送异步请求
2.ajax优点
- 可以无需刷新页面而与服务器进行通信
- 允许你根据用户事件来更新部分页面内容
3.Ajax的缺点
- 没有浏览历史
- 存在跨域问题
- SEO(搜索引擎) 不友好
- 搜索引擎蜘蛛定时爬取页面,获取到的基本是没有动态渲染数据的html静态页面,也就是说蜘蛛不会等待你ajax异步请求数据 渲染页面完成,因为蜘蛛不知道你这个网站要多久才能渲染完成,蜘蛛不是浏览器,它不是实时等待的,蜘蛛不执行ajax(用户操作则不同,因为用户进入网站,多少是会等待页面加载完成,然后看到完整的网页)。
- 蜘蛛获取不到异步请求的页面数据,所以就算你这个网页最终会有XX关键字,而搜索引擎也不会针对XX关键字对你的网页进行收录建立索引;
4.Ajax实现
<script type="text/javascript">
$.get("ajaxController",function(msg){
$.each(msg,function (index,product){
$("#row").html($("#row").html()+"<div class='col-md-3'>"
+ "<div class='thumbnail'>"
+"<img src='"+product.fileName+"' style='width: 200px;height:150px;'/>"
+"<div class='caption' style='width:200px;height:190px'>"
+" <h3>"+product.name+"</h3>"
+"<p>"+product.description+"</p>"
+"<p style='color:red'>¥"+product.price+"</p>"
+"<p><span>收藏</span><span style='margin-left:20px;'></span><span style='margin-left:20px;'>购物车</span></p>"
+"</div></div></div>"
)
})
})
</script>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.onload=function(){
xhr.open("GET", '/server', true);
xhr.send();
}
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status==200){
var obj = xhr.responseText ;
obj = JSON.parse(obj) ;
}
}
</script>
JSON
1. json的介绍
- JSON(JavaScript Object Notation)
- 一种轻量级的数据交换格式
- 采用独立语言的文本格式
- 通常用于在客户端和服务器之间传输数据
- JSON优点
2. 配置
<dependency>
<groupId>alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.1</version>
</dependency>
3.转换
Student student = new Student();
student.setName("张三");
String s=JSON.toJOSONString(student)
out.println(s);