JSTL----学习笔记

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上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值