servlet 和 jsp 技术(02)

五、AJAX技术

1、ajax的概念和作用

(1)概念:异步的 xml 和 js;

(2)作用:局部刷新技术;

(3)原理:

  • 通过 xhr 对象发送请求,响应并不直接给到浏览器而是给 xhr 对象,最后通过 js 操作 dom 来动态刷新局部;

2、使用

(1)基本流程

  • 获取 xhr 对象(兼容问题)
  • 获得连接
  • 发送请求
  • 获得响应并解析
  • ajax 状态码判断(0、1、2、3、4)
  • 响应状态码判断(200、404、500)

(2)异步和同步

  • 默认异步(异步并行,同步等待)

(3)请求方式:get、post

  • get:直接在URL 后面拼接请求的参数即可;
  • post:
ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");  
ajax.send('name=jack&age=998');

(4)响应的数据格式

  • 字符串
  • xml:try it
  • 一般用于配置文件,前后端的数据的交互一般通过 jsp 过渡;
  • servlet 的响应的类型和 jsp 的类型都要改成 xml;
  • 数据的获取的方法是 ajax.responseXml,xml 中数据获取实际上就是 dom 操作;
  • json:
  • 轻量级,可以js 无缝交互,现在的前后端的数据的交互一般都用他;
  • servlet 中可以用 Gson 或 fastjson 将java 对象转成 json 的字符串;
  • 前端的数据的获取需要用到js 的eval函数,具体的用法如下;
eval('(' + jsonstr + ')')

(5)ajax 的封装:代码见前端 js ajax 部分

六、EL表达式

1、概述

(1)作用域中取值的普通方法:

  • getAttribute------强转------get;

(2)上面方法存在的问题:

  • 多次的 get ;
  • 多次的强转;
  • 需要导包;

2、EL 表达式的使用

(1)作用域取值

  • jsp 和 servlet 的4个作用域对象:request、session、pageContext、application;
  • 作用域中取集合对象:
  • list:${键名[index]}
  • map:${键名.map中存的键名}
  • 默认查找顺序:pageContext-----request------session--------application(小到大)
  • 指定查找:pageScope | requestScope | sessionScope | applicationScope.键名

(2)请求数据获取(请求参数、头和cookie)

  • param.keyname(返回值);
  • paramvalues.keyname(返回一个数组);
  • ###请求头和 cookie 数据获取###

(3)做运算

  • 算术运算:加减乘除(注意加号只能做加法不能进行字符串的连接);
  • 关系运算:大小比较;
  • 逻辑运算:与或非;

(4)空值判断

  • 语法:${empty 键名}
  • 判断键名对象是否有数据;
  • User 对象不为空,属性有默认值;
  • 加一个 not 可以做非空的判断;

     

七、JSTL标签库

1、jstl概述

  • 中文  java 标准标签库,是一种标签语言,是对 el 表达式的拓展;
  • el 表达式负责从域中取值,jstl 负责做逻辑的处理;
  • 二者配合使用能最大限度减少 jsp 中 java 代码的书写;

2、核心标签库

(1)前提:

  • 导入相应的 jar 包;
  • jsp 文件开头用 taglib 指令引入
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

(2)<c:out >标签

  • 结合 el 可从域中取值,值也可以是常量,好处就是能设置默认值
  • 语法
<c:out value="el or string" default="default value"></c:out>

(3)<c:set>标签

  • 存值到域中,可以指定域
  • 语法
<c:set var="key" value="value" scope="page"></c:set>

(4)<c:remove>

  • 删除域中的值;
  • 默认删除全部域中能匹配上的值;
  • 可以指定域中的值删除
  • 语法:
<c:remove var="key" scope="page"/>

(5)<c:if>----单分支判断

<c:if test="${ aa>3 }"></c:if>
  •  其中的 aa 只能是从作用域中取值

(6)<c:choose>----多分枝判断

<c:choose>
	<c:when test="${ aa>3 }"></c:when>
	<c:otherwise></c:otherwise>
</c:choose>

(7) <c:foreach>

         

   1、说明:

  • vs 变量是存在作用域中的,要用 el 来取;
  • vs 变量封装的是每次循环的角标、计数、是否第一次循环、是否最后一次循环等信息;
  • 动态循环类似于 java 中的增强 for;

          

3、格式化标签库

(1)使用的前提:导包加 taglib 引入

(2)常用的格式化标签

4、练习:信息管理系统修改

八、过滤器

1、概述

(1)作用:对请求和响应做预处理;对 servlet 进行防护;

2、使用

(1)步骤:

  • 写一个类实现 filter 接口;
  • 重写三个方法:init、dofilter、destroy;
  • 配置 web xml ;

       

(2) 注意:

  • url pattern 的3种写法:
  • /*      --------拦截所有;
  • *.do  --------拦截以.do结尾的请求,一般用于模块拦截;
  • /ts     --------拦截特定的 servlet 的访问;
  • 多个过滤器构成链式,执行范围大的,最后执行范围小的(具体的执行顺序?);
  • 三个方法的执行的时机:
  • init 方法在服务器启动的时候执行;
  • destroy关闭的时候执行;
  • doFilter 方法在请求和响应的时候执行;
  • Filter 的生命周期:伴随服务器的启停;
  • 执行过程:request----url----web xml----Filter----Filter----servlet-----Filter-----browser

3、Filter 应用案例

(1)统一编码设置

(2)session 管理:下面的代码在 doFilter 方法中

   

九、监听器

1、概述

(1)作用:用于监听request、session、sevletContext三个作用域对象的创建、销毁和内容改变

(1)使用:

  • 写一个实现相应的 listener;
  • 重写相应的方法;
  • 在 web xml 中进行配置;

2、监听 request

(1)servletRequestListener:

  • 监听request的创建和销毁;
  • 重写方法的形参可以获得 request 对象;

(2)servletRequestAttributeListener:

  • 监听 request 中属性的新增删除和替换;
  • 重写方法形参可以获得相应的键和值;

3、监听 session

(1)httpSessionListener:

  • 监听 session 的创建和销毁;
  • 重写方法的形参可以获得 session 对象;

(2)httpSessionAttributeListener:

  • 监听 session 中属性的新增删除和替换;
  • 重写方法形参可以获得相应的键和值;

(3)应用:统计网站的在线人数 try it

4、监听 servletContext

(1)servletContextListener:

  • 监听 servletContext 的创建和销毁;
  • 重写方法的形参可以获得 servletContext 对象;

(2)servletContextAttributeListener:

  • 监听 servletContext 中属性的新增删除和替换;
  • 重写方法形参可以获得相应的键和值;

猜你喜欢

转载自blog.csdn.net/stanwuc/article/details/83582776