首页

JSTL标签库的使用、监听器、过滤器

搜索

1. 重点:掌握JSTL的使用

1.1 JSTL简介

   1)JSTL - Jsp Standard Tag Library,JSP标准标签库,用于在JSP页面上完成条件判断、

迭代、格式化等操作,用于替代JSP代码段和JSP表达式,来简化JSP页面的编写

JSTL和EL一样,属于视图(V)层的技术

如:<c:if test="${empty user}">

用户未登录

    </c:if>

   2)常用的JSTL标签库有:

a.核心标签库,标识符为http://java.sun.com/jsp/jstl/core

b.格式化标签库,标识符为 http://java.sun.com/jsp/jstl/fmt

   3)在JSP页面上使用标签库的一般步骤:

a.将JSTL对应的jar文件(jstl_*.jar)拷贝到WEB-INF/lib下

b.在JSP页面上使用taglib指令导入标签库:

<%@ taglib prefix="前缀" uri="标签库的标识符"%>

(前缀可以自己定义,惯例是核心标签库用c,格式化为fmt)

1.2 核心标签库

   1)标签的分类:

条件标签:<c:if>

迭代标签:<c:forEach>

通用标签:<c:set>,<c:remove>,<c:out>

   2)条件标签<c:if>

语法:

<c:if test="${条件表达式}">

标签体

</c:if>

效果:当test属性的值为true时,在JSP页面当前位置输出标签体,否则不输出

如:<c:if test="${sessionScope.user !=null}">

欢迎,${user.userName}!

    </c:if>

对应的JSP代码段:

<%

//从会话中获取名称为user的对象

User u=(User)session.getAttribute("user");

if(u!=null){

out.println("欢迎,"+u.getUserName()+"!");

}

%>

2. JSTL标签库(二)

2.1 迭代标签

基本语法:

<c:forEach items="${数组或集合}" var="循环变量" begin="起始值或起始序号" 

   end="终止值或终止序号" step="步长"

   varStatus="状态变量">

循环体

</c:forEach>

如:<c:forEach items="${pageContextScope.arr}"  var="item">

${item}

    </c:forEach>

对应的JSP代码段:

<%

int[] myArray=(int[])pageContext.getAttribute("arr");

for(int i=0;i<myArray.length;i++){

int item=myArray[i];

//将item放入页面作用域中

pageContext.setAttribute("item",item);

//输出循环体的内容

out.println(item);

}

%>

属性varStatus用于指定每次迭代过程中的状态变量,状态变量保存在页面作用域中,具有如下属性:

int index - 循环的序号,从0开始

int count - 循环的次数,从1开始

boolean first - 指示是否为第一行

boolean last - 指示是否为最后一行

-------------------------------------------------------

2.2 通用标签:

语法:

<c:set var="变量名称" value="${值}"

scope="page|request|session|application"/>

-->设置作用域内变量的值

<c:remove var="变量名称" scope="..." />

-->删除作用域内指定的变量

<c:out value="${表达式}" escapeXml="true|false"/>

-->将value的值输出在页面上

属性escapeXml=true,将特殊字符进行转义,默认值escapeXml=true,特殊字符转义

----------------------------------------------------------------

2.3 格式化标签:

   1)引入格式化标签库:

<@ taglib prefix="fmt"  uri="http://java.sun.com/jsp/jstl/fmt"%>

   2)格式化数值:

<fmt:formatNumber value="$[数值]" pattern="数值模式"/>

数值模式中,#代表整数位数,0代表小数位数

   3)格式化日期:

<fmt:formatDate value="${Date对象}" 

pattern="日期模式"/>

   

---------------------------------------------------

MVC模式中的V由EL、JSTL组成,尽量不要出现JSP代码段和JSP表达式

---------------------------------------------------

EL,JSTL中的数据来自于作用域

--------------------------------------------------------------

3. 了解Servlet监听器的使用

3.1 Servlet监听器

可以在特定事件发生时触发,如应用程序启动,会话开始或会话结束时

3.2 使用HttpSessionListener监听会话的创建和销毁

Step1.定义一个类,实现接口HttpSessionListener

Step2.在web.xml中配置监听器

<listener>

   <listener-class>包名.监听器的类名</listener-class>

</listener>

不同的监听器需要配置对应的<listener>

--------------------------------------------------------------

4. 过滤器Filter的使用

4.1 什么是Filter

Filter - 过滤器,用于拦截对Servlet的请求,以附加额外的功能,如记录日志信息,安全检查

4.2 实现过滤器的步骤:

Step1.定义一个类,实现接口javax.servlet.Filter

Step2.在web.xml中配置过滤器

<filter>

   <filter-name>名称</filter-name>

   <filter-class>包名.过滤器类名</filter-class>

</filter>

<filter-mapping>

   <filter-name>名称</filter-name>

   <url-pattern>...</url-pattern>

</filter-mapping>

4.3 Filter接口中的方法:

init方法 - Tomcat服务器创建Filter对象后调用init方法,该方法只调用1次

doFilter方法 - 拦截Servlet时,Tomcat服务器调用Filter对象的doFilter方法

destroy方法 - Tomcat服务器在销毁Filter时调用该方法

4.4 拦截器运行过程(运行原理)

1)Tomcat服务器在启动(加载)Web应用程序时,创建Filter的对象,并调用init方法

2)当通过浏览器访问指定的Servlet时:

浏览器-->addBookToCart.do

-->Tomcat在web.xml中寻找是否存在匹配的Filter

--><url-pattern>*.do</url-pattern>

--><filter-name>logFilter</filter-name>

--><filter-class>day09.LogFilter</filter-class>

3)Tomcat调用LogFilter的doFilter方法:

Tomcat-->LogFilter的doFilter方法

  -->chain.doFilter

       -->cartServlet.addBookToCart方法

文件上传:(扩展)

step1 在form中,设置method="post",设置enctype="multipart/form-data",enctype属性用于设置表单的编码方式,

对于文件上传,必须设置成"multipart/form-data"

step2 在servlet类当中,不能够使用request.getParameter方法来获得参数值,

要使用InputStream request.getInputStream();分析InputStream来获得参数值。直接分析InputStream比较复杂,

一般使用一些封装好的工具(比如apache提供的commons-fileupload.jar)来获得参数值

Servlet/JSP 9 Days 

Servlet/JSP 9天课程完毕 <谭东整理>

 

 


上一页 下一页