JSP和JSTL

在这里插入图片描述

1、概念

	Java Server Pages :Java服务器端页面
	可以理解:一个特殊的页面,既可以指定定义HTML标签,又可以定义Java代码 
	用于简化书写
	本质是一个Servlet

与HTML的区别

	HTML只能为用户提供静态数据
	JSP技术允许在页面中嵌套Java代码,为用户提供动态数据

与Servlet的区别

	Servlet很难对数据进行排版
	JSP除了可以用Java代码产生动态数据额同时,也容易对数据进行排版

2、原理

在这里插入图片描述

3、基础语法

注释

显示注释:允许客户端看见,从HTML风格继承而来
隐示注释:客户端无法看见,从Java风格继承;JSP自己的注释
1、//注释,单行注释    /*多行注释*/
2、<!--    HTML风格的注释        -->
3、<%--       JSP注释                      --%>

Scriptlet(脚本小程序)

所有嵌入在HTML代码中的Java程序

三种Scriptlet,都必须使用 Scriptlet 标记出来

  1. <% %>:Java脚本段,可以定义局部变量,编写语句
    生成的代码在Servlet中的service方法体中
  2. <%! %>:声明,可以定义全局变量、方法、类
    生成的代码在Servlet的类体中
  3. <%= %>:输出表达式,数据一个变量或具体内容
    生成的代码在Servlet中的service方法体中,相当于out.print()输出

4、JSP的指令标签

1. include静态包含

格式:<%@ include file = "要包含的文件路径" %>  <!-- 相对路径-->

特点:
1. 将内容进行了直接的替换
2. 静态包含只会生成一个源码文件,最终内容全在_JSPService方法体中(源码文件中)
3 .不能出现同名变量
4.运行效率高一些,耦合性较高,不够灵活

2. include动态包含

格式:<jsp:include page = "要包含页面地址"> <jsp:include> 

特点:
1. 动态包含相当于方法的调用
2. 动态包含会生成多个源码文件
3. 可以定义同名文件
4. 效率高,耦合度低
注意:
当动态包含不需要传递参数时,include双标签之间不要加任何内容,包括空格,除非确认要使用参数,否则报错
使用动态包含传递蚕食

<jsp:include page = "">
		<jsp:parm name="参数名"  value="参数值"/>
<jsp:include>
name属性不支持表达式
value属性支持表达式

获取参数:
request.getParameter(name) 通过指定参数名获取参数

5、四大域对象

1、四种属性范围

  1. page范围
    pageContext:只在一个页面中保存属性,跳转之后无效
  2. request范围
    request:只在一次请求中保存,服务器跳转后依然有效
  3. session范围
    session:在一次会话范围中,无论何种跳转都可以使用
  4. application范围
    application:在整个服务器上保存
方法类型描述
public void setAttribute(String name,Object o)普通设置属性的名称及内容
public Object getAttribute(String name)普通根据属性名称取属性
public void removeAttribute(String name)普通删除指定的属性

2、属性范围的特点

  1. page
    本页面取得服务器端跳转(jsp:forward)后失效
  2. request
    服务器跳转有效,客户端跳转无效
  3. session
    无论是客户端还是服务器端都可以取得,但是重新开启一个新的浏览器,则无法取得之前设置的session。
  4. application
    所有的application属性直接保存在服务器上

在合理范围尽可能小,避免资源浪费

6、EL表达式

概念

EL(Expression Language)是为了使JSP写起来更加简单。

语法

语法结构:¥{expression}

EL表达式一般操作的都是域对象中的数据,操作不了局部变量
EL默认查找方式为从小到大查找

获取数据

1、获取域对象的值

${uname}

获取指定域对象的值

${pageScope.uname}
${requestScope.uname}
${sessionScope.uname}
${applicationScope.uname}

2、获取List

获取list指定下标的值
${list[下标]} 
获取集合的长度          
${list.size()}
注:
	list代表的是限域变量名

3、获取Map

${map["key"]}或${map.key}
注:
	map代表的是存在域对象中的变量名(限域变量名)

4、获取JavaBean对象

${user}		获取对象
${user.uname}或${JavaBean对象.get属性名()}	获取对象中的属性

5、empty

	判断域对象是否为空
		为空,返回true
		不为空,返回false;
	如果域对象是字符串:
		不存在,空字符串,null:返回true
	如果域对象是List:
		null,没有长度:返回true
	如果域对象是Map:
		null,空map对象:true
	如果域对象是JavaBean:
		null:true
		空对象:false

	判断域对象不为空
	${!empty 限域对象名}

EL表达式运算

1、等值比较

		==  或  eq
		${aa==bb}
		${aa eq bb}

2、算术运算

	加法:+
	减法:-
	乘法:*
	除法:/或div


	${a +b}
	${a div b}

3、大小比较

	大于:		>
	小于:		<
	大于等于:>=
	小于等于:<=
	${aa > bb}

7、JSTL

	Java Server Page Standard Tag Libray(JSTL):JSP标准标签库,是一个定制标签类库的集合,用于解决一些常见的问题
	<%@taglib uri="" prefix="" %>

需要的jar包

standard.jar和jstl.jar

核心标签库

		http://java.sun.com/jsp/jstl/core
		包含Web应用的常见工作,比如:循环、表达式赋值、基本输入输出等

条件动作标签

使用该标签先引入核心标签库

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
JavaJSTL
if、if…elseif
switch…case…defaultchoose…when…otherwise
if标签

if标签先对某个条件进行测试,如果该条件运算结果为true,则处理它的主体内容,测试结果保存在一个Boolean对象中,并创建一 个限域变量来引用Boolean对象。可以利用var属性设置限域变量名,利用scope属性来指定其作用范围。

<c:if test="<boolean>" var="<string>" scope="<string>">
....
	1、标签操作的一般都是域对象
	2、if标签没有else,如果想要else的效果,就需要设置两个完全相反的条件
</c:if>
属性描述是否必要默认值
test条件
var用于存储条件结果的变量(限域变量名)
scopevar属性的作用域
可取值:page、request、session、application
page
choose、when和otherwise标签
<c:choose>
	<c:wen test="<boolean>">
	...
	</c:when>
	
	<c:wen test="<boolean>">
	...
	</c:when>

	<c:otherwise>
	...
	</c:otherwise>
</c:choose>

属性:

  1. choose没有属性
  2. when标签只有一个test属性,必须属性
  3. otherwise标签没有属性
    注:
  4. choose标签和otherwise标签没有属性,而when标签有一个必须的test属性
  5. choose标签中必须包含至少一个when标签,可以没有otherwise标签
  6. otherwise标签必须在最后一个when标签之后
  7. choose标签中只能有when标签和otherwise标签,而when标签和otherwise标签可以嵌套其他标签
  8. otherwise标签只有在所有的when标签都不满足情况下才运行

迭代标签

使用该标签先引入核心标签库

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
forEach标签
<c:forEach
				items="<object>"
				begin="<int>"
				end="<int>"
				step="<int>"
				var="<string>"
				varStatus="<string>">
</c:forEach>
属性描述是否必要默认值
begin开始的元素(0=第一个元素,1=第二个元素)0
end最后一个元素(0=第一个元素,1=第二个元素)Last element
step每一次迭代的步长1
var代表当前条目的变量名称
varStatus代表循环状态的变量名称
items要被循环的数据

forEach varStatus属性:

  1. **index:**从0开始的迭代索引时,本次的位置
  2. **count:**从1开始的迭代时,本次的位置
  3. **first:**用来表明当前这轮迭代是否为第一次迭代的标志
  4. **last:**用来表明当前这轮迭代是否为最后一次迭代的标志
<c:forEach begin="开始数" end="结束数" step="迭代数" var="限域变量名">
</c:forEach>
相当于
for(int i = 0 ; i < 10;i++){
} 

格式化标签库

		http://java.sun.com/jsp/jstl/fmt
		用来格式化显示数据的工作,比如:对不同区域的日期格式化等

格式化动作标签

JSTL提供了格式化和解析数字和日期的标签,我们讨论里面有: formatNumber.、formatDate、parseNumber及parseDate.
使用该标签先引入格式化标签库

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

formatNumber标签用于格式化数字,百分比,货币。该标签用指定的格式或精度来格式化数字。(将数值型数据转换成指定格式的字符串类型。)

<fmt:formatNamber
			value="<string>"
			type="<string>"
			var="<string>"
			scope="<string>"/>
			
属性描述是否必要默认值
value要格式化的数值
typenumber(数值型默认)、currency(货币类型)或percent(百分比类型)类型Number
var限域变量名,用来接收格式化后的结果Print to page
scopevar属性的作用域(page、request、session、application)page

注意:

  1. 如果设置了var属性,则格式化后的结果不会输出,需要通过el表达式获取var对应的限域变量名
  2. 默认的类型(type) 的取值为number。可取值: number数值型、percent百分比类型、 currency货币型
formatDate标签
<fmt:formatDate
			value="<string>"
			type="<string>”
			datestyle="<string>"
			timestyle="<string>"
			pattern="<string>"
			timeZone=" <string>"
			var="<string>" 
			scope="<string>"/>
属性描述是否必要默认值
value要格式化的日期
typedate、time或bothdate
dateStylefull、long、medium、short或defaultdefault
timeStylefull、long、medium、short或defaultdefault
pattern自定义格式模式
timeZone显示日期的时区默认时区
parseNumber标签

parseNumber标签用来解析数字,百分数,货币。(parseNumber 标签可以将数字、货币或百分比类型的字符串转换成数值型。)

<fmt:parseNumber
		value="<string>"
		type="<string>"
		var="<string>"/>
属性描述是否必要默认值
value要解析的数字Body
typenumber、currency、percentnumber
var存储待解析数字的变量print to page
scopevar属性的作用域page
parseDate标签
<fmt:parseDate
		value="<string>"
		type="<string>"
		dateStyle="<string>"
		timeStyle="<string>"
		pattern="<string>"
		var="<string>"
		scope="<string>"/>
属性描述是否必要默认值
value要显示的日期
typedate、time、bothdate
dateStylefull、long、medium、short、defaultdefault
timeStylefull、long、medium、short、defaultdefault
pattern自定义格式模式
var存储格式化日期的变量名显示在页面
scope村吃格式化日志变量范围页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值