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 标签技术的更多相关文章

  1. 自定义JSP标签库及Properties使用

    自定义JSP标签库及Properties使用 自定义JSP标签 自定义JSP标签技术是在JSP 1.1版本中才出现的,它支持用户在JSP文件中自定义标签,这样可以使JSP代码更加简洁. 这些可重用的标 ...

  2. 自定义标签(客户化jsp标签)

    客户化jsp标签技术是在jsp1.1版本中才出现的,他支持用户在jsp文件中自定义标签,这样可以使jsp代码更加简单,这些可重用的标签能够处理复杂的逻辑运算和事物或定义jsp网页的输出内容和格式. 创 ...

  3. jsp2.0+中的标签文件,JSP Fragment技术

    刚进新公司不久,今天在看到项目中用到了.tag文件.刚开始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术.以 ...

  4. 11、Jsp加强/EL表达式/jsp标签

    1 Jsp基础回顾 Jsp基础 1)Jsp的执行过程 tomcat服务器完成:jsp文件->翻译成java文件->编译成class字节码文件-> 构造类对象-> 调用方法 to ...

  5. JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

    JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...

  6. javaWeb学习总结(8)- JSP标签(6)

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  7. 一、JSP标签介绍,自定义标签

    一.JSP标签介绍 1. 标签库有什么作用 自定义标签库是一种优秀的表现层技术,之前介绍的MVC模式,我们使用jsp作为表现层,但是jsp语法嵌套在html页面,美工还是很难直接参与开发,并且jsp脚 ...

  8. [原创]java WEB学习笔记16:JSP指令(page,include),JSP标签(forwar,include,param)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. JSP标签和EL表达式

    1.jsp标签: sun原生的,直接jsp使用 <jsp:include> -- 实现页面包含,动态包含 <jsp:include page="/index.jsp&quo ...

随机推荐

  1. 常用px,pt,em换算表

    pt (point,磅):是一个物理长度单位,指的是72分之一英寸. px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(D ...

  2. Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦)

    大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏览器有过之而无不及的地方.可能大家对co ...

  3. 使用Apache 的lib进行List、Set、数组之间的转换(转)

    使用Apache Jakarta Commons Collections: import org.apache.commons.collections.CollectionUtils; String[ ...

  4. C#.NET 打印连续纸高度动态变化(基于长江支流的金质打印通)

    问题是这样的,打印机使用的是卷筒的连续纸,要打印的内容因为数据行数不同,高度会有变化.这时如果能在打印时动态改变纸张大小(其实只改变高度即可)当然是最好的选择. 我使用了网上久负盛名的[长江支流]的“ ...

  5. shell 加法

    shell 加法 i=$i+1 是在i的变量值后加上字符串'+1' 总结:其他语言中的$i++操作在shell中表示如下:#!/bin/bash n=1;echo -n "$n " ...

  6. 使用Windows Azure创建Linux系统虚拟机-上

    创建虚拟机来运行Linux 当您在Azure管理门户中使用映像图库时,创建运行Linux的虚拟机很容易.本指南告诉您如何做到这一点,假设你没有使用过Azure. 注意: 即使你不需要使用过Azure虚 ...

  7. android智能家居在线语音控制

    对于android 智能家居项目,如果能实现语音控制,无疑会丰富项目功能,改善用户体验,android语音识别的方法有三种:一是使用intent调用语音识别程序,二 是应用程序自己调用语音识别库,三是 ...

  8. Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1

    One of the added bonuses of Dynamics CRM is its ability go where you go! With the Spring ’14 Wave Up ...

  9. 最短路变形 poj3615&

    问题: 牛要跨过一些障碍,希望以最小的体力跨过障碍,并且对于一条路径,只在乎其中最高的障碍. 输入N代表站点数,标记为1—N,输入M代表路径数,从站点S到E之间需要跨过高度为H的障碍. 输入T代表牛要 ...

  10. What does enumerable mean?

    I was directed to MDN's for..in page when it said, "for..in Iterates over the enumerable proper ...