20160331javaweb之JSP 标签技术
jsp的标签技术:在jsp页面中最好不要出现java代码,这时我们可以使用标签技术将java代码替换成标签来表示
1.jsp标签:sun原生提供的标签直接在jsp页面中就可以使用
<jsp:include> -- 实现页面包含,动态包含
<jsp:forward> -- 实现请求转发
<jsp:param> -- 配合上面的两个标签使用,在请求包含和请求转发时用来在路径后拼接一些请求参数

2.EL表达式:最初出现的目的是用来取代jsp页面中的jsp脚本表达式.但是随着el的发展el的功能已经不限于此了
${el表达式}
(1)获取数据:
使用中括号的地方都可以使用点号替代,除了中括号中是数字或者中括号中包含特殊字符(-.)的情况除外
在中括号中如果不用双引号引起来则是变量,先找变量的值再拿变量的值使用.如果用双引号则是常量,直接使用常量的值
~获取常量
字符串/数字/布尔类型,直接写在el表达式中,el直接进行输出
~获取域中的变量
如果el中写的是一个变量的名,则el会调用pageContext的findAttribute方法,在四大作用域中以给定的名字找对应的属性值,找到后进行输出,如果四个域中都找不到,什么都不输出
~获取数组中的数据
~获取集合中的数据
~获取Map中的数据
~获取javabean的属性
代码演示:
//我是javabean
package com.dzq.domain; public class UserBean {
private String username;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }
我 的 下 面 是 jsp 页 面 ,上 面 是javabean,哈哈哈
<%@page import="java.util.*" import="com.dzq.domain.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>获取javabean的属性</h1><hr>
<%
UserBean user=new UserBean();
user.setUsername("hello");
user.setAge(17);
pageContext.setAttribute("user", user);
%>
${user.username }${user.age }
<h1>获取Map中的数据</h1><hr>
<%
Map<String,String> map=new HashMap<String,String>();
map.put("name", "当当");
map.put("age", "17");
map.put("sex","男");
map.put("addr", "山东");
pageContext.setAttribute("map",map);
%>
${map["name"] } ${map["addr"] }
${map.sex } ${map.age }
<h1>获取集合中的数据</h1><hr>
<%
List<String> list=new ArrayList<String>();
list.add("甄嬛");
list.add("果郡王");
list.add("流朱");
list.add("浣碧");
pageContext.setAttribute("list",list);
%>
${list[2] }
<h1>获取数组中的数据</h1><hr>
<%
String [] names={"滋味","hello","呵呵"};
pageContext.setAttribute("names", names);
%>
${names[0]}
<h1>获取域中的变量数据</h1><hr>
<%
String name="hello";
pageContext.setAttribute("name", name);
%>
${name}
<h1>获取常量数据</h1><hr>
${"发射 发射发射" } ${199 } ${true} </body>
</html>
运行截图

(2)执行运算:
算数运算
+-*/
逻辑运算
比较运算
三元运算符
empty运算符
代码演示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>empty </h1>判断对象是否为空,或者字符串为空,集合为空,域的属性为空<hr>
<%
String str=null;
pageContext.setAttribute("str", str);
%>
${empty str }
<h1>算数运算</h1><hr>
${1-2 }
${2-1 }
${2+"3" } //如果有非数字参加算数运算,el表达式会试图将其转化成数字
<h1>逻辑运算</h1><hr>
${1<0 &&3>4 ||10<5}
<h1>比较运算</h1><hr>
${1==1 } ${3<=2 }
<h1>三元运算</h1><hr>
${10>9?"yes":"no" }
</body>
</html>
(3)获取常用开发对象:el中内置了11个内置对象,这些对象el内置的,不需要提前定义就可以直接在el中使用
!pageContext -- 有了它可以很方便的获取jsp页面中的9大隐式对象
!pageScope -- page域中属性组成的Map
!requestScope -- request域中属性组成的Map
!sessionScope -- session域中属性组成的Map
!applicationScope --application域中属性组成的Map
!param -- 所有请求参数组成的Map<String,String>
paramValues -- 所有请求参数组成的Map<String,String[]>
header -- 所有请求头组成的Map<String,String>
headerValues -- 所有请求头组成的Map<String,String[]>
!cookie -- 所有cookie信息组成的Map<String,Cookie>
initParam -- 所有web应用的初始化参数组成Map
(4)调用java方法: -- 不需要大家自己会写调用方法的过程,只要会调用别人写好的标签库就可以了 fn标签库
~写一个类其中包含要被el调用的方法,这个方法必须是静态的方法
~写一个tld文件在其中对要被调用的静态方法进行一下描述
~在jsp页面中taglib指令将tld文件引入当前jsp页面,从而在jsp页面中就可以调用描述好的方法
先写一个java方法:
package com.dzq.util; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; public class ELFunc {
public static String myEncode(String str,String encode){
try {
return URLEncoder.encode(str, encode);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
再写tld文件
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>MyELFunc</short-name>
<uri>http://www.itheima.com/MyELFunc</uri>
<function>
<name>URLEnc</name>
<function-class>com.dzq.util.ELFunc</function-class>
<function-signature> java.lang.String myEncode(java.lang.String,java.lang.String)</function-signature>
</function>
</taglib>
jsp中调用java方法:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.itheima.com/MyELFunc" prefix="MyELFunc" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${MyELFunc:URLEnc("上海","UTF-8") }
${fn:toLowerCase("adaddAADTFThuhuhhhhHHhhhH") }
</body>
</html>
3.JSTL:
<c:out> 标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。
<body>
<h1>HTML转义输出</h1><hr>
<a href="#">xxx</a>
<c:out value="<a href='#'>xxx</a>"></c:out>
<h1>输出默认值</h1><hr>
<%
String addr="Hello哦";
%>
<c:out value="${addr }" default="呵呵呵"></c:out>
<h1>输出变量</h1><hr>
<%
String name="张亮";
pageContext.setAttribute("name", name);
%>
<c:out value="${name }"></c:out>
<h1>输出常量</h1><hr>
<c:out value="hello"></c:out>
</body>

<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的 属性。
<body>
<h1>设置或修改域中javabean属性的值</h1><hr>
<%
UserBean user=new UserBean();
pageContext.setAttribute("user", user);
%>
<c:set target="${user}" property="username" value="叭叭叭"></c:set>
${user.username }
<h1>设置或修改域中Map值</h1><hr>
<%
Map<String,String> map=new HashMap<String,String>();
pageContext.setAttribute("map", map);
%>
<c:set target="${map }" property="cellphone" value="10010"></c:set>
<c:set target="${map }" property="cellphone" value="10086"></c:set>
${map.cellphone }
<h1>设置或修改域中的属性值</h1><hr>
<c:set var="name" value="韦小宝"></c:set>
<c:set var="name" value="阿珂"></c:set>
${name }
</body>
<c:remove>标签用于删除各种Web域中的属性

<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catch [var="varName"]>nested actions</c:catch>
<body>
<c:catch var="e">
<%
int i=1/0;
%>
</c:catch>
${e.message }
</body>
!!<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式
<body>
<c:if test="${2>1 }">
确实是这样的
</c:if>
<c:if test="${2<=1 }">
你确定???
</c:if>
</body>
!!<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。
<body>
<%
int day=3;
pageContext.setAttribute("day", day);
%>
<c:choose>
<c:when test="${day==1 }">
星期一
</c:when>
<c:when test="${day==2 }">
星期二
</c:when>
<c:when test="${day==3 }">
星期三
</c:when>
</c:choose> </body>
!!<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。
<body>
<h1>实验:遍历10-100的偶数,如果数字所在位置是3的倍数,则显示成红色</h1>
<c:forEach begin="10" end="100" step="2" var="i" varStatus="stat">
<c:if test="${stat.index %3==0 }">
<font color="red">
${i }
</font>
</c:if>
<c:if test="${stat.index %3!=0 }">
<font color="blue">
${i }
</font>
</c:if>
</c:forEach>
<h1>循环执行指定的内容若干次</h1><hr>
<c:forEach begin="0" end="10" step="2" var="i">
${i }, </c:forEach>
<h1>遍历Map数据</h1><hr>
<%
Map map=new LinkedHashMap();
map.put("name", "hello");
map.put("jj", "hell");
map.put("heh", "hel");
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="m">
${m.key}:${m.value }<br>
</c:forEach>
<h1>遍历集合数据</h1><hr>
<%
List list =new ArrayList();
list.add("美国");
list.add("韩国");
list.add("额国");
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list }" var="l">
${l }
</c:forEach>
<h1>遍历数组数据</h1><hr>
<%
String [] city={"北京","上海","南京","云南","李静"};
pageContext.setAttribute("city",city);
%>
<c:forEach items="${city }" var="c"> ${c }<br>
</c:forEach>
</body>

!!<c:forTokens>用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的
<body>
<c:forTokens items="www.baidu.com" delims="." var="str">
${str }<br> </c:forTokens>
</body>
<c:param>标签 在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>、<c:url>或<c:redirect>标签内,为这些标签所使用的URL地址附加参数。
<c:import> 标签,实现include操作
<body>
<c:import url="../index.jsp" var="p" scope="page"></c:import>
bbb
cccc
cccc
${p }
llll
</body>
<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是将会话标识号以参数形式附加在URL地址后面
<body>
<%
String url=response.encodeURL(request.getContextPath()+"/index.jsp");
%>
<a href="<%=url %>">jajaj</a>
<c:url value="/index.jsp" context="${pageContext.request.contextPath }" var="url" scope="page"></c:url>
<a href="${url }">bbbb</a>
</body>
<c:redirect>标签用于实现请求重定向
<body>
<c:redirect url="/index.jsp" context="${pageContext.request.contextPath }"></c:redirect>
</body>
4.自定义标签技术:
暂时省略
20160331javaweb之JSP 标签技术的更多相关文章
- 自定义JSP标签库及Properties使用
自定义JSP标签库及Properties使用 自定义JSP标签 自定义JSP标签技术是在JSP 1.1版本中才出现的,它支持用户在JSP文件中自定义标签,这样可以使JSP代码更加简洁. 这些可重用的标 ...
- 自定义标签(客户化jsp标签)
客户化jsp标签技术是在jsp1.1版本中才出现的,他支持用户在jsp文件中自定义标签,这样可以使jsp代码更加简单,这些可重用的标签能够处理复杂的逻辑运算和事物或定义jsp网页的输出内容和格式. 创 ...
- jsp2.0+中的标签文件,JSP Fragment技术
刚进新公司不久,今天在看到项目中用到了.tag文件.刚开始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术.以 ...
- 11、Jsp加强/EL表达式/jsp标签
1 Jsp基础回顾 Jsp基础 1)Jsp的执行过程 tomcat服务器完成:jsp文件->翻译成java文件->编译成class字节码文件-> 构造类对象-> 调用方法 to ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- javaWeb学习总结(8)- JSP标签(6)
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- 一、JSP标签介绍,自定义标签
一.JSP标签介绍 1. 标签库有什么作用 自定义标签库是一种优秀的表现层技术,之前介绍的MVC模式,我们使用jsp作为表现层,但是jsp语法嵌套在html页面,美工还是很难直接参与开发,并且jsp脚 ...
- [原创]java WEB学习笔记16:JSP指令(page,include),JSP标签(forwar,include,param)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- JSP标签和EL表达式
1.jsp标签: sun原生的,直接jsp使用 <jsp:include> -- 实现页面包含,动态包含 <jsp:include page="/index.jsp&quo ...
随机推荐
- ASP.NET操作Word的IIS权限配置
ASP.NET账号在默认情况下是没有权限操作Microsoft Office对象的,如果不进行权限的配置,代码会抛出类似以下的异常: 检索 COM 类工厂中 CLSID 为 {00024500-000 ...
- spring--AOP2--6
AOP 之 6.6 通知参数 前边章节已经介绍了声明通知,但如果想获取被被通知方法参数并传递给通知方法,该如何实现呢?接下来我们将介绍两种获取通知参数的方式. 使用JoinPoint获取:Spring ...
- pop3
POP3_Client pop3 = new POP3_Client(); pop3, false); pop3.Authenticate("username", "pa ...
- 简单的cocos2d-x手势(转)
项目需要用到非常简单手势拨动,就是向上/下/左.右滑动时,界面能响应. 以下提供一个较为简单的手势滑动解决办法 GestureLayer.h class GestureLayer: public CC ...
- 招商银行支付dll在64位windows系统下的注册使用问题
按照文档中的说明,注册完dll后,依然报找不到COM组件的错误.尝试过以下方法: 1.在VS中将项目编译目标改为x86,只能解决VS可以启动程序的问题,一部署到IIS中就出错. 2.估计是因为权限问题 ...
- oracle rac 学习(转载)
一. RAC 并发 RAC 的本质是一个数据库,运行在多台计算机上的数据库,它的主要任务是数据库就是事务处理,它通过 Distributed Lock Management(DLM:分布式锁管理器) ...
- 用BigDecimal类实现Fibonacci算法
Fibonacci(N)=Fibonacii(N-1)+Fibonacci(N-2) 其中 Fibonacci(0)=0;Fibonacci(1)=1 用循环或则递归实现Fibonacci算法很简单, ...
- 计蒜客 取数游戏(dp)
有如下一个双人游戏:N个正整数的序列放在一个游戏平台上,两人轮流从序列的两端取数,每次有数字被一个玩家取走后,这个数字被从序列中去掉并累加到取走该数的玩家的得分中,当数取尽时,游戏结束.以最终得分多者 ...
- poj 1459 Power Network【建立超级源点,超级汇点】
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 25514 Accepted: 13287 D ...
- js 类似发微博或者微信朋友圈的时间显示 刚刚 几天前
群里的一个小伙伴(NightEagle)写的,共享出来了,我就做个记录. function getDateDiff(dateStr) { var publishTime = getDateTimeSt ...