JavaWeb第五章

本文探讨Servlet API中的监听器和过滤器,涉及上下文、请求和会话事件,以及如何配置和使用。同时,深入解析AJAX与JSON在前端交互中的应用,包括Ajax的工作原理、优点与挑战,以及JSON在前后端数据交换中的关键作用。
摘要由CSDN通过智能技术生成

一.监听器

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("请求开始");
    }

三.分页

  • PageInfo(分页类)
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;
    }

    /**
     * 设置分页的总页数
     * @param 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);
        }
    }

    /**
     * 获取上一页的页数
     *
     * @return
     */
    public Integer getPrevious() {
        if (currentPage <= 0) {
            return 1;
        } else {
            return currentPage - 1;
        }
    }

    /**
     * 获取下一页的页数
     *
     * @return
     */
    public Integer getNextPage() {
        if (currentPage >= totalPage) {
            return totalPage;
        } else {
            return currentPage + 1;
        }
    }
}

  • dao实现
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的缺点

  1. 没有浏览历史
  2. 存在跨域问题
  3. SEO(搜索引擎) 不友好
    • 搜索引擎蜘蛛定时爬取页面,获取到的基本是没有动态渲染数据的html静态页面,也就是说蜘蛛不会等待你ajax异步请求数据 渲染页面完成,因为蜘蛛不知道你这个网站要多久才能渲染完成,蜘蛛不是浏览器,它不是实时等待的,蜘蛛不执行ajax(用户操作则不同,因为用户进入网站,多少是会等待页面加载完成,然后看到完整的网页)。
    • 蜘蛛获取不到异步请求的页面数据,所以就算你这个网页最终会有XX关键字,而搜索引擎也不会针对XX关键字对你的网页进行收录建立索引;

4.Ajax实现

  • 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();//创建HMLHttpRequest对象作用于在后台与服务器交换数据。
	 /**
	 *1.onerror:产生了错误。
	 *2.ontimeout:请求超时了。
	 *3.onload:每次progress成功的时候。4的状态:请求处理完成并且响应了
	 */
	 xhr.onload=function(){
	 	 //建立连接
	 	xhr.open("GET", '/server', true);//请求方式,请求路径,是否异步(默认true)
	 	//发送请求
	 	xhr.send();
	 }
	 //监听状态变化
	 xhr.onreadystatechange=function(){
	 /**
	  * readyState:网络请求状态:指的是客户端和服务器的连接状态,1:准备建立  2.发起请求  3.处理请求   4.请求处理完成并且响应了
	  * status:响应结果。 10x:建立请求 20x:成功 30x:使用缓存  40x:找不到资源  50x:服务报错
	 */
	 	if(xhr.readyState==4 && xhr.status==200){
	 		/**
			 * 5. 获取数据
			*/
			var obj = xhr.responseText ;
			//将一个字符串转换为JSON对象
			obj = JSON.parse(obj) ;
	 	}
	 }
</script>

JSON

1. json的介绍

  1. JSON(JavaScript Object Notation)
    • 一种轻量级的数据交换格式
    • 采用独立语言的文本格式
    • 通常用于在客户端和服务器之间传输数据
  2. 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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值