JSTL标签库
JSTL概述
JSP标准标签库
作用:提供一个标准通用的标签库,和el表达式一起 取代<% %>
版本:
1.0 1.1和1.2(区别不大)
1.0EL表达式没有纳入规范
1.1和1.2EL表达式纳入了规范
下载jar包,导入到工程
jstl.jar
standard.jar
标签库
c.tld 核心的标签库
fn.tld EL表达式标签库
sql.tld 数据库的标签库
JSTL的快速入门
导入相应的jar包
新建jsp的文件,引入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
使用
<h4>传统方式</h4>
<%
int a = 10;
if(a == 10) {
out.print("i=10");
}
%>
<h4>JSTL方式</h4>
<c:set var="i" value="10" scope="page" ></c:set>
<c:if test="${ i eq 10 }">
<font color="red"> i = 10</font>
</c:if>
JSTL的标签
<c:out> 输出内容
value :输出的内容(常量或者变量)
default :默认值,找到不就输出default的内容
escapeXml:默认是true,进行转译,设置为flase,不转译
<h4>传统方式</h4>
<%="Hello" %>
<%
int a=10;
request.setAttribute("name","xy");
%>
<%= a %>
<h4>JSTL方式</h4>
<c:out value="Hello"></c:out>
<c:out value="${name}"></c:out>
<c:set>
向4个域中存入值
<c:set var="i" value="10" scope="request"></c:set>
${ i }
修改JavaBean
<c:set target="${user} }" property="username" value="李四"></c:set>
${user.username }
属性:
var 定义属性
value 存入的值
scope 域范围
target: 修改JavaBean对象
property: 修改的属性
<c:remove>
属性
var 删除属性
scope 域范围
<c:remove var="name" scope="page"/>
<c:catch>
属性: var 把异常信息保存到变量中
<h4>传统方式</h4>
<%
try{
}catch(Exception e){
e.printStackTrace();
}
%>
<h4>JSTL方式</h4>
<c:catch var="e">
<%
int a = 10/0;
%>
</c:catch>
${ e.message }
<c: if> 没有<c:else>标签
属性:
test: 判断的条件
var 计算的结果保存早变量中
scope 域的范围
<h4>传统方式</h4>
<%
int a = 10;
if(a>=10){
out.print("a>=10");
}else{
out.print("a<10");
}
%>
<h4>JSTL方式</h4>
<c:set var="i" value="10" scope="page"> </c:set>
<c:if test="${i ge 10} var="x" scope="page">
i >= 10
</c:if>
<c:if test="${i lt 10}">i < 10</c:if>
<c:choose>
<c:when>
<c:otherwise>类似于if else if else
<h4>传统方式</h4>
<%
int a = 10;
if(a >=10){
}else if(a<10){
}else{
}
%>
<h4>JSTL方式</h4>
<c:choose var="i" value="10" scope="page">
<c:when test="${i ge 10 }"></c:when>
<c:when test="${i lt 10 }"></c:when>
<c:otherwise></c:otherwise>
</c:choose>
<c:forEach>
循环遍历(数组,集合,Map,对象集合)
属性:
var
items 要遍历的内容
<h4>遍历数组</h4>
<%
String[] arrs = {"a","b","c","d"};
request.setAttribute("arrs", arrs);
%>
<!-- for(Stirng s : arrs){} -->
<c:forEach var="s" items="${ arrs} }">
${s}
</c:forEach>
<h4>遍历集合</h4>
<%
List<String> list = new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
request.setAttribute("list", list);
%>
<c:forEach var="s" items="${list }">
${s }
</c:forEach>
遍历结合和对象省略
迭代数据 类似于for
属性
varStatus 存储4种状态信息
first 是否是第一个成员
last 是否是最后一个成员
count 计数
index 现在成员的索引
<c:forEach var="i" begin="1" end="10" step="2" varStatus="status">
<c:param>传递参数
<c:import> 包含页面
<c:import url="/jstl/choose.jsp" context="/day13" var="i" scope="page">
<c:param name="username" value="zhangsan"></c:param>
</c:import>
${i}
url 引入页面地址
countext 虚拟路径
var 引入页面保存到属性中
scope 域的范围
<c:url> 构造一个URL地址,其主要目的是实现URL重写,URL重写就是将会话标识号以参数形式附加在URL地址后面
http://localhost/day12/demo?jsessionid=xxxxxxxxxxxxxxxx;
<c:url var="i" vlaue="/jstl/forEach.jsp" scope="request" context="/day13">
<c:param name="username" value="ll"></c:param>
</c:url>
<a href="${i }">choose</a>
<c:redirect> 重定向
<c:redirect url="/jstl/chooser.jsp" context="/day13">
<c:forTokens> 分割字符串
delims: 分割的标志
items: 要分割的字符串
<c:forTokens items="${i}" delims=","></c:forTokens>
EL函数(操作字符串)
引入标签库
<%@ taglib uri ="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
例子:
${fn:length("abcdefg") }
${fn:toUpperCase("ggreg") }
自定义EL函数(入门)
编写一个java类,方法都是静态方法
在WEB-INF目录下创建tld文件,配置
选择2.0
完成配置,tld文件要放在WEB-INF下
<function>
<!-- 配置方法名称,可以隐藏sayHello变成sayHi -->
<name>sayHi</name>
<!-- 方法所在的类 -->
<function-class>cn.itcast.el.ElDemo1</function-class>
<!-- 配置方法的签名 -->
<function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
</function>
自定义EL标签
实现SimpleTag接口
编写一个类,继承
重写5个方法
void setJspContext(JspContext pc)
void setParent(JspTag parent)
void setJspBody(JspFragment jspBody)
void doTag()
JspTag getParent()
快速入门步骤
编写一个类,继承SimpleTagSupport类
选择重写的方法,doTag()必须有
需要配置
<tag>
<!-- 配置自定义标签 -->
<name>print</name>
<!-- 配置标签的类 -->
<tag-class>cn.itcast.tag.TagDemo1</tag-class>
<!-- 配置标签主体 -->
<body-content>empty</body-content>
</tag>
在jsp页面上,引入标签库
<%@ taglib uri="http://www.itcast.cn/1110/myc" prefix="myc" %>
使用标签
带有标签主体的
编写类,继承SimpleTagSupport类
重写doTag()方法
获取标签主体对象
JspFragment jf = getJspBody();
jf.invoke(pc.getOut());
配置
<tag>
<!-- 配置自定义标签 -->
<name>out</name>
<!-- 配置标签的类 -->
<tag-class>cn.itcast.tag.TagDemo2</tag-class>
<!-- 配置标签主体 -->
<body-content>scriptless</body-content>
</tag>
<body-content>元素可选值有(现在一般只用前两个)
empty
scriptless
JSP
tagdependent
JSP开发的模式(MVC)
jsp+Servlet+JavaBean
Servlet处理请求
jsp显示数据
JavaBean封装数据和处理数据
现在叫MVC(分层思想)
M:Model层 JavaBean
V:View层 JSP
C:Controller层 Servlet
完成注册需求
注册表单(案例)
数据库(没有)
使用xml来代替
架构
Servlet+JSP+JavaBean
技术
解析XML使用DOM4J技术
Servlet技术
BeanUtils技术
JSTL+EL表达式
创建新的新项目
导入jar包
开发的步骤
编写注册的页面,
用户名,密码,确认密码,别名,邮箱,验证码
先完成数据的校验 onsubmit()
都不能为空,密码和确认密码一致
邮箱格式正确(正则表达式)
发送请求,请求Servlet,接收数据,封装,处理数据
显示到jsp上